Opengl GLSL着色器可在旧计算机上编译,但不能在其他计算机上编译

Opengl GLSL着色器可在旧计算机上编译,但不能在其他计算机上编译,opengl,glsl,version,shader,Opengl,Glsl,Version,Shader,在一台计算机上而不是在另一台计算机上编译此着色器时,“纹理”函数会出错。着色器编译的OpenGL版本是3.1。另一台运行OpenGL 4.1的计算机将不会编译它,尽管有这些错误 0(21) : error C1105: cannot call a non-function 0(58) : error C1105: cannot call a non-function 我们在网上查找,但找不到答案。文档中说“texture2D”和“shadow2D”可以作为替代品使用,但“shadow2D”给出

在一台计算机上而不是在另一台计算机上编译此着色器时,“纹理”函数会出错。着色器编译的OpenGL版本是3.1。另一台运行OpenGL 4.1的计算机将不会编译它,尽管有这些错误

0(21) : error C1105: cannot call a non-function
0(58) : error C1105: cannot call a non-function
我们在网上查找,但找不到答案。文档中说“texture2D”和“shadow2D”可以作为替代品使用,但“shadow2D”给出了一个错误,表示它在glsl版本140之后被删除,即使编译程序中的OpenGL上下文是3.1。我的理解是,图形卡与以前的glsl版本向后兼容

问题是:

#version 140

in vec3 position;
in vec2 texCoord;
in vec3 normal;

out vec3 normalView_vs;
out vec3 normalShadow_vs;
out vec3 eyeView_vs;
out vec3 lightDirView_vs;
out vec2 texCoord_vs;
out vec4 shadowCoord_vs;

uniform mat4 worldMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelProjectionMatrix;
uniform mat4 depthModelProjectionMatrix;
uniform vec3 sunDirection;

const mat4 biasMatrix = mat4(0.5f, 0.0f, 0.0f, 0.0f,
                             0.0f, 0.5f, 0.0f, 0.0f,
                             0.0f, 0.0f, 0.5f, 0.0f,
                             0.5f, 0.5f, 0.5f, 1.0f);

void main(void)
{
    eyeView_vs = -(viewMatrix * worldMatrix * vec4(position, 1.0f)).xyz;

    lightDirView_vs = (viewMatrix*vec4(sunDirection, 0.0f)).xyz;

    normalShadow_vs = (depthModelProjectionMatrix * vec4(normal, 0.0f)).xyz;
    normalView_vs = (viewMatrix * worldMatrix * vec4(normal, 0.0f)).xyz;
    // Note: Only correct if worldMatrix does not scale the model ! Use its inverse transpose if not.

    gl_Position = modelProjectionMatrix * vec4(position, 1.0f);
    texCoord_vs = texCoord;
    shadowCoord_vs = biasMatrix * depthModelProjectionMatrix * vec4(position, 1.0f);
}

多行
const mat4
初始化似乎是个问题,检查隐藏字符,在单行上尝试,检查换行规则等等。(只有
0(21)
指向错误,但我不确定)
shadow2D
texture2D
甚至不是GLSL 1.40的一部分。它们在GLSL 1.30中被删除。只需使用
纹理(…)
即可,从GLSL 1.30开始,该函数重载,以完成与以前使用不同函数(例如3D纹理查找、阴影比较等)相同的操作。这里似乎没有任何采样器或纹理调用。您是否发布了顶点着色器而不是片段着色器?