用CMake编译glfw进行OpenGL配置,在Visual Studio上运行

Visual Studio的下载

Visual Studio 2022 C++ 编程环境

|---|----------------------------------------------------------------------------|
| |
| | |

GLFW库安装

GLFW官网地址

GLFW官网地址:https://www.glfw.org下载相应版本,如下图:

|---|----------------------------------------------------------------------------|
| |
| | |

CMake软件进行编译安装

下载CMake

下载的如果是源码包,需要下载CMake软件进行编译安装。

CMake官网地址:CMake - Upgrade Your Software Build System

进行安装,界面如下:

可以修改安装路径到D盘

编译glfw3.4

在下载的GLFW的文件夹glfw-3.4下面创建文件夹build,build文件夹下面创建install文件夹,用来存放编译后生成的文件。

运行CMake,点击Borwsse Source按钮,选择要编译的源代码文件夹,即glfw-3.4下面的build文件夹,点击Borwse Build按钮,选择编译文件存放的位置,如下图:

点击Configure按钮,选择编译器等相关信息,这个要选x64

点击Finish按钮进行配置,如下所示:

修改安装路径,把路径改成刚才创建的install文件夹里

用Visual Studio 2022 打开工程文件,GLFW.sln

点击ALL BUILD右键-->生成

编译成功

选择Install,鼠标右键生成,将在install文件夹下面生成GLFW的头文件和库文件,如下:

GLAD库安装

打开glad官网地址:https://glad.dav1d.de

选择,C/C++语言,OpenGL库,版本选择最新版本4.6(这个一定要记住,后面编程会用到),

选择核心模式。选择后,点击GENERATE按钮。会在线生成GLAD的相关文件,如下所示:

选择.ZIP压缩包下载

解压缩后如下:

整理文件(选作)

创建dependence文件

最后整理完是这样的

在Visual Studio配置

创建一个c++的空项目

右键-->属性

把包含目录和库目录配置了

包含目录配置include

库目录配置lib

配置的文件都是CMake编译出来的,在install里面

配置链接器里的输入

测试代码

一:

cs 复制代码
#include<glad/glad.h>
#include<GLFW/glfw3.h>

#include<iostream>

// settings
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;

const unsigned int VIEW_WIDTH = 800;
const unsigned int VIEW_HEIGHT = 600;

void framebuffer_size_callback(GLFWwindow* window, int width, int height);

int main()
{
    int glfwSate = glfwInit();
    if (glfwSate == GLFW_FALSE)
    {
        std::cout << "GLFW initialize failed!" << std::endl;
        exit(EXIT_FAILURE);
    }

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "Hello OpenGL", NULL, NULL);
    if (window == NULL)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);

    // glad: load all OpenGL function pointers
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }

    
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
    //glfwSetKeyCallback
    glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    while (!glfwWindowShouldClose(window))
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    glfwTerminate();
    return 0;
}

void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
    std::cout << "Call frame buffer callback function!" << std::endl;
    glViewport(0, 0, width, height);
}

二:

cs 复制代码
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>

// 视口调整回调函数
void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
    glViewport(0, 0, width, height);
}

// 键盘输入回调函数
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) {
        glfwSetWindowShouldClose(window, true);
    }
}

int main() {
    // 初始化GLFW
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    // 创建窗口
    GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL Window", NULL, NULL);
    if (window == NULL) {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);

    // 初始化GLAD
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }

    // 设置视口和回调
    glViewport(0, 0, 800, 600);
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
    glfwSetKeyCallback(window, key_callback);

    // 渲染循环
    while (!glfwWindowShouldClose(window)) {
        // 清屏
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        // 交换缓冲并处理事件
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    // 清理资源
    glfwTerminate();
    return 0;
}
相关推荐
万法若空23 分钟前
排列组合恒等式
c++·算法
老洋葱Mr_Onion1 小时前
【C++】CSP-J初赛模拟卷七错题整理(作者自用)
c++·算法·深度优先
电商API_180079052472 小时前
速卖通商品采集API技术文章
java·开发语言·c++·api·跨境电商·商品详情
汉克老师3 小时前
CSP-J 初赛(以满分为目标):第四课《看懂计算机到底在算什么!——C++变量、表达式和运算符 》
c++·小学生·学c++编程
小小龙学IT3 小时前
zstd(Zstandard)开源压缩库实战指南:让数据又快又小
c++·开源
小小龙学IT4 小时前
GLM 开源图形学数学库深度解析:从向量、矩阵到四元数的完整实战
c++·矩阵·开源·mfc
Severus_black4 小时前
【C++初阶】类和对象(中)
c++
qz5zwangzihan15 小时前
AtCoder高频英文词汇短语
c++·atcoder·高频词
码匠许师傅5 小时前
【C++ 面试真题】聊聊 C++ 的类型特征( type_traits)
java·c++·面试
thinking_talk5 小时前
换一个 AI IDE,过去的数据还能继续用吗?
ide·ai ide·数据复用