我需要在顶点着色器处理后得到4个顶点。带目标的原始(四边形)绘图:GL_TRIANGLE_STRIP。
我的代码:
layout(lines_adjacency) in;
layout(triangle_strip, max_vertices = 4) out;
in vs_output
{
vec4 color;
} gs_in[];
out gs_output
{
vec2 st ;
vec4 color;
} gs_out;
void main()
{
gl_Position = gl_in[0].gl_Position;
gs_out.st = vec2(0.0f, 0.0f);
gs_out.color = gs_in[0].color;
EmitVertex();
gl_Position = gl_in[1].gl_Position;
gs_out.st = vec2(0.0f, 1.0f);
gs_out.color = gs_in[1].color;
EmitVertex();
gl_Position = gl_in[2].gl_Position;
gs_out.st = vec2(1.0f, 0.0f);
gs_out.color = gs_in[2].color;
EmitVertex();
gl_Position = gl_in[3].gl_Position;
gs_out.st = vec2(1.0f, 1.0f);
gs_out.color = gs_in[3].color;
EmitVertex();
EndPrimitive();
}
compiller throw错误:“数组索引越界”
如何在几何着色器上获得4个顶点?
答案 0 :(得分:2)
带目标的原始(四边形)绘图:GL_TRIANGLE_STRIP。
基元类型必须与输入基元类型匹配。只需使用GL_LINES_ADJACENCY
进行绘制,每4个顶点都是一个独立的四边形。
更好的是,使用几何着色器停止谋杀你的表演。将纹理坐标作为输入传递会更好。或者,如果不这样做,请在顶点着色器中执行此操作:
out vec2 st;
const vec2 texCoords[4] = vec2[4](
vec2(0.0f, 0.0f),
vec2(0.0f, 1.0f),
vec2(1.0f, 0.0f),
vec2(1.0f, 1.0f)
);
void main()
{
...
st = texCoords[gl_VertexID % 4];
...
}
假设您使用glDrawArrays
而不是glDrawElements
呈现此内容。