我已将Visual Studio项目移动到另一台计算机,现在GLSL不会编译之前工作正常的着色器。它被隐含地将vec4s转换为vec3s而被卡住了,它告诉我' dot'例如,函数未定义。
我使用GLSDK并且项目正确构建,glGetString(GL_SHADING_LANGUAGE_VERSION)告诉我4.40。这显然是我以前没有安装但已经安装过的东西,但是我已经四处寻找并且无法解决问题。
答案 0 :(得分:4)
对不起,听起来你的老司机有点过于宽容。您的新驱动程序在拒绝着色器时是正确的。
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()
的参数是错误的类型。同样,问题出在我的着色器中。