我使用的是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);
}
答案 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个着色器。
您确定这些是造成问题的着色器吗?