缺少 GLSL 功能

Missing GLSL functionality

我已将一个 Visual Studio 项目移至另一台计算机,现在 GLSL 无法编译以前运行良好的着色器。它在隐式地将 vec4s 转换为 vec3s 时卡住了,它告诉我 'dot' 函数未定义,例如。

我正在使用 GLSDK,项目构建正确,glGetString(GL_SHADING_LANGUAGE_VERSION) 告诉我 4.40。这显然是我没有安装但习惯了的东西,但是我四处搜索并无法弄清楚是什么。

抱歉,听起来您的老司机有点过于宽容了。您的新驱动程序在拒绝着色器方面是正确的。

vec4 a = vec4(1.0, 2.0, 3.0, 4.0);
vec3 x = vec3(a); // Ok
// vec3 y = a;    error

的确,如果我运行通过reference compiler进行隐式转换,我得到以下错误信息:

ERROR: 0:4: '=' :  cannot convert from '4-component vector of float' to '3-component vector of float'
ERROR: 1 compilation errors.  No code generated.

尝试使用 reference compiler 验证您的脚本,它可能会发现一些像这样的可移植性问题。您唯一真正的选择是修复损坏的着色器。

dot()呢?

试试这个:

#version 330
void main() {
    vec4 x = vec4(1.0);
    vec3 y = vec3(2.0);
    float z = dot(x, y);
}

当我 运行 验证器时,我得到:

ERROR: 0:5: 'dot' : no matching overloaded function found 
ERROR: 1 compilation errors.  No code generated.

这里的错误是我对 dot() 的参数类型错误。同样,问题出在我的着色器中。