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

Ars*_*nth 3 opengl-es vertex-shader fragment-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;
}
Run Code Online (Sandbox Code Playgroud)

对于片段着色器

#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);
}
Run Code Online (Sandbox Code Playgroud)

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

Ret*_*adi 9

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

in --> attribute
out --> varying
Run Code Online (Sandbox Code Playgroud)

对于片段着色器:

in --> varying
out --> (delete)
Run Code Online (Sandbox Code Playgroud)

对于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;
}
Run Code Online (Sandbox Code Playgroud)

片段着色器:

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

void main() {
    vec3 color = mix(CoolestColor, HottestColor, Temperature);
    gl_FragColor = vec4(color, 1.0);
}
Run Code Online (Sandbox Code Playgroud)