chap05c, chap05d: Uniform を利用したデータの送信方法 from Ken Wakita on Vimeo.

sb05cと類似した例題です.この例では,uniform変数のかわりにuniformブロックを利用してデータをひとまとめにして書き換える例となっています.

sb05dx.cpp (sb05d.vs,fs)


Lighthouse3d.comGLSL Core Tutorial — Uniform Blocks に出ている例題が参考になりました.Lighthouse3d.com の例題では,uniform ブロックが一つだけあることを前提にして glGetUniformBlockIndex を用いています.Superbible では,複数の uniform ブロックの情報がある場合を装丁して glGetUniformIndices を扱う方法について説明されています.まずは,一つだけの場合を理解してから,複数の場合の理解をはかるのがよいでしょう.

データをバッファにコピーするのに,glBufferSubData を用いているのですが,複製先のバッファが指定されていないような気がします.BindingPoint とか,バッファのハンドルを渡すべきな気がするのだけど,その仕掛けがわかりません.もしかして,文脈依存で glBindBuffer(GLUNIFORM_BUFFER, uBuffer) がそれなのかな?そうかもしれない...