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

请参阅

IDirectDraw7