为何OpenGL 4.3中glDrawArrays可用GL_QUADS模式?文档未提及却可渲染
为什么OpenGL 4.3中
glDrawArrays(GL_QUADS)还能正常工作? 其实这事儿的核心原因是你当前使用的OpenGL上下文是兼容配置文件(Compatibility Profile),而非核心配置文件(Core Profile),具体细节如下:
- 配置文件的差异:OpenGL 3.2版本引入了配置文件的概念,核心配置文件(Core Profile)移除了一批被标记为“废弃”的旧特性,其中就包括
GL_QUADS、GL_QUAD_STRIP这类图元类型;而兼容配置文件则保留了所有旧特性,专门用于向下兼容遗留的OpenGL代码。 - 默认上下文的行为:很多OpenGL驱动在创建上下文时,如果没有明确指定使用核心模式,默认会创建兼容模式上下文。你的PC虽然支持OpenGL 4.3,但只要上下文是兼容模式,
GL_QUADS这类旧图元就依然可以正常调用并渲染。 - 官方文档的指向性:你查看的
glDrawArrays官方文档是针对核心配置文件的,所以不会提及GL_QUADS这类已被移除的特性。如果查看兼容模式的文档或者OpenGL 3.1及更早版本的文档,就能找到GL_QUADS作为mode参数的支持说明。 - 不推荐继续使用
GL_QUADS:虽然现在能正常运行,但核心配置文件是OpenGL的发展趋势,兼容模式只是过渡方案。建议改用GL_TRIANGLES(比如用两个三角形拼接成矩形),这样你的代码可以在核心模式下正常工作,兼容性和未来适配性更好。
内容的提问来源于stack exchange,提问作者Ryuhei Irie
相关产品推荐
相关产品推荐

