【发布时间】:2015-01-15 07:47:46
【问题描述】:
FreeGLUT API 文档不包含glutInitContextVersion 的条目,当我在 google 上搜索它时,我发现的只是一个问题列表,并没有直接解决它的用法或效果。
它在任何地方都有记录吗?
【问题讨论】:
FreeGLUT API 文档不包含glutInitContextVersion 的条目,当我在 google 上搜索它时,我发现的只是一个问题列表,并没有直接解决它的用法或效果。
它在任何地方都有记录吗?
【问题讨论】:
glutInitContextVersion 不是官方 GLUT API 的一部分(顺便说一句,完全过时了),而是由 freeglut 添加的非官方扩展。但是,只要知道 OpenGL 的上下文版本是如何工作的,它的用法就很简单了,这在 ARB_create_context 扩展系列中定义。
该函数将在实际创建上下文时选择请求的 OpenGL 版本。请注意,这并不要求实现返回与您请求的版本完全相同的上下文,但它应该返回与请求的版本兼容的上下文,以便该版本的所有功能都存在。
关于 freeglut 处理这个问题,有几件事似乎是未知的。通过查看代码(对于当前的稳定版本 2.8.1),我们会看到 freeglut 实现了以下逻辑:
如果实现无法满足版本约束,但确实支持ARB_create_context 扩展,它将产生一些错误并且不会创建上下文。但是,如果请求了一个版本,但实现甚至不支持相关的扩展,则会创建一个遗留的 GL 上下文,从而完全忽略版本请求。这对我来说似乎有点不一致。但是,由于这些东西没有记录在案,也不是 GLUT 规范的一部分,因此尚不清楚该行为将来是否会保持不变。
如果您不需要某些特定于 GLUT 的功能(无论如何这些功能基本上都依赖于已弃用的 OpenGL),您可能需要查看一些更现代的替代品,例如 GLFW。
【讨论】: