【发布时间】:2012-10-24 05:34:22
【问题描述】:
我有几个要在我的 PC 上运行的示例。问题是它们是用 glsl 目标 150 编写的,而我的 PC 只支持 120 版本。我很确定程序本身足够简单,不需要任何 OpenGL 3.1 的扩展功能。我找到了一些关于应该采取哪些步骤来转换 glsl 的信息(例如,更改为属性,更改为变量)但它仍然没有编译(实际上是否有可能以某种方式从中获得有意义的错误消息?)。
原始.vert
#version 150
in vec2 in_Position;
in vec3 in_Color;
out vec3 ex_Color;
void main(void) {
gl_Position = vec4(in_Position.x, in_Position.y, 0.0, 1.0);
ex_Color = in_Color;
}
原始.frag
#version 150
precision highp float;
in vec3 ex_Color;
out vec4 gl_FragColor;
void main(void) {
gl_FragColor = vec4(ex_Color,1.0);
}
改变了.vert
#version 120
attribute vec2 in_Position;
attribute vec3 in_Color;
varying vec3 ex_Color;
void main(void) {
gl_Position = vec4(in_Position.x, in_Position.y, 0.0, 1.0);
ex_Color = in_Color;
}
改变了.frag
#version 120
precision highp float;
attribute vec3 ex_Color;
void main(void) {
gl_FragColor = vec4(ex_Color,1.0);
}
那么任何人都可以在这里发现问题吗?
【问题讨论】:
-
您是否有任何错误信息可以在您的问题中引用,无论它对您是否有意义?
-
"真的有可能从中得到有意义的错误信息吗?" Did you get the infolog?
-
最初我只是收到一条消息,说我正在链接一个未编译的着色器,没有别的。
-
GLSL 150 着色器不应编译。 gl_Position、gl_FragColor 已从 >= 150 中删除。并且 gl_ 前缀是保留的,如果您尝试使用它应该会引发错误。