{{notification.text}}

MirGames

Программир Всия Руси!
11.01.06 21:26
0
Сабж... :o
#1
11.01.06 21:40
0
А можно немного поконкретнее?
#2
Программир Всия Руси!
11.01.06 23:37
0
На OGL - точно нельзя, DirectX - вроде предоставляет такую возможность, но как - хз. Нло в реестре брать или еще как я думаю... Если бы точно знал, то не спрашивал.
#3
11.01.06 23:41
0
DRON
в DX можно узнать ТОЛЬКО объем доступной видеопамяти (память видяхи + AGP)
У меня у видяхи 64 МБ, а DX упорно твердит что ему доступно 110 МБ видео :blink:
#4
MirGames Dev
12.01.06 01:37
0
Никак нельзя. Хотя можно пытаться создавать текстуры... пока что-нить не произойдет :) А вообще судя по ответам на геймдеве по этой проблеме, то это довольно сложно.
#5
Программир Всия Руси!
12.01.06 03:47
0
Хм.. жалко.. насчет того,
Цитата
можно пытаться создавать текстуры... пока что-нить не произойдет

Скажу что забивал память на машинке с 64метрами + 8мб видео так что текстур было на 162 метра и все с тормозами но работало =)

Drako
Как с помощью директа определить?
#6
12.01.06 04:28
0
DRON
Ну я правда только для 9го DX могу сказать как:

IDirect3DDevice9::GetAvailableTextureMem() returns the total available memory, including AGP.

UINT GetAvailableTextureMem();

Parameters
None.

Return Values
The function returns an estimate of the available texture memory.

Remarks
The returned value is rounded to the nearest MB. This is done to reflect the fact that video memory estimates are never precise due to alignment and other issues that affect consumption by certain resources. Applications can use this value to make gross estimates of memory availability to make large-scale resource decisions such as how many levels of a mipmap to attempt to allocate, but applications cannot use this value to make small-scale decisions such as if there is enough memory left to allocate another resource.
#7
Программир Всия Руси!
12.01.06 14:05
0
Ясно, вот только думаю, есть ли смысл в проге на OpenGl впендюривать инит DirectX, ведь без инита я понимаю он эту информацию не выдаст...
#8
аксакал
12.01.06 14:10
0
DRON
Не там смысл ищешь... А стоит ли эта ерунда этого? Или ты оптимизировать загрузку текстур и геометрии в VBO собрался? ;)
#9
Почётный лектор
12.01.06 14:25
0
Интересно... А зачем это? Типа, выдать ошибку, если че не так? Думаю, в реестре такая инфа имеется... Есть еще такая утилита в DX SDK - DirectX Caps Viewer... Надо посмотреть, возможно она с исходниками. Думаю, там Device не создается.

И это... У XProger'а при инициализации движка он пишет, че за видуха и сколько памяти. Как там определяется?
Отредактировано: 12.01.06 14:27
#10
аксакал
12.01.06 14:37
0
Universal
Неее... я только оперативную память и инфу о процессоре научился узнавать :)
#11
12.01.06 17:15
0
Интересно....а как проги наподобие Everest(Aida) находят инфу об объеме памяти :unsure:
#12
MirGames Dev
12.01.06 19:45
0
"Определить объем текстурной памяти в OpenGL невозможно. Связано это, возможно, с тем, что реализации могу быть весьма и весьма разнообразны и как такового понятия текстурной памяти може и не быть (при наличии в системе очень шустрой многоканальной системной памяти почему бы и не размещать там ?) " © Ezha ( http://www.gamedev.ru/forum/?group=2&topic=1046&page=2 )
А вообще определить можно, но это слишком низкоуровневое программирование! Лучше забыть об этом :) А зачем тебе это?
#13
Программир Всия Руси!
13.01.06 00:06
0
Мне блин позарез надо, по работе, определять объем физической памяти и вилео и потом вычислять оптимальный размер текстур, а там их море... Насчет реестра я посмотрел, адрес в реестре этой инфы отличается от видяхи к видяхе... так что не подходит.. блин хз че делать...
#14
if not b then b:=not b;
13.01.06 01:21
0
попробуй написать письмо авторам AIDA, мож помогут
#16
Почётный лектор
13.01.06 01:36
0
У них так сделано: есть база данных и определя ID вендора и платы получают всю инфу. ИМХО.
#17
Один из первых
13.01.06 16:00
0
Есть неплохая програмулинка GLView ( http://www.realtech-vr.com/glview ), так вот в ней объем видеопамяти меряется через DirectX:
Код
unsigned int gvInfoGetAvailableVidMem(void);  // Get total video memory (using DirectX)

Исходники на C.
Отредактировано: 13.01.06 16:05
#18
Программир Всия Руси!
07.10.10 18:20
0
Вот такой вот некрофильский пост своей же темы 4-х летней давности.
Через 4 года после того как сам прокачался в программинге, научился получать объем видопамяти легко и просто. Без всяких DirectX и танцев с бубнами. Причем тот же DXDiag который я юзал раньше для этой цели возвращает в Vista и 7 не объем VRAM а впринципе выделенной под GPU память что на порядок больше и не то, что интересует на самом деле. Вообще по всему интернету нубы и не только не могут найти вменяемого способа, однакож он есть.
В общем вот рабочий код тестовой проги:
Код

#include <stdio.h>
#include <tchar.h>

#define _WIN32_DCOM 1
#include <windows.h>
#include <wbemidl.h>
#include <comutil.h>

#pragma comment(linker, "/defaultlib:comsuppw.lib")
#pragma comment(linker, "/defaultlib:wbemuuid.lib")

int _tmain(int argc, _TCHAR* argv[])
{
    IWbemLocator* locator = NULL;

    CoInitialize(NULL);

    HRESULT hr = CoCreateInstance(CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (void**)&locator);
    if( FAILED(hr) )
    {
        printf("Couldn't create locator.\n");
        return 1;
    }

    IWbemServices* services = NULL;
    hr = locator->ConnectServer(_bstr_t("root\\cimv2"), NULL, NULL, NULL, 0, NULL, NULL, &services);
    locator->Release();
    if( FAILED(hr) )
    {
        printf("Couldn't connect.\n");
        return 2;
    }

    hr = CoSetProxyBlanket(services, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE);
    if( FAILED(hr) )
    {
        services->Release();
        printf("Could not set security.\n");
        return 3;
    }

    IEnumWbemClassObject* instanceEnum = NULL;
    hr = services->CreateInstanceEnum(_bstr_t("Win32_VideoController"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &instanceEnum);
    services->Release();
    if( FAILED(hr) )
    {
        printf("Couldn't create enumerator.\n");
        return 3;
    }

    IWbemClassObject* instance;
    ULONG objectsReturned = 0;

    while( 1 )
    {
        hr = instanceEnum->Next(WBEM_INFINITE, 1, &instance, &objectsReturned);
        if( FAILED(hr) )
        {
            instanceEnum->Release();
            printf("Enum->Next() failed.\n");
            return 4;
        }

        if( objectsReturned != 1 )
            break;

        VARIANT v;
        VariantInit(&v);
        hr = instance->Get(_bstr_t("AdapterRAM"), 0, &v, NULL, NULL);
        if( FAILED(hr) )
        {
            printf("Could not retrieve \"AdapterRAM\" property.\n");
        }
        else
        {
            printf("AdapterRAM = %d\n", V_UI4(&v)/(1024*1024));
        }

        VariantClear(&v);
        instance->Release();
        instance = NULL;
    }

    instanceEnum->Release();

    printf("Completed Successfully.\n");

    CoUninitialize();

    Sleep(5000);
    return 0;
}
#19
08.10.10 02:08
0
А если права пользовательские/гостевые WMI все же отдаст тебе все, что ты хочешь? :)
#20
08.10.10 02:13
0
А еще WMI может не работать, весьма частое явление, при этом вся система как бе функционирует (офисы, новелы, 1Сы, игрушки - все работает), и не понять кто виноват ( как тут http://social.technet.microsoft.com/Forums...ab-b5b1d80cb2ad ).
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}