gpt4 book ai didi

opengl-es - 编译时 OpenGL 着色器构建器错误

转载 作者:行者123 更新时间:2023-12-01 08:58:19 25 4
gpt4 key购买 nike

我正在使用 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。然后我尝试删除版本,编译器说“在全局变量上下文中无效的限定符'in'”和'out'相同,然后尝试将in/out替换为'variing'但在片段着色器中“左侧赋值不能为只读”错误出现。对于顶点着色器,在下一阶段将不会读取有关不同字段的警告。
我怎样才能弄清楚它使旧式代码适应新式?
所以我对 GLSL 完全陌生

最佳答案

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

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);
}

关于opengl-es - 编译时 OpenGL 着色器构建器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24737705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com