Direct3Dで定義されているシンボルのうち、説明が必要な物を最低限だけ(^^;)抜粋して紹介します。残りは各自でDirectX SDKのリファレンスを調べてください。
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_DEFAULT, D3DPOOL_MANAGED, D3DPOOL_SYSTEMMEM );
リソースのバッファを保持するメモリクラスを定義します。つまり、どこにどうやってリソースを確保しているのかという事を定義します。
| D3DPOOL_DEFAULT | ドライバ側でもっとも適切な場所 (おそらくビデオメモリ又はAGPメモリ) を割り当て、そこに格納します。もっとも高速ですが、Direct3DDeviceのロストや再生成が起こると、内容は消去されっぱなしになります。自動復元の必要の無いリソースに用いてください |
| D3DPOOL_MANAGED | 必要に応じて、デバイスからアクセスできるメモリに自動的にコピーされます。自動復元が利きますので、基本的には全てのリソースはこれを指定して生成されることになるでしょう。ただし、内容をロックなどで書き換える都度、メモリにコピーする処理が必要になるので、毎フレーム内容を全部書き換える必要のあるようなリソースには向きません |
| D3DPOOL_SYSTEMMEM | システムメモリに生成されます。これも自動復元が利きます。環境によってはDirect3DDeviceからアクセスできません。バッファ用途に使うことになるでしょう |
D3DSWAPEFFECT = ( D3DSWAPEFFECT_DISCARD = 1, D3DSWAPEFFECT_FLIP, D3DSWAPEFFECT_COPY, D3DSWAPEFFECT_COPY_VSYNC );
スワップエフェクトを定義します。
| D3DSWAPEFFECT_DISCARD | スワップの後の、バックバッファの内容は保障されませんが、ドライバ側でもっとも効果的なスワップの方法を選択してくれます |
| D3DSWAPEFFECT_FLIP | プライマリサーフェスとバックバッファの中身を入れ替えます |
| D3DSWAPEFFECT_COPY | スワップの前後で、バックバッファの内容は同じになります |
| D3DSWAPEFFECT_COPY_VSYNC | スワップの前後で、バックバッファの内容は同じになります。ウィンドウモードでもスワップはモニタの垂直帰線期間を待って行われます |
スワップのタイミングについて特に記述が無いときは、フルスクリーンモードの時は、TDGCarad.FullscreenModeメソッドで指定したタイミングでスワップが行われ、ウィンドウモードの時は、すぐにスワップが行われます
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を指定して生成されているリソースである必要があります |