我有GL_TEXTURE_2D_ARRAY
并且我这样做:
1.将我想要 FBO 的所有内容渲染到纹理数组
2.在渲染的“主要阶段”对该数组进行采样
为了实现第一个目标,我添加了一个小几何着色器,其中包含gl_Layer
对每个图元的调用。另外,我已经在我的着色器中实现了一些类似于Nvidia 教程的“翻译” ,用于第二阶段的渲染。
那么,我的问题是什么:
条件:相同的顶点、相同的 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();
}