我有GL_TEXTURE_2D_ARRAY
,我这样做:
1。将我想要的所有内容渲染到纹理数组
2。在渲染的“主要阶段”中对该数组进行采样
为了实现第一个目标,我添加了一个带有gl_Layer
调用的几何几何着色器到每个基元。另外,我在我的着色器中实现了一些类似于this Nvidia tutorial的“翻译”的东西,我用它来渲染第二阶段。
那么,什么是 我的问题 :
条件:相同的顶点,相同的FBO,相同的着色器,相同的纹理数组
1)使用glFramebufferTextureLayer
调用重新绑定渲染目标在我的FBO中的倍数。
2)将纹理数组保存为glFramebufferTexture
并且仅更改gl_Layer
值会导致意外行为(第一层(代码中的0)是正确的,我尝试的每一层渲染下一个无效)。
3)我不想 1),我想 2)。 我该怎么做?
我在渲染FBO时使用的着色器。
//顶点着色器
#version 150 core
uniform mat4 orthoView;
in vec4 in_Position;
void main(void) {
gl_Position = orthoView * in_Position;
}
//几何
#version 150 core
uniform int lr;
layout (triangles) in;
layout (triangle_strip, max_vertices = 3) out;
out int gl_Layer;
void main(void){
//pass-thru!
for(int i=0; i<3; i++)
{
gl_Position = gl_in[i].gl_Position;
EmitVertex();
}
gl_Layer = lr;
EndPrimitive();
}
//片段为空
修改
感谢大家的帮助!我的问题现在解决了,这是我的几何着色器:
#version 150 core
uniform int lr;
layout (triangles) in;
layout (triangle_strip, max_vertices = 3) out;
void main(void){
//pass-thru!
for(int i=0; i<3; i++)
{
gl_Layer = lr;
gl_Position = gl_in[i].gl_Position;
EmitVertex();
}
EndPrimitive();
}
答案 0 :(得分:2)
我之前没有实际使用过gl_Layer,但是看documentation,听起来它是一个每顶点属性(奇怪的......)。
The actual layer used will come from one of the vertices in the primitive being shaded
所以尝试在EmitVertex之前设置for循环中的值,也许?
答案 1 :(得分:2)
gl_Layer
,与一样,所有几何着色器输出都是每顶点输出。哪个顶点控制特定基元的图层为implementation-defined。在您的情况下,在EmitVertex
调用之前,没有理由不在循环中设置它。