OpenGL着色器版本错误

时间:2014-02-07 08:27:27

标签: c++ opengl fragment-shader vertex-shader

我使用的是Visual Studio 2013,但在Visual Studio 2010编译器下运行。

我在带有intel iris pro 5200显卡的Macbook Pro上运行Windows 8 for bootcamp。

我有一个非常简单的顶点和片段着色器,我只是在一个窗口中显示简单的基元但是我在控制台中收到警告......

OpenGL调试输出:源(着色器编译器),类型(其他),优先级(中),着色器3的GLSL编译警告,“”:警告:-1:65535:#version:版本号弃用OGL 3.0前向兼容上下文驱动程序

任何人都知道如何摆脱这些恼人的错误..?

顶点着色器代码:

#version 330 core

uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 projMatrix;

in  vec3 position;
in  vec2 texCoord;
in  vec4 colour;

out Vertex  {
    vec2 texCoord;
    vec4 colour;
} OUT;



void main(void) {
    gl_Position     = (projMatrix * viewMatrix * modelMatrix) * vec4(position, 1.0);

    OUT.texCoord    = texCoord;
    OUT.colour      = colour;
}

Frag Shader代码

#version 330 core

in Vertex   {
    vec2 texCoord;
    vec4 colour;
} IN;

out vec4 color;

void main() {   
    color= IN.colour;

    //color= vec4(1,1,1,1);
}

1 个答案:

答案 0 :(得分:2)

我一直都知道英特尔司机不好,但这太荒谬了。 GL 3.0中不推荐#version指令 NOT 。事实上,从GL 3.2开始比以往任何时候都更重要,因为除了数字之外,您还可以指定core(默认)或compatibility

尽管如此,这不是一个实际错误。这是一个无效的警告,并且具有OpenGL调试输出设置是您继续看到它的原因。你可以忽略它。 AMD似乎是唯一一个以有用的方式使用调试输出的供应商。 NV几乎从来没有输出任何东西,而是选择崩溃......而且英特尔似乎在滔滔不绝。

驱动程序真正想告诉你的可能是你有一个OpenGL 3.0上下文而你使用的是GLSL 3.30着色器。如果是这样的话,这必须是我见过的最愚蠢的方式。

您是否尝试过#version 130?如果你这样做,接口块(例如in Vertex { ...)应该生成解析错误,但它至少会排除对此警告的唯一解释。


还有另一种可能性,最终会更有意义。调试输出提到这与着色器对象#3有关。虽然无法保证着色器名称从0开始按顺序分配,但通常情况就是如此。您在这里只显示了2个着色器,#3意味着您的软件加载了第4个着色器。

您确定这些是造成问题的着色器吗?