前言
- OpenGL 是什么?The Industry Standard for High Performance Graphics 这是官方解释。说白了他就是一套标准接口。对,是接口,并没有实现具体的代码。
- GLFW 是什么?基于上面的原因,也就清楚了,GLFW就是一种OpenGL的实现。所以开发OpenGL,就可以使用GLFW
- GLAD 是什么?也是由于OpenGL是由各个公司自己实现的方案,所以各个实现的细节不一致。因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针*以后使用。GLAD可以屏蔽平台之间API的差异。我感觉类似Java的虚拟机的角色。
GLFW安装
编译安装
- 从官网下载源代码包:http://www.glfw.org/download.html 我是直接从github下载的(https://github.com/glfw/glfw)
- 编译
cd glfw-master cmake . # 默认是编译静态库,如果要编译动态库则 cmake -DBUILD_SHARED_LIBS=ON . make make install
最后会看到,说明编译安装成功。
Install the project... -- Install configuration: "" -- Installing: /usr/local/include/GLFW -- Installing: /usr/local/include/GLFW/glfw3.h -- Installing: /usr/local/include/GLFW/glfw3native.h -- Installing: /usr/local/lib/cmake/glfw3/glfw3Config.cmake -- Installing: /usr/local/lib/cmake/glfw3/glfw3ConfigVersion.cmake -- Installing: /usr/local/lib/cmake/glfw3/glfw3Targets.cmake -- Installing: /usr/local/lib/cmake/glfw3/glfw3Targets-noconfig.cmake -- Installing: /usr/local/lib/pkgconfig/glfw3.pc -- Installing: /usr/local/lib/libglfw3.a
配置Xcode
在mac上默认开发工具是xcdoe,所以下面展示下xcode的配置。理论上,GLFW的使用跟IDE是无关的,所以其他IDE应该也是可以配置的。
-
配置项目的Build Settings:
-
Other Linker Flags 为
-lgfw3
-
Library Search Paths 的 Debug 和 Release 分别加上
/usr/local/lib/
-
Header Search Paths 加上
/usr/local/include/
-
-
添加库,打开项目的Build Phases
在 Link Binary With Libraries 中添加:
-
Cocoa
-
OpenGL
-
IOKit
-
CoreVideo
-
到此GLFW的开发环境已经配置完毕,可以开始OpenGL的开发了。
GLAD 配置
在线配置
选3.3版本,generate就可以。
如上图,把glad解压以后,把include里面的2个文件夹放入/usr/local/include 下面。
// // main.m // GlfwDemo // // Created by banma-087 on 2019/8/21. // Copyright © 2019 Deman. All rights reserved. // #include <glad/glad.h> #include <GLFW/glfw3.h> #include <stdio.h> #include <stdlib.h> #include <iostream> void framebuffer_size_callback(GLFWwindow* window,int width,int height); void processInput(GLFWwindow* window); int main(int argc, const char * argv[]) { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); #ifdef __APPLE__ glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // uncomment this statement to fix compilation on OS X #endif GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL); if(window == NULL){ std::cout << "fail to create window" <<std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(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); glClearColor(0.2f,0.3f,0.3f,1.0f); glClear(GL_COLOR_BUFFER_BIT); glfwSwapBuffers(window); glfwPollEvents(); } glfwTerminate(); return 0; } void framebuffer_size_callback(GLFWwindow* window,int width,int height){ glViewport(0,0,width,height); } void processInput(GLFWwindow* window){ if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS){ glfwSetWindowShouldClose(window, true); } }
这个时候,我们通过上述代码,生成一个页面。
效果如下:
至此,整个OpenGL的环境配置完成了。
参考:
https://www.glfw.org/docs/latest/quick.html