glSecondaryColorPointerEXT replacement using Qt5 OpenGL 3.3



我正在学习OpenGL,Qt5重写了一些遗留代码。他们使用 glSecondaryColorPointerEXT()。在检查了常用显卡中对OpenGL的当前支持后,我选择了Qt5的类QOpenGLFunctions_3_2_Core来访问OpenGL函数。

此功能是否有OpenGL 3.2版本或替代方法?

在 OpenGL 3.2 中,您应该使用着色器,此外,此时您应该避免使用gl_SecondaryColor等遗留功能。在基于着色器的引擎中,辅助颜色的适当替换只是一个附加的通用顶点属性。我解释了一个与OpenGL ES 2.0相关的非常相似的问题,我的回答可能会有所帮助。

简而言之,glVertexPointer (...)glColorPointer (...)glSecondaryColorPointer{EXT} (...)在OpenGL 3.0中都被弃用了。在 3.2 核心上下文中,您根本无法使用它们。因此,您需要学习着色器和glVertexAttribPointer (...)

在核心GL 3.2中使用"主要"和"次要"顶点颜色的顶点着色器如下所示:

#version 150 core
uniform mat4 mvp;
in      vec4 vtx_pos;
in      vec4 vtx_color1;
in      vec4 vtx_color2;
out     vec4 color;
void main (void) {
  gl_Position = mvp * vtx_pos;
  color       = vtx_color1 * vtx_color2; // It is up to you to decide what to do
                                         //   with the primary and secondary
                                         //     colors, this is just for show...
}

您可以使用glVertexAttribPointer (...)从 GLSL 顶点着色器查询的属性位置(链接后)向vtx_pos、vtx_color1和vtx_color2提供数据。而这一切都完全消除了对glSecondaryColorPointerEXT (...)的需求.

最新更新