用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;
}
相关推荐
wen__xvn19 分钟前
每日一题蓝桥杯P8598 [蓝桥杯 2013 省 AB] 错误票据c++
开发语言·数据结构·c++·算法
JuicyActiveGilbert29 分钟前
【C++设计模式】第一篇:单例模式(Singleton)
c++·单例模式·设计模式
wshlp1234562 小时前
deepseek在pycharm 中的配置和简单应用
ide·pycharm·intellij-idea
solomonzw2 小时前
C++ 学习(八)(模板,可变参数模板,模板专业化(完整模板专业化,部分模板专业化),类型 Traits,SFINAE(替换失败不是错误),)
c语言·开发语言·c++·学习
阳洞洞2 小时前
“nullptr“ should be used to denote the null pointer
开发语言·c++
攻城狮7号2 小时前
【第15节】C++设计模式(行为模式)-State(状态)模式
c++·设计模式·状态模式
Alfred young3 小时前
CS144 Lab Checkpoint 0: networking warm up
c++·网络协议
JuicyActiveGilbert3 小时前
【C++设计模式】第五篇:原型模式(Prototype)
c++·设计模式·原型模式
lisw054 小时前
如何下载安装 PyCharm?
ide·python·pycharm
我的电脑会说烫4 小时前
线程池项目优化
c++