2014-02-07 74 views
3

我正在使用Visual Studio 2013,但在Visual Studio 2010编译器下运行。OpenGL着色器版本错误

我在MacBook Pro上采用Intel虹膜亲5200个显卡运行Windows 8的集训。

我有一个非常简单的顶点和片段着色器,我只是简单的显示在原语的窗口,但我得到警告,在控制台说明..

的OpenGL调试输出:源(着色器Comiler),类型(其它),优先级(中等),着色器3的GLSL编译警告,“”:警告:-1:65535:#version:版本号在OGL 3.0中不推荐使用。摆脱这些烦人的错误..?

的Vertex Shader代码:

#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; 
} 

破片的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); 
} 
+0

你的着色器是什么版本?里面#version – darkgaze

+0

我试过各种各样的,从330,400等 – kev3kev3

+0

你可以发布着色器代码吗?此外,[this](https://stackoverflow.com/questions/19841602/assimp-demo-loading-3d-model)可能是相关的。 –

回答

1

我一直都知道英特尔司机是坏,但是这是荒谬的。该#version指令是在GL 3.0弃用。事实上,从GL 3.2开始,它比以往更加重要,因为除了数字之外,您还可以指定core(默认)或compatibility

但是,这不是一个实际的错误。这是一个无效的警告,并有OpenGL调试输出设置是为什么你继续看到它。你可以忽略它。 AMD似乎是唯一一个以有用的方式使用调试输出的供应商。内华达州几乎从不输出任何东西,反而选择崩溃......而英特尔似乎在吹嘘废话。

这可能是什么驱动程序是真正想告诉你的是,你有一个OpenGL 3.0的情况下,你使用的是GLSL 3.30着色器。如果是这样的话,这就是我见过的最愚蠢的做法。

你试过#version 130呢?如果你这样做了,接口块(例如in Vertex { ...)应该会产生解析错误,但至少可以排除这个警告的唯一解释。


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

你确定这些是引起问题的着色器吗?