用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;
}
相关推荐
忘梓.32 分钟前
从父类到子类:C++ 继承的奇妙旅程(2)
java·开发语言·c++
zxctsclrjjjcph7 小时前
【高并发内存池】从零到一的项目之centralcache整体结构设计及核心实现
开发语言·数据结构·c++·链表
炯哈哈7 小时前
【上位机——MFC】单文档和多文档视图架构
开发语言·c++·mfc·上位机
利刃大大8 小时前
【网络编程】四、守护进程实现 && 前后台作业 && 会话与进程组
linux·网络·c++·网络编程·守护进程
oioihoii8 小时前
C++23 std::tuple与其他元组式对象的兼容 (P2165R4)
c++·链表·c++23
赵和范8 小时前
C++:书架
开发语言·c++·算法
龙湾开发9 小时前
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 05.纹理贴图
c++·笔记·学习·3d·图形渲染·贴图
yasuniko10 小时前
C++线程库
开发语言·c++
还有几根头发呀10 小时前
深入理解C/C++内存管理:从基础到高级优化实践
c++
zxctsclrjjjcph11 小时前
【递归、搜索和回溯】递归、搜索和回溯介绍及递归类算法例题
开发语言·c++·算法·力扣