[11/23 更新]
前提情報
- Cg は 3.1 を使用
- プロファイルは glslv/glslf を使用。arbvp/arbfp は使わない
1. shared キーワードはつかえない
キーワードとしては存在するが、利用できない。2. [unroll] キーワードはつかえない
for 構文を展開するためのキーワード。HLSL 特有で CgFX では利用不可。マクロで分岐するしかなさそう。3. tex2Dlod が glslf プロファイルでつかえない
cgc で glslf プロファイルでコンパイルすると texture2DLod として出力するものの、利用は出来ない。そもそも OpenGL では GLSL 1.2 以前では頂点シェーダでしか使えない。公式のドキュメント では fp40 から。4. (cond ? A : (cond2 ? B : C)) がつかえない
HLSL では通るようだが CgFX ではコンパイルエラーになる。(cond ? A : B) の形式でしかサポートされず、複雑な条件分岐が出来ない。バグ?5. StateBlock 構文が利用できない
毎回冗長になりがちな state 設定を省略化してくれる stateblock 構文は HLSL 特有のようで、Cg では利用出来ない。
6. BlendFunc を使う
SrcBlend/DstBlend だと何故か定数でエラーが出てしまう。代わりに BlendFunc を使う。MME 互換付き MMDAI2 の Bleeding Edge としてのリリースは今週末になるかと思います。ただ、シェーダは書き換えが必須で↑にあるように微妙に違うので自分が開発作業と同時にシェーダの移植作業をしています。
CgFX をデバッグするには?
MacOSX では Xcode の拡張として提供されている Graphics Tools for Xcode に含まれる OpenGL Profiler を使う。
Linux では gDEBugger を使うのだが、少なくとも MMDAI2 の専用レンダリングテストプログラムでは Qt レイヤーでクラッシュしてしまうのでまだ試すことが出来ていない。