chap05c, chap05d: Uniform を利用したデータの送信方法 from Ken Wakita on Vimeo.
sb05cと類似した例題です.この例では,uniform変数のかわりにuniformブロックを利用してデータをひとまとめにして書き換える例となっています.
sb05dx.cpp (sb05d.vs,fs)
Lighthouse3d.com の GLSL Core Tutorial — Uniform Blocks に出ている例題が参考になりました.Lighthouse3d.com の例題では,uniform
ブロックが一つだけあることを前提にして glGetUniformBlockIndex
を用いています.Superbible では,複数の uniform ブロックの情報がある場合を装丁して glGetUniformIndices を扱う方法について説明されています.まずは,一つだけの場合を理解してから,複数の場合の理解をはかるのがよいでしょう.
データをバッファにコピーするのに,glBufferSubData
を用いているのですが,複製先のバッファが指定されていないような気がします.BindingPoint
とか,バッファのハンドルを渡すべきな気がするのだけど,その仕掛けがわかりません.もしかして,文脈依存で glBindBuffer(GLUNIFORM_BUFFER, uBuffer)
がそれなのかな?そうかもしれない...