一、构建GLFW
GLFW 是配合 OpenGL 使用的轻量级工具程序库,缩写自 Graphics Library Framework(图形库框架)。GLFW 的主要功能是创建并管理窗口和 OpenGL 上下文,同时还提供了处理手柄、键盘、鼠标输入的功能。
下载地址:https://www.glfw.org/download.html
我们可以选择直接下载编译好的库,也可以下载源文件然后通过camke来自己编译,区别是如果用cmake库的话,在执行成功以后,会直接将生成的库与头文件分别添加到系统路径,也就是/usr/local/include和/usr/local/lib。
这里我选择了下载编译好的库
二、配置GLAD
同时它还提供了一个在线服务:https://glad.dav1d.de/
打开GLAD在线服务,如图11所示,我设置语言为C/C++,gl版本选择4.6:
点击GENERATE按钮,GLAD现在应该提供给你了一个zip压缩文件,包含两个头文件目录,和一个glad.c文件
三、创建XCode项目
3.1 新建XCode项目,如图13所示,选择”Command Line Tool“:
3.2 导入第三方库:
将之前下载的编译好的GLFW库和GLAD文件导入项目中
3.3 链接第三方库:
设置libs搜索路径:
设置头文件的搜索路径:
3.4 把glad.c加入到工程项目中:
3.5 示例代码:
1 #include <glad.h> 2 #include <glfw3.h> 3 4 #include <iostream> 5 6 void framebuffer_size_callback(GLFWwindow* window, int width, int height); 7 void processInput(GLFWwindow *window); 8 9 // settings 10 const unsigned int SCR_WIDTH = 800; 11 const unsigned int SCR_HEIGHT = 600; 12 13 int main() 14 { 15 // glfw: initialize and configure 16 // ------------------------------ 17 glfwInit(); 18 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 19 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 20 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 21 22 #ifdef __APPLE__ 23 glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 24 #endif 25 26 // glfw window creation 27 // -------------------- 28 GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL); 29 if (window == NULL) 30 { 31 std::cout << "Failed to create GLFW window" << std::endl; 32 glfwTerminate(); 33 return -1; 34 } 35 glfwMakeContextCurrent(window); 36 glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); 37 38 // glad: load all OpenGL function pointers 39 // --------------------------------------- 40 if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) 41 { 42 std::cout << "Failed to initialize GLAD" << std::endl; 43 return -1; 44 } 45 46 // render loop 47 // ----------- 48 while (!glfwWindowShouldClose(window)) 49 { 50 // input 51 // ----- 52 processInput(window); 53 54 // render 55 // ------ 56 glClearColor(0.2f, 0.3f, 0.3f, 1.0f); 57 glClear(GL_COLOR_BUFFER_BIT); 58 59 // glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.) 60 // ------------------------------------------------------------------------------- 61 glfwSwapBuffers(window); 62 glfwPollEvents(); 63 } 64 65 // glfw: terminate, clearing all previously allocated GLFW resources. 66 // ------------------------------------------------------------------ 67 glfwTerminate(); 68 return 0; 69 } 70 71 // process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly 72 // --------------------------------------------------------------------------------------------------------- 73 void processInput(GLFWwindow *window) 74 { 75 if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) 76 glfwSetWindowShouldClose(window, true); 77 } 78 79 // glfw: whenever the window size changed (by OS or user resize) this callback function executes 80 // --------------------------------------------------------------------------------------------- 81 void framebuffer_size_callback(GLFWwindow* window, int width, int height) 82 { 83 // make sure the viewport matches the new window dimensions; note that width and 84 // height will be significantly larger than specified on retina displays. 85 glViewport(0, 0, width, height); 86 }
3.6 示例代码的运行结果
四、遇到的问题
按照步骤配置,发现并没有成功运行,出现如下错误:
dyld: Library not loaded: @rpath/libglfw.3.dylib
Referenced from: /Users/a11/Library/Developer/Xcode/DerivedData/GlfwTest-fswltakqdftvrjhcuqcxnrfzjoko/Build/Products/Debug/GlfwTest
Reason: image not found
这个意思是找不到dylib库图片(镜像)了,我们再来确认下这个库是否链接了
发现这个库文件确实存在,是不是重新导入就好了,结果重新导入没有成功。
解决办法:
将出现问题的Framework拷贝到项目里去,步骤如下图所示:
把出现Reason:image not found的Framework添加进去
添加之后再次运行,成功运行!