2013年3月7日木曜日

GLSLのシンボルの宣言と最適化の罠

しばしハマったのでメモ。

罠:
  • GLSLでinとかuniformとか宣言する
  • OpenGL APIから実行時に所在確認する
    • glGetProgramiv(,GL_ACTIVE_ATTRIBUTES,)とか
    • glGetAttribLocation()とか
    • glGetUniformLocationとか
  • GLSLで定義してあるはずのシンボルが無いことになっている/(^o^)\
理由:
  • GPU DriverによるGLSLの翻訳時、最適化によってプログラムの出力に関与しないシンボルはそもそも無かった事にされる\(^o^)/
対処:
  • GLSL翻訳時の最適化を常に脳内に置いて実装、テストする(;´Д`)
悲しみ:
  • GLSLangSpec.4の§3.3.Preprocessorに#pragmaのoptimizeやdebugについて定義があるが…
    • #pragma optimize(on/off)程度の事しかできない
      • というかoffにしても関数の最適化にしか効果が無いらしく、GLSLソースコードのシンボルが消失する現象には全く関与してくれない/(^o^)\
    • #pragma debug(on/off)
      • onにしても本件には全く関与しない/(^o^)\
        (このフラグはデバッグ用アノテーションを有効にする程度の能力)
(´・ω・`)…GLだるい

0 件のコメント:

コメントを投稿