Shader実験
irrLichtのシェーダー機能を試してみた。
OpenGLとDirectXでほとんどの部分を共用にできるので、GLSLとHLSL両方を試してみるには便利だ。irrLichtをマスターするという初期投資は必要になるが。
glslのテクスチャ周りではまった点をメモ。
その1
複数のuniform sampler2Dの渡し方。
uniform変数をシェーダーに渡すのを単一のvideo::IMaterialRendererServices::setVertexShaderConstant
でできるようにしているため、intを一個渡すuniform sampler2Dが逆にすごくわかりにくくなっている。float*にキャストして中で再度int*にキャストしなおすという微妙な状況になっている。
s32 unit[]={0, 1}; services->setVertexShaderConstant("tex0", (f32*)&unit, 1); services->setVertexShaderConstant("tex1", (f32*)&unit+1, 1); // COpengLSLMaterialRenderer.cpp内の // COpenGLSLMaterialRenderer::setPixelShaderConstantのソースを見ると // 中身が分かる
ちなみに、
setVertexShaderConstantは中でsetPixelShaderConstantを呼んでいるのでどっちもでもいい。また、テクスチャがひとつの時は特にsetPixelShaderConstantを使わなくてもuniform sampler2Dに渡るみたいだ。GLSLで2つ目以降のuniform sampler2Dの時は要るみたい。HLSLでは要らなかった。