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来说绝对是新手
从旧命名到新命名更为常见.但是如果你需要另一种方式,顶点着色器的转换是:
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)