我正在阅读OpenGL Superbible第7版。这是一本很棒的书,但是当我进入书中的几何着色器部分时,程序就会停止工作。
发生的一些事情:
每当我不使用Geometry Shader渲染时,所有其他Shader的东西都与过去的例子一起工作。当我取出glVertexAttrib4fv();
时,我保持渲染几何着色器,它只渲染一个点。请帮忙。 (我正在使用glDrawArrays(GL_POINTS,0,3);
)
#version 410 core
layout(triangles) in;
layout(points, max_vertices = 3) out;
void main(void)
{
int i;
for(i = 0; i < gl_in.length();i++)
{
gl_Position = gl_in[i].gl_Position;
EmitVertex();
}
}
答案 0 :(得分:1)
让我引用文档并以粗体突出显示重要部分。
input_primitive类型必须与顶点的基本类型匹配 提供给GS的流。如果启用了细分,那么 原始类型由Tessellation评估着色器指定 输出限定符。 如果未启用细分,则原语 type是由使用此着色器渲染的绘图命令提供的 计划。
意味着几何着色器中的输入基元类型应与绘制命令glDrawArrays()的类型相匹配。
以下是匹配列表,请查看文档:{{3}}
GEOMETRY INPUT: points
DRAW COMMAND: GL_POINTS
NUMBER OF VERTICES: 1
GEOMETRY INPUT: lines
DRAW COMMAND: GL_LINES or GL_LINE_STRIP or GL_LINE_LIST
NUMBER OF VERTICES: 2
GEOMETRY INPUT: triangles
DRAW COMMAND: GL_TRIANGLES or GL_TRIANGLE_STRIP or GL_TRIANGLE_FAN
NUMBER OF VERTICES: 3
其中顶点数是每个输入图元接收到几何着色器的顶点数。