准备
sudo apt-get install build-essential
sudo apt-get install libgl1-mesa-dev # OpenGL 库
sudo apt-get intsall libglm-dev
sudo apt-get install libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev
GLFW
下载编译源码
cd ~/Codes
git clone https://github.com/glfw/glfw.git
# git@gitee.com:pyq19/glfw.git
mkdir -p ~/Codes/glfw/glfw-build
cd ~/Codes/glfw/glfw-build
cmake ~/Codes/glfw
sudo make install
运行 example
./examples/wave
GLAD
GLAD 是第三方的 OpenGL 开源库,需要到 https://glad.dav1d.de/ 生成 include 头文件.
选好 C++ OpenGL 版本,生成压缩包并下载.
cd ~/Downloads
unzip glad.zip
sudo cp -r glad /usr/include
sudo cp -r KHR /usr/include
src/glad.c 要保留.
第一个测试程序
新建目录
mkdir -p ~/Codes/glfw-test-application
cd ~/Codes/glfw-test-application
cp ~/Downloads/glad/src/glad.c . # 把 glad.c 复制到当前目录
新建 main.cpp
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
GLFWwindow *window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW 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);
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
新建 CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
PROJECT(test)
FIND_PACKAGE(glfw3 REQUIRED)
FIND_PACKAGE(OpenGL REQUIRED)
SET(SOURCE_FILES main.cpp glad.c)
ADD_EXECUTABLE(test ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(test glfw)
TARGET_LINK_LIBRARIES(test OpenGL::GL)
编译运行,即可看到暗绿色的窗口.
mkdir build
cd build
cmake ..
make
./test
GLEW
GLEW 是 OpenGL 的扩展工具集,很多教程用的是 GLFW + GLEW 而不是 GLFW + GLAD
sudo apt-get install libglew-dev
另一个测试程序
准备
mkdir -p ~/Codes/test-opengl #新建项目目录
cd ~/Codes/test-opengl
touch main.cpp
touch CMakeLists.txt
在 main.cpp 中输入以下代码(来源《Computer Graphics Programming in OpenGL with C++ by V. Scott Gordon》程序 2-1)
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
using namespace std;
void init(GLFWwindow *window) {}
void display(GLFWwindow *window, double currentTime)
{
glClearColor(1.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
}
int main(void)
{
if (!glfwInit())
{
exit(EXIT_FAILURE);
}
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
GLFWwindow *window = glfwCreateWindow(600, 600, "hello world", NULL, NULL);
glfwMakeContextCurrent(window);
if (glewInit() != GLEW_OK)
{
exit(EXIT_FAILURE);
}
glfwSwapInterval(1);
init(window);
while (!glfwWindowShouldClose(window))
{
display(window, glfwGetTime());
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
exit(EXIT_SUCCESS);
}
在 CMakeLists.txt 中输入
CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
PROJECT(test)
FIND_PACKAGE(GLEW REQUIRED)
FIND_PACKAGE(glfw3 REQUIRED)
FIND_PACKAGE(OpenGL REQUIRED)
SET(SOURCE_FILES main.cpp)
ADD_EXECUTABLE(test ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(test GLEW::GLEW)
TARGET_LINK_LIBRARIES(test glfw)
TARGET_LINK_LIBRARIES(test OpenGL::GL)
编译运行
mkdir build
cd build
cmake ..
make
./test
即可以看到一个红色的窗口.