DirectX9のRenderState設定がGLのどれにつながるかわからないって話を聞いた。
知っている範囲で書いてみます。
知っている範囲で書いてみます。
DirectX9 | OpenGL |
---|---|
D3DFILL_WIREFRAME | glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ) |
D3DCULL_NONE | glDisable( GL_CULL_FACE ) |
D3DCULL_CW,CCW | GL_CULL_FACE有効化してGL_CW,GL_CCWらも設定 |
D3DRS_SCISSORTESTENABLE | GL_SCISSOR_TEST |
D3DRS_STENCILENABLE | GL_STENCIL_TEST |
D3DRS_ZENABLE | GL_DEPTH_TEST |
D3DRS_ZWRITEENABLE | glDepthMaskで設定 |
D3DRS_STENCILREF | glStencilFuncで設定 |
各種比較関数、ブレンド設定の列挙値は大変なので除外で。
調べてみるとすぐにわかりそうな感じですし。
■感想
OpenGL側はDirectXとちがって、必要要素を一括に設定する気配を感じる。
このほうがデバイスに値を流すのには適しているんだろう。
■○○さんへ
他にこれは?というのがあれば、コメントにでも~。
知ってる範囲で追記しようかと思います。
コメント
とりあげてくれてありがとうございます!!
こちらでも一通り調べて、Excelにまとめ中です!! こちらでもある程度まとまったら共有しようと思います。 調べればいろいろわかってきますが、なんせ数が数なので(汗
しかし気づいたんですけど、DirectX 10 以降って SetRenderStateって無くなったんですね。アルファテストも実装されてないんですね( 固定シェーダが無くなった影響が大きいと思いますが )
深度とステンシル用パラメータはレンダーステートとは違う概念で設定するんですね(汗
描画エンジンラッパーの道はまだまだ考えることは多そうです(汗
現在、すべてをラップする描画APIの設計をしています。
そのうちプライベートベータだそうと思っていますので、よかったら協力してもらえないでしょうか?
ExcelにまとめるってGoodですね。こちらは頭の中にしかないので…。
DX10以降のレンダーステート関連は一応あるものの、以前の日記で書いたとおりセットのみです。
現在設定されているものの一部変更とかできないのでDX9の感性でいくと苦労します。
固定シェーダーなくなったからではなく、コマンドバッファの圧迫によるCPU使用率の上昇、GPUの効率的動作のためにこのような変更が行われた、と推測しています。
返信遅くなりましたすみません(汗
プライベートベータへの協力は是非やらせてください!!
Excelにまとめてたのですが、改めて見ると普段使うことあるの?っていうのもありますね(汗
固定シェーダ向けのレンダーステートがたくさんあったので、DX10以降はそれがごっそりなくなったからなのかな、と安易に考えてしまいました(汗