glAttachShader的参数顺序错误,但正确绘制了位置

时间:2015-09-29 10:19:01

标签: opengl

我有2个着色器:顶点着色器和片段着色器

顶点着色器:

layout (location = 0) in vec3 position;
void main()
{
   gl_Position = vec4(position.x, position.y, position.z, 1.0);
}

片段着色器:

out vec4 color;

void main()
{
   color = vec4(1.0f, 0.5f, 0.2f, 1.0f);
} 

当我使用glAttachShader时,我按顺序传递了参数(着色器,程序),并且以某种方式正确绘制了顶点,但颜色是错误的。

只是想知道为什么这个位置是正确的,即使我以错误的顺序传递参数?感谢

1 个答案:

答案 0 :(得分:2)

您可能有兼容性配置文件上下文。如果是这种情况,则根本不使用着色器程序,并且您使用固定管道进行渲染。这解释了渲染的错误颜色。

如果您使用了glGetError(),则会注意到glAttachShader()生成了错误,以及后续与计划相关的调用,例如glLinkProgram()glUseProgram()。由于glUseProgram()失败,您仍在使用固定管道。

使用核心配置文件上下文,我不希望您看到任何渲染,因为需要有一个有效的程序。即使结果是依赖于实现的。没有程序的渲染不是错误。核心配置规范说(重点补充):

  

如果某个阶段的当前程序包含该阶段的可执行代码,则该程序被认为是活动的;否则,该阶段没有任何程序被认为是活跃的。如果顶点或片段着色器阶段没有活动程序,则顶点和/或片段处理的结果将不定义