M1 MacBook Air环境下OpenGL立即模式函数能否正常运行?
在M1 MacBook Air上运行OpenGL立即模式课程代码的解决方案
问题背景
使用2020款M1 MacBook Air,计算机图形学课程基于Windows环境,教授提供的示例代码依赖glBegin()、glColor3f()、glLoadIdentity()等OpenGL立即模式函数。尝试用CLion+CMake搭配GLFW、GLAD搭建环境时,编译器提示这些旧函数“未声明标识符”,但glGenBuffer()、glBindBuffer()等现代OpenGL函数可正常编译。测试多个GLAD版本(包括3.1)均无法解决该问题。
后续尝试结果:
- 移除GLAD,直接包含
<OpenGL/gl.h>,且不配置GLFW的上下文版本与兼容模式时,OpenGL上下文版本为2.1,立即模式函数可正常运行 - 若设置
GLFW_CONTEXT_VERSION_MAJOR=3、GLFW_CONTEXT_VERSION_MINOR=3并指定兼容模式,GLFW无法创建窗口
原因分析
macOS已停止对OpenGL的官方支持,2024年系统仅提供两种OpenGL上下文:
- OpenGL 2.1兼容模式:完整支持立即模式等旧API
- OpenGL 4.1核心模式:已弃用,且不包含立即模式相关函数
GLAD生成的加载器默认针对核心模式,因此无法识别立即模式函数;同时macOS不支持3.x版本的兼容上下文,导致设置3.3兼容模式时窗口创建失败。
可行解决方案
- 无需使用GLAD,直接引入系统自带的OpenGL头文件:
<OpenGL/gl.h> - 不要添加任何与OpenGL版本、兼容模式相关的
glfwWindowHint()配置,让GLFW默认创建OpenGL 2.1兼容上下文 - 直接编译运行课程提供的示例代码即可
内容的提问来源于stack exchange,提问作者atai
相关产品推荐
相关产品推荐

