|
请教大家一个问题,我最近想用Geometry shader的layer render来优化PSSM阴影,主要的试验代码如下:
//创建TextureArray
osg::TextureArray *ta = new osg::TextureArray;
ta->setTextureSize(1024, 1024, 3); //三层纹理
...
shadowCamera->attach(osg::Camera::COLOR_BUFFER, ta, 0, 0); //
shadowCamera->attach(osg::Camera::COLOR_BUFFER, ta, 0, 1);
shadowCamera->attach(osg::Camera::COLOR_BUFFER, ta, 0, 2);
Geometry Shader代码:
#extension GL_EXT_geometry_shader4 : require
varying vec4 color;
void main()
{
//Route to Layer 0
for (int i = 0; i < 3; i++)
{
// You will recieve 3 positions since we set the input type to Triangles
gl_Position = 0.5*gl_PositionIn[i] - vec4(0.5, 0.0, 0.0, 1.0);
gl_FrontColor = vec4(1.0, 0.0, 0.0,1.0);
gl_Layer = 0;
EmitVertex();
}
EndPrimitive();
//Route to Layer 1
for (int i = 0; i < 3; i++)
{
gl_Position = 0.5*gl_PositionIn[i];
//Just to see a difference in Layer 1
gl_FrontColor = vec4(0.0, 1.0, 0.0,1.0);
gl_Layer = 1;
EmitVertex();
}
EndPrimitive();
//Route to Layer 2
for (int i = 0; i < 3; i++)
{
gl_Position = 0.5*gl_PositionIn[i] + vec4(0.5, 0.0, 0.0, 1.0);
//Just to see a difference in Layer 1
gl_FrontColor = vec4(0.0, 1.0, 0.0,1.0);
gl_Layer = 2;
EmitVertex();
}
EndPrimitive();
}
经过试验,绘制后纹理中只有attach的第一行所表示的层(比如说上面的0层)有效(显示红色),而1和2则是无效的,上网也没有查到相关的说明,还请高人指教,谢谢! |
|