DirectDraw では、構造体に特定のフィールドを設定し、それをインターフェイスのメソッドにDDSURFACEDESC
渡すことによって、メモリ内のデータからサーフェスを作成できます。CreateSurface
IDirectDraw
DDSURFACEDESC
最初に、構造体のどのフィールドに正しい情報が含まれているかを DirectDraw に伝える必要があります。これには、dwFlags
フィールドを次の一連のフラグに設定しますDDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_LPSURFACE | DDSD_PITCH
。
ああ、これはシステム メモリ サーフェスに対してのみ機能するため、おそらくフィールドにDDSCAPS_SYSTEMMEMORY
フラグを追加する必要がありddsCaps.dwCaps
ます (DirectDraw がデフォルトで追加しない場合)。
次に、フィールドでピクセル データ配列の先頭のアドレスを指定しますlpSurface
。バッファが連続している場合は、lPitch
を 0 に設定するだけです。それ以外の場合は、そこに正しいピッチを設定します (2 つの後続のスキャンラインの始まりの間のバイト単位の距離)。
フィールドで正しいピクセル形式を設定し、ddpfPixelFormat
正しいビット深度を でdwRGBBitCount
、RGB マスクを でdwRBitMask
、dwGBitMask
および で設定しdwBBitMask
ます。
次に、lXPitch
をピクセルのバイト数 (RGB の場合は 3) に設定します。使用するピクセル形式によって異なります。
次に、塗りつぶされた構造を渡して、それがCreateSurface
機能するかどうかを確認します。
この方法でサーフェスを作成する場合、DirectDraw は自身のデータ バッファを管理せず、一度Release
サーフェスを呼び出すとこのメモリを解放しないことに注意してください。このメモリがサーフェスで使用されなくなったら、自分で解放する必要があります。
一方、このピクセル データをビデオ メモリに配置する場合は、通常の方法でオフスクリーン サーフェスを作成してからロックし、ビデオ メモリ内の独自のバッファにピクセルをコピーする必要があります (lpSurface
フィールドにアドレスを入力しlPitch
、カウントを忘れずに取得してください!)、ロックを解除します。