OpenGL/GLSL精度误差

Alt*_*cho 5 opengl macos macros glsl

我有一个简单的顶点着色器:

precision mediump float;

attribute vec4 position;

attribute vec4 color;
varying vec4 f_color;

uniform mat4 projection;
uniform mat4 modelView;

void main(void) {
    gl_Position = projection * modelView * position;
    f_color = color;
    f_texCoord = texCoord;
}
Run Code Online (Sandbox Code Playgroud)

这无法编译,并指出(使用 getShaderInfoLog()):

ERROR: 0:1: 'precision' : syntax error syntax error
Run Code Online (Sandbox Code Playgroud)

如果我删除带有精度说明符的行,它编译得很好。

系统:

OS: Mac OX 10.9.2 
GPU: NVIDIA GeForce 320M 256 MB
GLSL Ver.: 1.20
Run Code Online (Sandbox Code Playgroud)

有人帮帮我吧。

fin*_*lia 4

您已经找到了解决问题的方法:只需删除带有精度限定符的行即可。

更大的问题是您还没有决定使用哪个版本的 OpenGL。您提供的 GLSL 示例似乎适用于与 OpenGL ES相关的旧版本 GLSL ,它是为移动设备设计的。由于您实际上是在台式机/笔记本电脑上运行,因此您需要“正常”OpenGL。您观察到的错误是两者之间的差异造成的。

一般来说,您希望使用目标系统支持的最新版本的 OpenGL。现在可能是 OpenGL 3.3(以及 GLSL 3.3)。