我开始使用一个可以绘制单个GL_POINT的OpenGL程序(使用顶点和片段着色器)。然后我附加了一个简单的几何着色器,它输出两个点给定一个点作为输入:
#version 400
layout(points) in;
layout(points, max_vertices = 2) out;
void main() {
gl_Position = gl_in[0].gl_Position;
EmitVertex();
gl_Position = gl_in[0].gl_Position + vec4(0.1, 0, 0, 1);
EmitVertex();
EndPrimitive();
}
当我运行程序时,我从GL得到以下编译错误:
Error Compiling Shader: ERROR: 0:4: Invalid use of layout 'points'
ERROR: 0:5: Invalid use of layout 'points'
ERROR: 0:9: Use of undeclared identifier 'gl_Position'
ERROR: 0:9: Use of undeclared identifier 'gl_in'
ERROR: 0:10: Call to undeclared function 'EmitVertex'
ERROR: 0:12: Use of undeclared identifier 'gl_Position'
ERROR: 0:12: Use of undeclared identifier 'gl_in'
ERROR: 0:13: Call to undeclared function 'EmitVertex'
ERROR: 0:16: Call to undeclared function 'EndPrimitive'
我的系统规格:
Mac OSX 10.9,Nvidia Geforce 750M,OpenGL 4.1驱动程序
我还尝试在几何着色器中定义以下内容:
#extension GL_EXT_geometry_shader4: enable
但是我的驱动程序不支持扩展名。不应该这样做,因为几何着色器是3.2以来的核心分离(来源:https://www.opengl.org/wiki/Geometry_shader#See_also)
有什么想法吗?
答案 0 :(得分:1)
#extension GL_EXT_geometry_shader4: enable
。 GLSL 4.00中的几何着色器 核心 。 EXT扩展实际上有一些不同的行为,例如gl_VerticesIn
而不是gl_in.length ()
来确定输入的大小以及使用程序参数来设置输入/输出基元类型而不是布局限定符。 Apple的核心配置文件实现甚至不支持该扩展。
您正在尝试创建 片段着色器 。致电GL_GEOMETRY_SHADER
时,请务必使用glCreateShader (...)
。