Windows上的VertexShader编译失败,同样的代码在linux上运行

时间:2014-08-18 09:29:37

标签: c++ opengl glsl

我正在关注OpenGL教程here。它在我的Arch Linux系统上运行得很好,但在Windows上却不行。

我的顶点和片段着色器代码与示例完全相同:

片段着色器代码:

#version 330 core

in vec2 UV;
out vec3 color;
uniform sampler2D myTextureSampler;

void main(){
  color = texture2D( myTextureSampler, UV ).rgb;
}

顶点着色器代码:

#version 330 core

layout(location = 0) in vec3 vertexPosition_modelspace;
layout(location = 1) in vec2 vertexUV;
out vec2 UV;
uniform mat4 MVP;

void main(){
  gl_Position =  MVP * vec4(vertexPosition_modelspace,1);
  UV = vertexUV;
}

我在Windows上遇到以下错误:

ERROR: 0:16: 'texture2D' : no matching overloaded function found (using implicit conversion)
ERROR: 0:16: 'rgb' :  field selection requires structure, vector, or matrix on left hand side
ERROR: 0:16: 'assign' :  cannot convert from 'const float' to 'FragUserData 3-component vector of float'

您对这个问题有什么想法吗?

1 个答案:

答案 0 :(得分:3)

这在v330规范中列为 @mrVoid 。所有旧的纹理采样函数(1D / 2D / 3D)现已弃用,您应该使用重载:

纹理(...)功能

此函数将根据您提供的采样器类型而改变,因此无需再明确定义您在函数名称中使用的类型。我在前往GL330的过程中犯了这个错误。