OpenGL on Mac 环境
环境介绍
这次我将环境部署到了Mac + Clion
上
其实并没有解决上次的编译glfw
的问题,但好像不太影响使用
因为我不会自己写编译脚本(〒︿〒)解决了!!!chatGPT 真好用!!!
1 | xcode-select --install |
1 | git clone https://github.com/glfw/glfw.git |
1 | mkdir build |
1 | cmake -D CMAKE_C_COMPILER=/usr/bin/clang -D CMAKE_CXX_COMPILER=/usr/bin/clang++ .. |
1 | cmake .. |
如果你需要生成动态库,就使用下面这个命令
1 cmake -DBUILD_SHARED_LIBS=ON ..
1 | make |
最后一个
make install
不一定要执行,这个命令会将编译的文件放进系统目录,我觉得没必要,你可以直接把文件拖出来,就像这样
如果你成功编译了,那么后续的步骤中,你就不需要再下载
glfw
了,只要下载glad
就行了
先看编译器
1
2
3
4
5gcc -v
Apple clang version 14.0.0 (clang-1400.0.29.202)
Target: x86_64-apple-darwin21.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin你可以用自己编译好的
glfw
库,也可以下载glfw
和glad
3.zshrc
添加环境变量
1 | export GLFW_HOME="/Users/.../opengl/glfw" |
![opengl_home.png](OpenGL-on-Mac-环境/openGL_home.png)
都是默认的,参考上面的 步骤 1,gcc -v 里的
InstalledDir
CMakeLists.txt
1 | cmake_minimum_required(VERSION 3.25) |
运行代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow* window);
int main() {
glfwInit(); // init glfw
// use version 3.3
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // set major version
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); // set minor version
glfwWindowHint(GLFW_OPENGL_PROFILE,
GLFW_OPENGL_CORE_PROFILE); // use core profile
// MacOS specific code
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL); // 800*600 size window called LearnOpenGL
if (window == NULL) {
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate(); // 释放/删除之前的分配的所有资源
return -1;
}
glfwMakeContextCurrent(window); // set the current window
if (!gladLoadGLLoader((GLADloadproc) glfwGetProcAddress)) {
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
glViewport(0, 0, 800, 600); // 设置窗口位置
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); // 设置窗口大小调整回调
// 循环检查窗口是否需要被关闭
while (!glfwWindowShouldClose(window)){
processInput(window); // 监控ESC退出窗口
glClearColor(0.2f, 0.3f, 0.3f, 1.0f); // 调用glClearColor来设置清空屏幕所用的颜色
glClear(GL_COLOR_BUFFER_BIT); // 调用glClear函数来清空屏幕的颜色缓冲
glfwSwapBuffers(window); // 函数会交换颜 色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上。
glfwPollEvents(); // 检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)
}
// 释放/删除之前的分配的所有资源
glfwTerminate();
return 0;
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height){
glViewport(0, 0, width, height);
}
// 监控ESC退出窗口
void processInput(GLFWwindow* window){
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
注意这里多了一个glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
这是MacOS
的区别于别于Windows
的代码
- Title: OpenGL on Mac 环境
- Author: lucas
- Created at : 2023-08-08 09:42:52
- Updated at : 2024-11-27 17:11:13
- Link: https://darkflamemasterdev.github.io/2023/08/08/OpenGL-on-Mac-环境/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments