一、获取GLFW源码
开发OpenGL项目经常会用到GLFW,由于OpenGL只负责图形的渲染,并未提供创建窗口、相应鼠标键盘等事件的功能,这个工作由GLFW负责。
通过官网获取源码压缩文件,然后解压。我下载的版本为3.3.8
二、源码编译
进入到GLFW源码文件夹,依次执行如下命令。
mkdir build #创建build文件夹用来存放构建好的项目
cd build #进入build文件夹
cmake ..
make #编译项目
在执行cmake ..
命令时可能会出现如下问题:
这是因为缺少了X11的开发库,执行如下命令安装相关库即可:
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
再次执行cmake ..
命令时上述问题已解决,但可能又存在下面的问题:
缺少libxrandr开发包,执行如下命令安装libxrandr的开发包:
sudo apt-get install libxrandr-dev
安装libxinerama的开发包:
sudo apt-get install libxinerama-dev
安装libxcursor的开发包:
sudo apt-get install libxcursor-dev
此时再执行cmake ..
命令不会报错了,然后执行make
命令。
到这里,GLFW的源码已经编译完毕。
三、运行GLFW中的案例
源码编译完毕后build/examples文件夹中存放了一些案例:
绿色的文件即为可执行文件,通过如下命令执行:
./boing
执行效果如下:
四、使用编译好的GLFW库
对于编译好的GLFW库而言,有用的其实只有glfw3.h和libglfw3.a这两个文件分别位于:
glfw-3.3.8/include/GLFW/glfw3.h
glfw3.3.8/build/src/libglfw3.a
在项目中只需要正确指定这两个文件即可。
如果想省事的话可以在build文件夹下使用如下命令将glfw安装到usr/local目录下:
make install
项目会自动扫描/usr/local这个文件夹下的内容。
下面构建了一个最简单的GLFW项目其结构为:
|__build
|__CMakeLists.txt
|__main.cpp
main.cpp内容如下:
#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
const int SCR_WIDTH = 720;
const int SCR_HEIGHT = 480;
int main(int argc, char** argv){
glfwInit();
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "Hello_OpenGL", nullptr, nullptr);
if (window == NULL)
{
std::cerr << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
while (!glfwWindowShouldClose(window))
{
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
CMakeLists.txt内容如下:
cmake_minimum_required(VERSION 3.0)
project(HELLO_OPENGL)
#指定头文件和第三方库所在的文件夹,如果之前使用make install安装了glfw就不需要指定了
include_directories(/home/lotus/project/glfw-3.3.8/include)
link_directories(/home/lotus/project/glfw-3.3.8/build/src)
add_executable(main main.cpp)
target_link_libraries(main glfw3 X11)
在cuild文件夹下执行如下命令编译本项目:
cmake ..
make
可能会遇到下面这个错误:
原因是缺少了Gl库文件,执行下面的命令安装即可:
sudo apt-get install libgl-mesa-dev
再次编辑即可成功。
GLFW成功创建了窗口,由于没有进行图形渲染,所以只有一个黑窗口。