java - GLSL #version 给出语法错误(Mac 上的 LWJGL)

标签 java opengl glsl lwjgl

指定 GLSL 版本会在使用 LWJGL 时出现语法错误。我没有尝试在 LWJGL 之外重现这个问题。这发生在多台运行 Lion 的 Mac 上。

我已经让顶点和片段着色器在不使用 #version 的情况下工作。但是我即将使用texture函数,这似乎需要一个#version指令。

这是最简单的失败示例:

#version 120

void main() {
  gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}

编译此片段着色器并调用 glGetShaderInfoLog 会出现此错误:

ERROR: 0:1: '' : syntax error #version

120 替换为任何其他内容(例如 110)也会出错。但奇怪的是,如果我使用 130 或更高版本,它会给出相同的错误以及关于版本不受支持的投诉。 (我知道我的系统没有 GLSL 1.3,但是当编译器表现得好像它不理解版本标签时显示这个错误仍然很奇怪。)

我在 Mac 上使用 ATI Radeon HD 4670。GL_VERSION2.1 ATI-7.12.9GL_SHADING_LANGUAGE_VERSION1.20

鉴于此,我看不出 GLSL 1.20 不可用的任何原因。对我来说真的很奇怪,它说 #version 是一个语法错误,而不是说一些不受支持的 GLSL 版本。

最佳答案

解决了!它与 OpenGL 无关。我的文件阅读器代码删除了所有换行符。这在着色器的主体中很好,它有分号。但是预处理器指令没有分号来防止出现此错误。

因此对于遇到此问题的任何人,请确保您实际传递给 glShaderSource 的代码仍然有换行符。

关于java - GLSL #version 给出语法错误(Mac 上的 LWJGL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8540489/

相关文章:

c++ - 如何在运行时更改现有 QGLWidget 的 QGLFormat?

opengl - 普通 OpenGL 着色器存储缓冲区对象 (SSBO) 不起作用

c++ - GLSL 将 gl_FragCoord.xy 映射到正交投影中的坐标

ios - GLSL 边框着色器

无法让 OpenGL 3.3 绘制三角形,不会抛出任何错误

java - 控制 - Java 中的 C 异常

java - weka:自动应用属性选择

java - 在loadrunner 9.52中使用java over WEB(http/html)协议(protocol)

Java 运行时多态性不适用于不同的参数类型

c++ - 重载 "Shader"类中的赋值运算符