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 |
Library | Ddraw.lib |
DLL | Ddraw.dll |