前言
- 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, );
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, );
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(, , "LearnOpenGL", NULL, NULL);
if(window == NULL){
std::cout << "fail to create window" <<std::endl;
glfwTerminate();
return -;
} glfwMakeContextCurrent(window); if(!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){
std::cout << "Failed to initialize GLAD" << std::endl;
return -;
} glViewport(,,,);
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 ;
} void framebuffer_size_callback(GLFWwindow* window,int width,int height){
glViewport(,,width,height);
} void processInput(GLFWwindow* window){
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS){
glfwSetWindowShouldClose(window, true);
}
}
这个时候,我们通过上述代码,生成一个页面。
效果如下:
至此,整个OpenGL的环境配置完成了。