前言
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 配置
在线配置
打开地址: https://glad.dav1d.de/
选 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* Windows,int width,int height);
- void processInput(GLFWwindow* Windows);
- 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* Windows = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
- if(Windows == NULL){
- std::cout << "fail to create window" <<std::endl;
- glfwTerminate();
- return -1;
- }
- glfwMakeContextCurrent(Windows);
- if(!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){
- std::cout << "Failed to initialize GLAD" << std::endl;
- return -1;
- }
- glViewport(0,0,800,600);
- glfwSetFramebufferSizeCallback(Windows, framebuffer_size_callback);
- while (!glfwWindowShouldClose(Windows)) {
- processInput(Windows);
- glClearColor(0.2f,0.3f,0.3f,1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- glfwSwapBuffers(Windows);
- glfwPollEvents();
- }
- glfwTerminate();
- return 0;
- }
- void framebuffer_size_callback(GLFWwindow* Windows,int width,int height){
- glViewport(0,0,width,height);
- }
- void processInput(GLFWwindow* Windows){
- if(glfwGetKey(Windows, GLFW_KEY_ESCAPE) == GLFW_PRESS){
- glfwSetWindowShouldClose(Windows, true);
- }
- }
这个时候, 我们通过上述代码, 生成一个页面.
效果如下:
至此, 整个 OpenGL 的环境配置完成了.
参考:
- https://www.glfw.org/docs/latest/quick.html
- https://github.com/glfw/glfw
来源: https://www.cnblogs.com/deman/p/11398259.html