Поделиться через


Метод 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

См. также раздел

IDirectDraw7