0

我从一个绘制单个 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 )

有什么想法吗?

4

1 回答 1

1

首先,不要使用#extension GL_EXT_geometry_shader4: enable.

几何着色器是GLSL 4.00 的核心。EXT 扩展实际上有一些不同的行为,例如gl_VerticesIn而不是gl_in.length ()确定输入的大小和使用程序参数来设置输入/输出基元类型而不是布局限定符。Apple 的核心配置文件实现甚至不支持该扩展。

其次,您列出的所有错误都指向一件事......

您正在尝试创建片段着色器。确保GL_GEOMETRY_SHADER在调用时使用glCreateShader (...)

于 2014-06-08T20:12:00.267 回答