cmake配置glfw和glad

glfw和glad是OpenGL开发中常用的库,相比其他的替代品支持更新的特性;cmake是C++广泛使用的项目配置工具。本文用于介绍cmake如何导入这两个库。

glfw

安装

  • linux: 直接使用包管理器安装。
  • windows: 可以使用vcpkg或者其他C++包管理器安装,以便于cmake引入。

导入cmake

find_package(glfw3 3.4 REQUIRED)
find_package(OpenGL REQUIRED)

add_executable(ProjectName ...)
target_link_libraries(ProjectName OpenGL::GL glfw)

glad

glad包含glad1和glad2两个版本,对于初学者,两个都可以使用。

安装

  • glad1网站: https://glad.dav1d.de/
  • glad2网站: https://gen.glad.sh/
  • 软件包:2024年11月,extra仓库新增了glad包,这是一个本地的glad2下载器:基于命令行,从glad2的github仓库下载所需文件,需要一定的代理。

glad1

  • 主要文件命名为glad.h和glad.c
  • Learn OpenGL教程使用这个版本
  • 使用gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)来加载函数

glad2

“adds more functionality but changes the API”

  • 主要文件命名为gl.h和gl.c
  • 是glfw主页文档Getting Started所用的版本
  • 移除了gladLoadGLLoaderGLADloadproc,直接使用gladLoadGL(glfwGetProcAddress)加载函数

导入cmake

  • glad没有配套的cmake config,需要手动添加到项目。和自己的源文件一起编译。
  • 源文件中,glad的头文件include需要放在glfw之前。或者#define GLFW_INCLUDE_NONE以任意顺序include
find_package(glfw3 REQUIRED)
find_package(OpenGL REQUIRED)

# 添加 GLAD 源文件
# 记得把路径改成自己的
#set(GLAD_SOURCES ${PROJECT_SOURCE_DIR}/deps/glad/src/gl.c) # for glad2
set(GLAD_SOURCES ${PROJECT_SOURCE_DIR}/deps/glad/src/glad.c) # for glad1

# 添加 GLAD 头文件路径
include_directories(${PROJECT_SOURCE_DIR}/deps/glad/include)

add_executable(ProjectName
        main.cpp # 你的源文件
        ${GLAD_SOURCES}
)

target_link_libraries(ProjectName
        OpenGL::GL
        glfw
)

helloworld

测试代码,基于glad2,简化自https://github.com/Dav1dde/glad/blob/glad2/example/c++/hellowindow2.cpp

#include <glad/gl.h>
#include <GLFW/glfw3.h>
#include <iostream>

int main() {
    glfwInit();

    const GLuint WIDTH = 800, HEIGHT = 600;
    GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", NULL, NULL);
    glfwMakeContextCurrent(window);
    if (window == NULL) {
        std::cerr << "Failed to create GLFW window\n";
        glfwTerminate();
        return -1;
    }

    int version = gladLoadGL(glfwGetProcAddress);
    if (version == 0) {
        std::cerr << "Failed to initialize OpenGL context\n";
        return -1;
    }

    std::cout << "Loaded OpenGL " << GLAD_VERSION_MAJOR(version) << "." << GLAD_VERSION_MINOR(version) << "\n";

    glViewport(0, 0, WIDTH, HEIGHT);

    while (!glfwWindowShouldClose(window)) {
        glfwSwapBuffers(window);
        glfwPollEvents();
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

    }
    glfwTerminate();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值