编译时OpenGL着色器构建器错误

时间:2014-07-14 13:32:20

标签: opengl-es fragment-shader vertex-shader

我正在使用OpenGL着色器构建器v2.2.2并从书中获取示例代码。 对于顶点着色器

#version 140
uniform float CoolestTemp;
uniform float TempRange;
uniform mat4  MVPMatrix;
in  vec4  mcVertex;
in  float VertexTemp;

out float Temperature;
void main() {

    Temperature = (VertexTemp - CoolestTemp) /  TempRange;
    gl_Position = MVPMatrix * mcVertex;
}

对于片段着色器

#version 140

uniform vec3 CoolestColor;
uniform vec3 HottestColor;

in float Temperature;
out vec4 FragmentColor;

void main() 
{    
    vec3 color = mix(CoolestColor, HottestColor, Temperature);
    FragmentColor = vec4(color, 1.0);
}

我的问题是执行此代码,因为不支持版本140和320。然后我尝试删除版本,编译器在'全局变量上下文中'表示“无效限定符”和'out'相同,然后尝试将in / out替换为'vary'但在片段着色器中“赋值的左侧”不得为只读“错误出现。对于顶点着色器,有关于下一阶段不会读取的变化字段的警告。 我怎样才能弄清楚将旧式代码改编为新代码? 所以我对GLSL来说是新手

1 个答案:

答案 0 :(得分:8)

从旧命名到新命名更为常见。但是如果你需要另一种方式,顶点着色器的转换是:

in --> attribute
out --> varying

对于片段着色器:

in --> varying
out --> (delete)

对于片段着色器的out,您可以删除变量的声明。相反,请使用内置的gl_FragColor变量。

对于您的示例,顶点着色器将如下所示:

uniform float CoolestTemp;
uniform float TempRange;
uniform mat4  MVPMatrix;
attribute vec4  mcVertex;
attribute float VertexTemp;
varying float Temperature;

void main() {
    Temperature = (VertexTemp - CoolestTemp) /  TempRange;
    gl_Position = MVPMatrix * mcVertex;
}

片段着色器:

uniform vec3 CoolestColor;
uniform vec3 HottestColor;
varying float Temperature;

void main() {
    vec3 color = mix(CoolestColor, HottestColor, Temperature);
    gl_FragColor = vec4(color, 1.0);
}