VIDEOMEMORY 構造体 (ddrawint.h)

VIDEOMEMORY 構造体を使用すると、ドライバーは表示メモリをヒープに管理できます。

構文

typedef struct _VIDEOMEMORY {
  DWORD   dwFlags;
  FLATPTR fpStart;
  union {
    FLATPTR fpEnd;
    DWORD   dwWidth;
  };
  DDSCAPS ddsCaps;
  DDSCAPS ddsCapsAlt;
  union {
#if ...
    _VMEMHEAP        *lpHeap;
#else
    struct _VMEMHEAP *lpHeap;
#endif
    DWORD            dwHeight;
  };
} VIDEOMEMORY;

メンバー

dwFlags

表示メモリのこの特定のセクションを記述するフラグのセットを指定します。 このメンバーには、次のいずれかの値のビットごとの OR を指定できます。

フラグ 説明
VIDMEM_ISLINEAR 表示メモリは、連続するメモリ ブロックです。
VIDMEM_ISRECTANGULAR 表示メモリは四角形です。
VIDMEM_ISHEAP このフラグはシステムで使用するために予約されており、ドライバーでは無視する必要があります。
VIDMEM_ISNONLOCAL ヒープは非ローカル (AGP) メモリに存在します。
VIDMEM_ISWC ドライバーでは、このヒープ内の表示メモリに対する書き込み結合が有効になっています。 書き込み結合は、1 つのバス クロックで転送できるように、同じキャッシュ ラインに書き込みをバッチ処理する Pentium Pro クラス プロセッサの特殊なキャッシュ モードです。 書き込み結合では、書き込みの順序は保持されません。これは通常、フレーム バッファーで許容されるトレードオフです。 書き込み結合の詳細については、Intel のドキュメントを参照してください。 このフラグは、VIDMEM_ISNONLOCAL フラグも設定されていない限り使用できません。
VIDMEM_HEAPDISABLED Microsoft DirectDraw ランタイムは、ヒープの初期化に失敗したときに、このフラグを使用してヒープをオフにします。 これは、ほとんどの場合、AGP ヒープで発生します。 ドライバーは、このビットを設定しないでください。

fpStart

ヒープ内のメモリ範囲の開始アドレスを指します。

fpEnd

ヒープが線形の場合は、メモリ範囲の終了アドレスを指します。 このアドレスは包括的です。つまり、範囲内の最後の有効なアドレスを指定します。 したがって、 fpStart および fpEnd で指定されたバイト数は (fpEnd - fpStart + 1) です。

dwWidth

fpStart が指すメモリのセクションの幅をバイト単位で指定します。 このメンバーは、四角形のメモリ領域を記述するためにのみ使用する必要があります。

ddsCaps

ドライバーがメモリのこのセクションを使用できない機能を返す DDSCAPS 構造体を指定します。

ddsCapsAlt

最初のパスで他のメモリが見つからない場合にこのメモリのチャンクを使用できない機能をドライバーが返す DDSCAPS 構造体を指定します。

lpHeap

システムで使用するために予約されており、ドライバーでは無視する必要があります。

dwHeight

fpStart が指すメモリのチャンクの高さを指定します。 このメンバーは、四角形のメモリ領域を記述するためにのみ使用する必要があります。

解説

Microsoft Windows 2000 以降では、データ構造は VIDEOMEMORY と呼ばれ、Windows 98/Me ではデータ構造は VIDMEM と呼ばれます。

GDI は、VIDEOMEMORY 構造体の配列を割り当て、ドライバーの DrvGetDirectDrawInfo 関数の 2 番目の呼び出しに渡します。 ドライバーは、メモリの各特定のセクションを記述する各構造体の適切なメンバーを入力する必要があります。 一覧には、ドライバーのオフスクリーン メモリの完全な説明が表示されます。

DirectDraw はをスキャンして、表示メモリ ヒープが一覧表示される順序でサーフェスを割り当てます。 ヒープは、VIDEOMEMORY 構造体の配列で管理されます。 最初に割り当てられたメモリは、最初にアクセスされるメモリになります。 VIDEOMEMORY 構造体は、特定の開始点を設定し、サーフェス上のメモリの量と、サーフェスで実行できないことを決定します。 DirectDraw は、メモリのサブ割り当てと割り当て解除、つまり各ヒープの管轄下でのサーフェスの作成と破棄によって管理します。 物理的な制限によって、これらの属性を設定する方法が決まります。

DirectDraw のヒープ マネージャーは、VIDEOMEMORY 構造体を 2 回渡します。 ddsCaps メンバーは、ヒープ内のメモリが最初のパスで使用できないものを DirectDraw に示します。 たとえば、ヒープがバック バッファーに対して十分な大きさであった場合は、 DDSCAPS 構造体で DSCAPS_OFFSCREENPLAIN フラグを設定することで、スプライトを最初のパスで割り当てられません。 そうすることで、ページ反転用のバック バッファーを保持しながら、他のサーフェスがスプライトでいっぱいになります。 ddsCapsAlt メンバーを設定して、2 番目のパスでスプライトを許可できます (DSCAPS_OFFSCREENPLAIN フラグを削除します)。 これにより、ヒープを最も高く最適な用途に優先的に使用できます。代わりの用途を除外する必要はありません。 (たとえば、最後にバック バッファーを一覧表示するなどして) 割り当ての順序を慎重に選択することで、 ddsCapsddsCapsAlt で並べ替える必要がなくなる場合があります。

要件

   
Header ddrawint.h (Winddi.h を含む)

関連項目

DDSCAPS

DrvGetDirectDrawInfo