gpt4 book ai didi

GLSL 着色器程序无法在 Intel HD4000 上运行

转载 作者:行者123 更新时间:2023-12-01 22:38:17 24 4
gpt4 key购买 nike

此着色器程序在 Radeon 3450M、GT 550Ti、GT430 和其他显卡上运行良好,但在 Intel HD4000 上运行失败。有什么想法可能是错误的,或者有什么建议可以使着色器对 Intel 更友好吗?

顶点着色器:

uniform mat4    uniform_Projection;
attribute vec4 attribute_Position;
attribute vec4 attribute_Color;
varying vec4 varying_Color;
vec4 varying_Color_Bak;

void main(void)
{
varying_Color.x = clamp(abs((attribute_Position.x + 3.0f) / 5.0f), 0.1f, 1.0f);
varying_Color.y = clamp(abs((attribute_Position.y + 3.0f) / 5.0f), 0.1f, 1.0f);
varying_Color.z = 0.0f;//clamp(abs((attribute_Position.x + attribute_Position.y + 4.0f) / 7.0f), 0.1f, 1.0f);
varying_Color.w = 0.9f;
gl_Position = uniform_Projection * attribute_Position;
}

片段着色器:

uniform mat4    uniform_Projection;
varying vec4 varying_Color;
vec4 varying_Color_Bak;
void main (void)
{
varying_Color_Bak = varying_Color;
varying_Color = uniform_Projection * varying_Color;
for (int i = 0; i < 3; i++) {
varying_Color = sin(varying_Color);
varying_Color = inversesqrt(abs(varying_Color));
varying_Color = abs(log(varying_Color));
}
varying_Color = clamp(varying_Color, 0.1f, 1.0f);
varying_Color = mix(varying_Color, varying_Color_Bak, 0.9f);
gl_FragColor = sin(varying_Color);
}

最佳答案

要实现此可移植性,您可以做的第一件事是将 #version 120 添加到着色器的顶部。正如评论中所讨论的,可选的 f 浮点精度后缀是 GLSL 1.2 添加的。在 GLSL 1.1 中,规范不包含此内容,如果在 GLSL 1.1 着色器中遇到此问题,严格遵守编译器将发出解析错误。

这里的根本问题是,如果您不在着色器的顶部包含 #version 指令,则应该 兼容 GLSL 编译器> 假设着色器是根据 GLSL 1.1 规范编写的。许多编译器会放宽这些规则,您可以使用 GLSL 1.1 中不存在的语法而不会发出警告,但其他编译器非常严格。如果没有办法提示 GLSL 编译器实现在其警告中更加冗长,您就必须自行熟悉每个 GLSL 版本之间的差异。 ANGLE 项目提供了一个可移植的着色器验证器(大多数 WebGL 实现都使用它),但它针对的是 OpenGL ES 2.0 版本的 GLSL,在这里真的帮不了你。

着色器中的所有其他内容似乎都对 GLSL 1.1 有效。这里的要点是,GLSL 着色器顶部的 #version 指令比您想象的更重要。如果您不阅读 glGetShaderInfoLog (...)glGetProgramInfoLog (...) 的输出,就很难诊断着色器问题 - 每个实现都有不同程度的冗长,但它们通常都会产生一些在编译/链接失败时有用的东西;)

关于GLSL 着色器程序无法在 Intel HD4000 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19622761/

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