用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;
}
相关推荐
蜡笔小马1 小时前
10.Boost.Geometry R-tree 空间索引详解
开发语言·c++·算法·r-tree
林开落L1 小时前
从零开始学习Protobuf(C++实战版)
开发语言·c++·学习·protobuffer·结构化数据序列化机制
林开落L1 小时前
从入门到了解:Protobuf、JSON、XML 核心解析(C++ 示例)
xml·c++·json·protobuffer·结构化数据序列化机制
Queenie_Charlie1 小时前
stars(树状数组)
数据结构·c++·树状数组
会周易的程序员2 小时前
openplc runtimev4 Docker 部署
运维·c++·物联网·docker·容器·软件工程·iot
爱装代码的小瓶子2 小时前
【C++与Linux基础】进程间通讯方式:匿名管道
android·c++·后端
CoderCodingNo2 小时前
【GESP】C++ 二级真题解析,[2025年12月]第一题环保能量球
开发语言·c++·算法
LYOBOYI1232 小时前
qtcpSocket详解
c++·qt
REDcker2 小时前
gRPC完整文档
服务器·网络·c++·网络协议·grpc
手揽回忆怎么睡2 小时前
opencode和TRAE使用Superpowers 和ui-ux-pro-max skillls
ide·ui·ai·ux