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 會根據表面是否可以當做立體紋理來傳回不同的視訊記憶體量。 如果介面可用於 3D 紋理, GetAvailableVidMem 會傳回本機視訊記憶體和 AGP 系統上非本機視訊記憶體的總和。
GetAvailableVidMem 僅提供目前顯示記憶體狀態的快照集。 建立和釋放表面時,可用顯示記憶體的數量可能會變更。 因此,您應該只使用可用記憶體值做為近似值。 此外,特定顯示器介面卡可能不區分兩種不同的記憶體類型。 例如,配接器可能會使用相同的顯示記憶體部分來儲存 z 緩衝區和紋理。 因此,配置一種類型的表面 (例如,z 緩衝區) 可能會影響另一種表面 (紋理可用的顯示記憶體量) 。 因此,最好先配置應用程式的固定資源 (,例如前端和後端緩衝區和 z 緩衝區) ,再判斷動態使用的記憶體量 (例如紋理對應) 。
先前的 DirectX IDirectDraw 介面版本未實作GetAvailableVidMem。
需求
目標平台 | Windows |
標頭 | ddraw.h |
程式庫 | Ddraw.lib |
Dll | Ddraw.dll |