IDirect3DVertexBuffer9のラッパークラス
今回は頂点バッファのラッパークラスを作ってみました。
作っておくと後々便利だと思います。
このクラスはテンプレートを使っており、
FVFコードの組み合わせをテンプレート引数として指定することで、
頂点データの構造体を定義してくれます。
CD3DDevice device;
CD3DVertexBuffer< D3DFVF_XYZ > vertex_buffer1; CD3DVertexBuffer< D3DFVF_XYZ >::Vertex* v1;
vertex_buffer1.Activate( device, 3 ); v1 = vertex_buffer1.Lock( 0, 3 ); v1[ 0 ].px = -1.0f, v1[ 0 ].py = -1.0f, v1[ 0 ].pz = 0.0f; v1[ 1 ].px = 1.0f, v1[ 1 ].py = -1.0f, v1[ 1 ].pz = 0.0f; v1[ 2 ].px = 0.0f, v1[ 2 ].py = 1.0f, v1[ 2 ].pz = 0.0f; vertex_buffer1.Set(); vertex_buffer1.Render( D3DPT_TRIANGLELIST, 0, 1 );
CD3DVertexBuffer< D3DFVF_XYZ | D3DFVF_DIFFUSE > vertex_buffer2; CD3DVertexBuffer< D3DFVF_XYZ | D3DFVF_DIFFUSE >::Vertex* v2;
vertex_buffer2.Activate( device, 3 ); v2 = vertex_buffer2.Lock( 0, 3 ); v2[ 0 ].px = -1.0f, v2[ 0 ].py = -1.0f, v2[ 0 ].pz = 0.0f; v2[ 0 ].diffuse.color = 0xffff0000; v2[ 1 ].px = 1.0f, v2[ 1 ].py = -1.0f, v2[ 1 ].pz = 0.0f; v2[ 1 ].diffuse.color = 0xffff0000; v2[ 2 ].px = 0.0f, v2[ 2 ].py = 1.0f, v2[ 2 ].pz = 0.0f; v2[ 2 ].diffuse.color = 0xffff0000; vertex_buffer2.Set(); vertex_buffer2.Render( D3DPT_TRIANGLELIST, 0, 1 ); |
こんな感じで使用できます。
実際には app.cpp の 200 行目あたりでこの処理を行っていますので、
参考にしてください。
また、デバイスのコールバックインターフェースクラスを作成しました。
このクラスを継承して、そのクラスのポインタをデバイスクラスに登録すると、
デバイスに何かあったときに必要な処理が自動で呼び出されます。
今のところデバイスのロストとリセットに対応しています。
こちらは d3d_device_callback.h を見てみてください。
ちなみに CD3DVertexBuffer もこれを継承してます。
次はスプライトとデバッグ用フォントを追加したいと思います。
コメントする
トラックバックする
トラックバック用URL: