【发布时间】:2015-08-16 20:31:21
【问题描述】:
我在几何着色器中使用gl_Layer = gl_InvocationID; 渲染到附加了 3D 纹理的帧缓冲区。
这大部分都可以正常工作。除了每次调用着色器也会渲染到第 0 层,以及我指定的层。
我怎样才能避免这种情况?设置帧缓冲区时我缺少什么重要的东西吗?也许是glFramebufferTexture?
几何着色器
#version 400
layout(invocations = 32) in;
layout(points) in;
layout(triangle_strip, max_vertices = 3) out;
out vec3 raster_color;
float blue;
void main()
{
gl_Layer = gl_InvocationID;
blue = float(gl_InvocationID) / 31.0;
gl_Position = vec4( -1.0, -1.0, 0.0, 1.0 );
raster_color = vec3( 0.0, 0.0, blue );
EmitVertex();
gl_Position = vec4( 1.0, -1.0, 0.0, 1.0 );
raster_color = vec3( 1.0, 0.0, blue );
EmitVertex();
gl_Position = vec4( 0.0, 1.0, 0.0, 1.0 );
raster_color = vec3( 1.0, 1.0, blue );
EmitVertex();
EndPrimitive();
}
片段着色器
#version 400
in vec3 raster_color;
out vec4 fragment_color;
void main()
{
fragment_color = vec4( raster_color, 1.0 );
}
【问题讨论】:
-
你能包含有问题的几何着色器吗?我倾向于认为 it 应该为此负责,而不是您的 FBO 设置或片段着色器(不过,如果您也可以包含 fs,那会有所帮助)。
-
当然,@Andon。我已将它们添加到问题中。
标签: opengl graphics 3d glsl geometry-shader