【发布时间】:2016-10-28 15:30:46
【问题描述】:
我正在使用索引渲染和几何着色器。如果我将 gl_VertexID 传递给几何着色器,只要我不发出任何顶点,它就可以正常工作;如果我发出一个或多个顶点,gl_VertexID(以任何名称传递)为零。为什么?
使用下面的着色器,几何着色器会将正确的索引放入我的反馈缓冲区,当且仅当我注释掉两个 EmitVertex 调用时。我错过了什么?
(我可以解决它,但它让我很烦!)
顶点着色器
#version 440
in vec4 position;
out VSOUT{
vec4 gl_Position;
int index;
} vsout;
uniform mat4 gl_ModelViewMatrix;
void main(){
gl_Position = gl_ModelViewMatrix * position;
vsout.index = gl_VertexID;
vsout.gl_Position = gl_Position;
}
几何着色器
#version 440
#extension GL_ARB_shader_storage_buffer_object : enable
layout (lines) in;
layout (line_strip) out;
in VSOUT{
vec4 gl_Position;
int index;
} vdata[];
layout (std430, binding=0) buffer FeedbackBuffer{
vec2 fb[];
};
void main(){
int i = vdata[0].index;
int j = vdata[1].index;
fb[gl_PrimitiveIDIn][0] = vdata[0].index;
fb[gl_PrimitiveIDIn][1] = vdata[1].index;
gl_Position = gl_in[0].gl_Position;
EmitVertex();
gl_Position = gl_in[1].gl_Position;
EmitVertex();
}
片段着色器
#version 430
out vec4 outputColor;
void main(){
outputColor = vec4(.5,.5,.5,.5);
}
【问题讨论】:
标签: opengl glsl geometry-shader