Метод IDirectDraw7::GetAvailableVidMem (ddraw.h)
Извлекает общий объем доступной памяти дисплея и объем памяти дисплея, свободной в данный момент для заданного типа поверхности.
Синтаксис
HRESULT GetAvailableVidMem(
[in] LPDDSCAPS2 unnamedParam1,
[out] LPDWORD unnamedParam2,
[out] LPDWORD unnamedParam3
);
Параметры
[in] unnamedParam1
Указатель на структуру DDSCAPS2 , которая указывает аппаратные возможности предлагаемой поверхности.
[out] unnamedParam2
Указатель на переменную, которая получает общий объем доступной памяти дисплея в байтах. Полученное значение отражает общий объем видеопамяти за вычетом видеопамяти, необходимой для основной поверхности и любых частных кэшей, зарезервированных драйвером дисплея.
[out] unnamedParam3
Указатель на переменную, которая получает объем свободной отображаемой памяти, который можно выделить для поверхности, которая соответствует возможностям, заданным структурой в lpDDSCaps2.
Возвращаемое значение
Если метод выполнен успешно, возвращаемое значение будет DD_OK.
В случае сбоя метод может вернуть одно из следующих значений ошибки:
- DDERR_INVALIDCAPS
- DDERR_INVALIDOBJECT
- DDERR_INVALIDPARAMS
- DDERR_NODIRECTDRAWHW
Комментарии
В следующем примере на C++ показано, как использовать GetAvailableVidMem для определения общей и свободной памяти дисплея, доступной для поверхностей текстуры.
// For this example, the lpDD variable is a valid
// pointer to an IDirectDraw7 interface.
LPDIRECTDRAW7 lpDD;
DDSCAPS2 ddsCaps2;
DWORD dwTotal;
DWORD dwFree;
HRESULT hr;
hr = lpDD->QueryInterface(IID_IDirectDraw7, &lpDD);
if (FAILED(hr))
return hr;
// Initialize the structure.
ZeroMemory(&ddsCaps2, sizeof(ddsCaps2));
ddsCaps2.dwCaps = DDSCAPS_TEXTURE;
hr = lpDD->GetAvailableVidMem(&ddsCaps2, &dwTotal, &dwFree);
if (FAILED(hr))
return hr;
Если на поверхности установлен флаг DDSCAPS_VIDEOMEMORY , GetAvailableVidMem возвращает различные объемы видеопамяти в зависимости от того, можно ли использовать поверхность в качестве трехмерной текстуры. Если поверхность можно использовать для трехмерных текстур, GetAvailableVidMem возвращает сумму локальной видеопамяти и нелоклационной видеопамяти в системах AGP.
GetAvailableVidMem предоставляет только snapshot текущего состояния памяти дисплея. Объем свободной памяти дисплея может изменяться по мере создания и освобождения поверхностей. Поэтому значение свободной памяти следует использовать только в качестве аппроксимации. Кроме того, конкретный адаптер дисплея карта может не делать различий между двумя различными типами памяти. Например, адаптер может использовать одну и ту же часть памяти дисплея для хранения z-буферов и текстур. Таким образом, выделение одного типа поверхности (например, z-буфера) может повлиять на объем памяти дисплея, доступный для другого типа поверхности (текстур). Поэтому рекомендуется сначала выделить фиксированные ресурсы приложения (например, передние и задние буферы и z-буферы), прежде чем определять объем памяти, доступной для динамического использования (например, для сопоставления текстур).
GetAvailableVidMem не был реализован в предыдущей версии интерфейса DirectX IDirectDraw.
Требования
Целевая платформа | Windows |
Header | ddraw.h |
Библиотека | Ddraw.lib |
DLL | Ddraw.dll |