VSCode + XMake搭建OpenGL开发环境

1. 基础环境

在 Glad 生成器中

  1. API-gl:选择OpenGL 版本(如 3.3+)
  2. Profile:选 Core
  3. Option:勾选 Generate a loader
  4. 点击 Generate 下载 glad.zip,解压后得到 include 和 src 文件夹(src/glad.c 是关键文件)。

2. 项目结构

生成项目

bash 复制代码
# 生成项目
xmake create opengl-demo
# 使用mingw
xmake config --plat=mingw

项目结构如下

bash 复制代码
opengl-xmake-demo/
├─ include/                # 头文件目录
│  ├─ GLFW/                # 从 GLFW 解压的 include/GLFW 复制过来
│  ├─ glad/                # 从 Glad 解压的 include/glad 复制过来
│  └─ KHR/                 # 从 Glad 解压的 include/KHR 复制过来(glad 依赖)
├─ lib/                    # 库文件目录(仅 Windows 需要,Linux/macOS 可通过包管理器安装)
│  └─ libglfw3.a           # GLFW 的 MinGW 静态库(64位)
├─ src/
│  ├─ glad.c               # Glad 生成的源文件
│  └─ main.cpp             # 主程序代码(测试代码见下文)
└─ xmake.lua               # XMake 配置文件(核心)

项目配置

lua 复制代码
-- 设置项目名称和版本
set_project("opengl-demo")
set_version("1.0.0")

-- 设置 C++ 标准
set_languages("c++17")

-- 定义目标可执行文件
target("opengl-app")
    set_kind("binary")  -- 生成可执行文件

    -- 添加源文件(main.cpp 和 glad.c)
    add_files("src/*.cpp", "src/*.c")

    -- 添加头文件搜索路径(include 目录)
    add_includedirs("include")

    -- 添加 GLFW 库文件路径(Windows 需手动指定)
    add_linkdirs("lib")
    -- Windows:链接系统自带的 opengl32.lib 和 GLFW 静态库
    add_links("opengl32", "glfw3", "gdi32")

3. 源代码

bash 复制代码
# 运行
xmake run
cpp 复制代码
#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);
}

int main()
{
    // 初始化GLFW库
    glfwInit();

    // 设置OpenGL版本要求:3.3核心模式(现代OpenGL推荐)
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // 主版本号:3
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); // 次版本号:3
    // 设置OpenGL配置文件:核心模式(Core Profile)
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    // 创建窗口:参数依次是"宽、高、窗口标题、全屏模式(NULL=窗口)、共享上下文(NULL)"
    GLFWwindow *window = glfwCreateWindow(800, 600, "XMake + OpenGL", NULL, NULL);
    if (!window)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }

    // 将窗口的OpenGL上下文设为"当前线程的主上下文"
    glfwMakeContextCurrent(window);

    // 告诉GLFW:当窗口大小变化时,调用framebuffer_size_callback函数
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

    // 加载OpenGL函数:参数是GLFW提供的"函数地址获取器"
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }

    while (!glfwWindowShouldClose(window))
    {
        // 1. 清空颜色缓冲区:设置背景色并填充窗口
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f); // RGBA颜色:深灰蓝(alpha=不透明)
        glClear(GL_COLOR_BUFFER_BIT);         // 清空"颜色缓冲区"(只保留背景色)

        // 2. 交换缓冲区(双缓冲机制)
        glfwSwapBuffers(window);

        // 3. 处理事件(如鼠标、键盘输入,窗口关闭)
        glfwPollEvents();
    }

    // 清理GLFW资源(关闭窗口、释放内存)
    glfwTerminate();
    return 0;
}
相关推荐
2501_915909063 天前
移动端开发工具链怎么组合比较好,iOS、Android、跨端三套配置方案
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
sunoo-2293 天前
【ARM嵌入式学习笔记Day6】一文打通i.MX6ULL时钟体系:PLL/PFD/预分频+滞回比较器全解析
arm开发·笔记·vscode·单片机·imx6ull·汇编语言
明天…ling3 天前
gitee与vscode远程连接
vscode·gitee
2501_915918414 天前
iOS编程用什么软件好?主流工具Xcode、AppCode、CodeRunner与新兴快蝎对比
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
__pop_4 天前
VSCode Remote SSH 远程连接 glibc 高版本依赖问题
vscode
daxiangxm4 天前
【趣味休息】“围住小猫在线玩”-“困住小猫”,又回来了
数据结构·人工智能·vscode·github·php
星光开发者4 天前
基于Spring Boot的充电桩管理系统的设计与实现-计算机毕设【课程设计】57105
vue.js·spring boot·vscode·mysql·django·php·express
程序员允诺5 天前
内网/无网环境必备:VS Code Remote-SSH 离线包下载与手动部署教程
vscode
mmsx5 天前
Android 地图十万要素不卡顿:空间网格 + 渐进式加载的移动端实践
android·大数据·opengl
darin_ฅ( ̳• ◡ • ̳)ฅ15 天前
【开发工具】2026版-VScode&IDEA&Cursor插件安装及插件配置迁移
vscode·idea