我有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时,我按顺序传递了参数(着色器,程序),并且以某种方式正确绘制了顶点,但颜色是错误的。
只是想知道为什么这个位置是正确的,即使我以错误的顺序传递参数?感谢
答案 0 :(得分:2)
您可能有兼容性配置文件上下文。如果是这种情况,则根本不使用着色器程序,并且您使用固定管道进行渲染。这解释了渲染的错误颜色。
如果您使用了glGetError()
,则会注意到glAttachShader()
生成了错误,以及后续与计划相关的调用,例如glLinkProgram()
和glUseProgram()
。由于glUseProgram()
失败,您仍在使用固定管道。
使用核心配置文件上下文,我不希望您看到任何渲染,因为需要有一个有效的程序。即使结果是依赖于实现的。没有程序的渲染不是错误。核心配置规范说(重点补充):
如果某个阶段的当前程序包含该阶段的可执行代码,则该程序被认为是活动的;否则,该阶段没有任何程序被认为是活跃的。如果顶点或片段着色器阶段没有活动程序,则顶点和/或片段处理的结果将不定义。