Platform SDK: DirectX

IDirectDraw7::GetAvailableVidMem

IDirectDraw7::GetAvailableVidMem メソッドは、利用可能なディスプレイ メモリの総容量、およびサーフェスの与えられたタイプに対するディスプレイ メモリの現在の空き容量を取得する。

HRESULT GetAvailableVidMem(
  LPDDSCAPS2 lpDDSCaps2,  
  LPDWORD    lpdwTotal,   
  LPDWORD    lpdwFree     
);

パラメータ

lpDDSCaps2
掲示されたサーフェスのハードウェア能力を示す DDSCAPS2 構造体のアドレス。
lpdwTotal
バイト単位で表す、利用可能なディスプレイ メモリの総容量を格納する変数のアドレス。取得した値は、総ビデオ メモリ容量を反映する。この容量には、プライマリ サーフェス用およびディスプレイ ドライバが確保するプライベート キャッシュ用のビデオ メモリは含まれない。
lpdwFree
lpDDSCaps2 の構造体で指定する能力に適合するサーフェスに割り当てられる、ディスプレイ メモリの現在の空き容量を格納する変数のアドレス。

戻り値

成功すれば、DD_OK を返す。

失敗すれば、以下のエラー値のいずれかを返す。

DDERR_INVALIDCAPS
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_NODIRECTDRAWHW

lpdwTotal または lpdwFree に NULL が渡された場合、パラメータに対する値は返されない。

注意

次の C++ の例では、IDirectDraw7::GetAvailableVidMem を使用して、テクスチャ マップ サーフェスで利用可能なディスプレイ メモリの総容量および空き容量の両方を決定する方法を示す。

// たとえば、lpDD 変数は IDirectDraw インターフェイスへの
// 有効なポインタとなる。
LPDIRECTDRAW7 lpDD;
DDSCAPS2      ddsCaps2; 
DWORD         dwTotal; 
DWORD         dwFree;
HRESULT       hr; 
 
hr = lpDD->QueryInterface(IID_IDirectDraw7, &lpDD); 
if (FAILED(hr))
    return hr; 
 
// 構造体を初期化する。
ZeroMemory(&ddsCaps2, sizeof(ddsCaps2));
 
ddsCaps2.dwCaps = DDSCAPS_TEXTURE; 
hr = lpDD->GetAvailableVidMem(&ddsCaps2, &dwTotal, &dwFree); 
if (FAILED(hr))
    return hr;

サーフェスに DDSCAPS_VIDEOMEMORY フラグ セットがある場合、このメソッドは、サーフェスが 3D テクスチャとして使用できるかどうかによって異なるビデオ メモリ容量を返す。サーフェスが 3D テクスチャとして使用できる場合、GetAvailableVidMem メソッドは AGP システムのローカルおよび非ローカル ビデオ メモリの総容量を返す。

このメソッドは、現在のディスプレイメモリの瞬間的な状態だけを提供する。ディスプレイ メモリの空き容量は、サーフェスの作成と解放により変化する。したがって、空きメモリ容量の値は単に近似値として使用すべきである。また、特定のディスプレイ アダプタ カードで 2 つの異なるメモリ タイプを区別しない場合もある。たとえば、アダプタはディスプレイ メモリの同じ部分を使って、Z バッファとテクスチャを格納する場合がある。このため、サーフェスのある特定のタイプ (たとえば、Z バッファ) を割り当てたとき、ほかのタイプのサーフェス (たとえば、テクスチャ) で利用できるディスプレイ メモリの容量に影響する場合がある。したがって、動的使用 (テクスチャ マッピング など) で利用できるメモリ容量を決める前に、アプリケーションの固定リソース (フロントとバック バッファ、および Z バッファなど) を最初に割り当てすることが最良の方法となる。

このメソッドは、IDirectDraw インターフェイスには実装されていない。

動作環境

  Windows NT/2000 :Windows 2000 が必要。
  Windows 95/98 : Windows 98 が必要。
  ヘッダー : ddraw.h で宣言。