缺少GLSL功能

时间:2015-01-09 23:06:48

标签: opengl glsl

我已将Visual Studio项目移动到另一台计算机,现在GLSL不会编译之前工作正常的着色器。它被隐含地将vec4s转换为vec3s而被卡住了,它告诉我' dot'例如,函数未定义。

我使用GLSDK并且项目正确构建,glGetString(GL_SHADING_LANGUAGE_VERSION)告诉我4.40。这显然是我以前没有安装但已经安装过的东西,但是我已经四处寻找并且无法解决问题。

1 个答案:

答案 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()的参数是错误的类型。同样,问题出在我的着色器中。