Direct3D定義済みシンボル

 Direct3Dで定義されているシンボルのうち、説明が必要な物を最低限だけ(^^;)抜粋して紹介します。残りは各自でDirectX SDKのリファレンスを調べてください。

 

D3DFORMAT

D3DFORMAT = (
  D3DFMT_UNKNOWN              =  0,

  //テクスチャ用
  // ARGBそれぞれに何ビット使うかを示しています
  // Xは未使用ビットです
  //上位ビットから順に並んでいます
  D3DFMT_R8G8B8               = 20,
  D3DFMT_A8R8G8B8             = 21,
  D3DFMT_X8R8G8B8             = 22,
  D3DFMT_R5G6B5               = 23,
  D3DFMT_X1R5G5B5             = 24,
  D3DFMT_A1R5G5B5             = 25,
  D3DFMT_A4R4G4B4             = 26,
  D3DFMT_R3G3B2               = 27,
  D3DFMT_A8                   = 28,
  D3DFMT_A8R3G3B2             = 29,
  D3DFMT_X4R4G4B4             = 30,

  //パレット付きテクスチャ…DGCaradではサポートしていません
  D3DFMT_A8P8                 = 40,
  D3DFMT_P8                   = 41,

  //輝度マップ・バンプマップ用
  // L は輝度
  // Q W U Vはテクスチャ座標に対する変位
  D3DFMT_L8                   = 50,
  D3DFMT_A8L8                 = 51,
  D3DFMT_A4L4                 = 52,

  D3DFMT_V8U8                 = 60,
  D3DFMT_L6V5U5               = 61,
  D3DFMT_X8L8V8U8             = 62,
  D3DFMT_Q8W8V8U8             = 63,
  D3DFMT_V16U16               = 64,
  D3DFMT_W11V11U10            = 65,

  //圧縮テクスチャなど
  D3DFMT_UYVY                 = Byte('U') Or (Byte('Y') Shl 8) Or (Byte('V') Shl 16) Or (Byte('Y') Shl 24),
  D3DFMT_YUY2                 = Byte('Y') Or (Byte('U') Shl 8) Or (Byte('Y') Shl 16) Or (Byte('2') Shl 24),
  D3DFMT_DXT1                 = Byte('D') Or (Byte('X') Shl 8) Or (Byte('T') Shl 16) Or (Byte('1') Shl 24),
  D3DFMT_DXT2                 = Byte('D') Or (Byte('X') Shl 8) Or (Byte('T') Shl 16) Or (Byte('2') Shl 24),
  D3DFMT_DXT3                 = Byte('D') Or (Byte('X') Shl 8) Or (Byte('T') Shl 16) Or (Byte('3') Shl 24),
  D3DFMT_DXT4                 = Byte('D') Or (Byte('X') Shl 8) Or (Byte('T') Shl 16) Or (Byte('4') Shl 24),
  D3DFMT_DXT5                 = Byte('D') Or (Byte('X') Shl 8) Or (Byte('T') Shl 16) Or (Byte('5') Shl 24),

  //デプスステンシルバッファ用
  // Dはデプスバッファのサイズ
  // Sはステンシルバッファのサイズ
  // Xは未使用ビットです
  D3DFMT_D16_LOCKABLE         = 70,
  D3DFMT_D32                  = 71,
  D3DFMT_D15S1                = 73,
  D3DFMT_D24S8                = 75,
  D3DFMT_D16                  = 80,
  D3DFMT_D24X8                = 77,
  D3DFMT_D24X4S4              = 79,


  //VertexBuffer, IndexBuffer用
  D3DFMT_VERTEXDATA           =100,
  D3DFMT_INDEX16              =101,
  D3DFMT_INDEX32              =102,
);

 さまざまな種類のサーフェスなどのフォーマットを定義します。

 レンダリングの対象になるフォーマットはD3DFMT_X1R5G5B5、D3DFMT_R5G6B5、D3DFMT_X8R8G8B8、 D3DFMT_A8R8G8B8 に制限されています。ですので、バックバッファなどは必ずこのどれかでなくてはなりません。

 

D3DPOOL

D3DPOOL = (
  D3DPOOL_DEFAULT,
  D3DPOOL_MANAGED,
  D3DPOOL_SYSTEMMEM
);

 リソースのバッファを保持するメモリクラスを定義します。つまり、どこにどうやってリソースを確保しているのかという事を定義します。

 

D3DPOOL_DEFAULT ドライバ側でもっとも適切な場所 (おそらくビデオメモリ又はAGPメモリ) を割り当て、そこに格納します。もっとも高速ですが、Direct3DDeviceのロストや再生成が起こると、内容は消去されっぱなしになります。自動復元の必要の無いリソースに用いてください
D3DPOOL_MANAGED 必要に応じて、デバイスからアクセスできるメモリに自動的にコピーされます。自動復元が利きますので、基本的には全てのリソースはこれを指定して生成されることになるでしょう。ただし、内容をロックなどで書き換える都度、メモリにコピーする処理が必要になるので、毎フレーム内容を全部書き換える必要のあるようなリソースには向きません
D3DPOOL_SYSTEMMEM システムメモリに生成されます。これも自動復元が利きます。環境によってはDirect3DDeviceからアクセスできません。バッファ用途に使うことになるでしょう

 

D3DSWAPEFFECT

D3DSWAPEFFECT = (
  D3DSWAPEFFECT_DISCARD = 1,
  D3DSWAPEFFECT_FLIP,
  D3DSWAPEFFECT_COPY,
  D3DSWAPEFFECT_COPY_VSYNC
);

 スワップエフェクトを定義します。

D3DSWAPEFFECT_DISCARD スワップの後の、バックバッファの内容は保障されませんが、ドライバ側でもっとも効果的なスワップの方法を選択してくれます
D3DSWAPEFFECT_FLIP プライマリサーフェスとバックバッファの中身を入れ替えます
D3DSWAPEFFECT_COPY スワップの前後で、バックバッファの内容は同じになります
D3DSWAPEFFECT_COPY_VSYNC スワップの前後で、バックバッファの内容は同じになります。ウィンドウモードでもスワップはモニタの垂直帰線期間を待って行われます

 スワップのタイミングについて特に記述が無いときは、フルスクリーンモードの時は、TDGCarad.FullscreenModeメソッドで指定したタイミングでスワップが行われ、ウィンドウモードの時は、すぐにスワップが行われます

 

D3DUSAGE

D3DUSAGE_RENDERTARGET = ( $00000001 );
D3DUSAGE_DEPTHSTENCIL = ( $00000002 );

(* Usages for Vertex/Index buffers *)
D3DUSAGE_WRITEONLY = ( $00000008 );
D3DUSAGE_SOFTWAREPROCESSING = ( $00000010 );
D3DUSAGE_DONOTCLIP = ( $00000020 );
D3DUSAGE_POINTS = ( $00000040 );
D3DUSAGE_RTPATCHES = ( $00000080 );
D3DUSAGE_NPATCHES = ( $00000100 );
D3DUSAGE_DYNAMIC = ( $00000200 );

 リソースが何に使われるのかを定義します。

 以下はテクスチャ用のフラグです

D3DUSAGE_RENDERTARGET  レンダリングの対象として使います。メモリクラスにD3DPOOL_DEFAULTを指定して生成されているリソースである必要があります
D3DUSAGE_DEPTHSTENCIL  デプスステンシルサーフェスとして使います

 以下はVertexBuffer、IndexBuffer用のフラグです

D3DUSAGE_WRITEONLY 書き込み専用リソースとして使います
D3DUSAGE_SOFTWAREPROCESSING  ソフトウェア頂点処理を行われるVertexBufferとして使います
D3DUSAGE_DONOTCLIP クリッピング処理の必要の無いVertexBufferとして使います
D3DUSAGE_POINTS ポイントスプライト用のVertexBufferとして使います
D3DUSAGE_RTPATCHES RTパッチ用のVertexBufferとして使います
D3DUSAGE_NPATCHES Nパッチ用のVertexBufferとして使います
D3DUSAGE_DYNAMIC 動的なメモリ管理を前提としたVertexBufferとして使います。メモリクラスにD3DPOOL_DEFAULTを指定して生成されているリソースである必要があります