DD_LOCKDATA 構造体 (ddrawint.h)

DD_LOCKDATA構造体には、Microsoft DirectDraw パラメーター構造体で定義されているロックを行うために必要な情報が含まれています。

構文

typedef struct _DD_LOCKDATA {
  PDD_DIRECTDRAW_GLOBAL lpDD;
  PDD_SURFACE_LOCAL     lpDDSurface;
  DWORD                 bHasRect;
  RECTL                 rArea;
  LPVOID                lpSurfData;
  HRESULT               ddRVal;
  VOID                  *Lock;
  DWORD                 dwFlags;
  FLATPTR               fpProcess;
} *PDD_LOCKDATA, DD_LOCKDATA;

メンバー

lpDD

ドライバーのデバイスを記述する DD_DIRECTDRAW_GLOBAL 構造体を指します。

lpDDSurface

ロックダウンするメモリ領域に関連付けられたバッファーである LockD3DBuffer の場合は、サーフェスを記述するDD_SURFACE_LOCAL構造体を指します。

bHasRect

rArea 内の領域が有効かどうかを指定します。 0x00000001の値は有効な領域を示し、0x00000000は無効な領域を示します。

rArea

ロックダウンするサーフェス上の領域を定義する RECTL 構造体を指定します。

lpSurfData

ドライバーがロックダウンしたメモリ領域へのポインターを返すことができる場所を指定します。

ddRVal

ドライバーが DdLock または LockD3DBuffer コールバックの戻り値を書き込む場所を指定します。 DD_OKのリターン コードは成功を示します。 詳細については、「 DirectDraw の戻り値」を参照してください。

Lock

DirectDraw API で使用され、ドライバーで入力しないでください。

dwFlags

メモリ ロックダウンの実行方法をドライバーに指示するビットマスクを指定します。 このメンバーは、次のいずれかの値のビットごとの OR です。

フラグ 説明
DDLOCK_DISCARDCONTENTS
このロック中に、サーフェスバッファーまたは頂点バッファーの内容に関する仮定は行われません。 これにより、次の 2 つのことが可能になります。
1. Microsoft Direct3D またはドライバーは、頂点バッファーとして代替メモリ領域を提供する場合があります。 これは、頂点バッファーの内容をクリアして新しいデータを入力する予定がある場合に便利です。
2. ドライバーは、サーフェス データを並べ替えた形式で格納する場合があります。 アプリケーションがサーフェスをロックすると、ドライバーは、サーフェスの内容を表示する前に、このサーフェス データの並べ替えを元に戻す必要があります。

このフラグは、アプリケーションがサーフェスまたはロックされた四角形内のすべてのピクセルを上書きすることを計画しているため、並べ替え解除プロセスをスキップできることを示すヒントです (したがって、順序が変更されていないピクセルは消去されます)。 アプリケーションは、サーフェス全体またはロックされた四角形全体を上書きする場合は、常にこのフラグを設定する必要があります。

DDLOCK_DONOTWAIT IDirectDrawSurface7 以降のインターフェイスでは、既定値は DDLOCK_WAIT です。 既定値をオーバーライドし、アクセラレータがビジー状態のときに時間を使用する場合 (DDERR_WASSTILLDRAWINGリターン コードで示されます)、このフラグを使用します。
DDLOCK_EVENT イベント ハンドルが Lock に渡されている場合に設定します。これにより、要求されたサーフェス メモリ ポインターを返すことができるときにイベントがトリガーされます。
DDLOCK_HASVOLUMETEXTUREBOXRECT ドライバーは、 rArea の四角形 (RECTL) で指定されたサブボリューム テクスチャの先頭への有効なメモリ ポインターを返す必要があります。 ドライバーは、左右の座標 (RECTL の左右のメンバー) の上位 16 ビットからサブボリュームの前面と背面の座標をそれぞれ取得します。 左右の座標は、下位 16 ビットに制限されます。 四角形が指定されていない場合、ドライバーはボリューム全体の上部へのポインターを返す必要があります。 この値は、DirectX 8.1 以降で使用できます。
DDLOCK_NODIRTYUPDATE
D3DLOCK_NO_DIRTY_UPDATE フラグが設定されたメモリ領域をロックダウンするようにアプリケーションが要求した後、ランタイムによってドライバーに送信されます。 この場合、ランタイムがドライバーの DdUnlock 関数を呼び出してこの領域を含むサーフェスを更新するときに、ドライバーがロックダウンするメモリ領域をダーティとは見なさないでください。 代わりに、ドライバーは、D3DDP2OP_ADDDIRTYRECTとD3DDP2OP_ADDDIRTYBOX列挙子を使用して、D3dDrawPrimitives2 関数の以前の呼び出しで指定された領域のみをダーティとして考慮する必要があります。
既定では、サーフェスのロックによって、そのサーフェスにダーティ領域が追加されます。
DDLOCK_NOOVERWRITE Direct3D 頂点バッファー ロックでのみ使用されます。 フレームの開始 (またはこのフラグのない最後のロック) 以降、 IDirect3DDevice7::D rawPrimitiveVB および IDirect3DDevice7::D rawIndexedPrimitiveVB 呼び出し (Direct3D SDK ドキュメントで説明) で参照されていた頂点がロック中に変更されていないことを示します。 これは、頂点バッファーにデータを追加するだけの場合に便利です。
DDLOCK_NOSYSLOCK
このサーフェスがロックされているときに、システム全体のロックを実行しないことを示します。 これは、カーソルの応答性、より多くの Microsoft Windows 関数を呼び出す機能、デバッグの容易さなど、ビデオ メモリ サーフェスをロックする場合のいくつかの利点があります。 ただし、このフラグを指定するアプリケーションは、ヘルプ ファイルに記載されているいくつかの条件に準拠している必要があります。
このフラグは、プライマリをロックするときに指定できません。
DDLOCK_OKTOSWAP DDLOCK_DISCARDCONTENTSと同じです。
DDLOCK_READONLY ロックされているサーフェスは読み取り元のみです。 Windows 2000 以降では、このフラグは設定されません。
DDLOCK_SURFACEMEMORYPTR ドライバーは、 rArea で指定された四角形の上部に有効なメモリ ポインターを返す必要があります。 四角形が指定されていない場合、ドライバーはサーフェスの上部へのポインターを返す必要があります。
DDLOCK_WAIT Lock が有効なメモリ ポインターを取得できるようになるまで待機してから、返す必要があることを示す に設定します。 このビットが設定されている場合、 Lock はDDERR_WASSTILLDRAWINGを返しません。
DDLOCK_WRITEONLY ロックされているサーフェスの書き込みのみが行われます。 Windows 2000 以降では、このフラグは設定されません。

fpProcess

ドライバーのメモリのユーザー モード マッピングへのポインターを指定します。 ドライバーは 、DdMapMemory でこのマッピングを実行します。 Windows 2000 以降のみ。

要件

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

関連項目

DdLock

DdMapMemory

LockD3DBuffer