VSCode + XMake搭建OpenGL开发环境
1. 基础环境
- VSCode:添加xmake插件
- xmake:加入环境变量
- mingw:加入环境变量
- GLFW:下载
- GLAD:下载
在 Glad 生成器中
- API-gl:选择OpenGL 版本(如 3.3+)
- Profile:选 Core
- Option:勾选 Generate a loader
- 点击 Generate 下载 glad.zip,解压后得到 include 和 src 文件夹(src/glad.c 是关键文件)。
2. 项目结构
生成项目
# 生成项目
xmake create opengl-demo
# 使用mingw
xmake config --plat=mingw
项目结构如下
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 配置文件(核心)
项目配置
-- 设置项目名称和版本
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. 源代码
# 运行
xmake run
#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); // 主版本号:3glfwWindowHint(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;
}
