【问题标题】:OpenGL Geometry Shader Compilation Error OSX-MavericksOpenGL 几何着色器编译错误 OSX-Mavericks
【发布时间】:2014-06-08 14:57:08
【问题描述】:

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

有什么想法吗?

【问题讨论】:

  • 你真的想把它编译成几何着色器吗?你能展示你的着色器编译代码吗?

标签: opengl glsl osx-mavericks geometry-shader


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多