当前位置: 首页 > news >正文

VSCode + XMake搭建OpenGL开发环境

1. 基础环境

  • VSCode:添加xmake插件
  • xmake:加入环境变量
  • mingw:加入环境变量
  • GLFW:下载
  • GLAD:下载

在 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. 项目结构

生成项目

# 生成项目
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;
}
http://www.dtcms.com/a/548805.html

相关文章:

  • vscode ssh远程连接 ubuntu虚拟机
  • AIRSKIN®机器人电子皮肤传感器:为科研机器人披上智能“皮肤”
  • iOS 26 应用管理实战 多工具协同构建开发与调试的高效体系
  • 双向链表的“链”与“殇”——Rust LinkedList 的深度剖析、实战与再思考
  • Vue3 重构待办事项(主要练习组件化)
  • 高校网站建设的文章wordpress 初始密码
  • 上海网上注册公司官网烟台seo做的好的网站
  • 【Frida Android】基础篇15(完):Frida-Trace 基础应用——JNI 函数 Hook
  • Linux-自动化构建make/makefile(初识)
  • 【android bluetooth 协议分析 14】【HFP详解 2】【蓝牙电话绝对音量详解】
  • 【实战总结】MySQL日志文件位置大全:附查找脚本和权限解决方案
  • 系统架构设计师备考第60天——嵌入式硬件体系软件架构
  • Kubernetes(K8s)基础知识与部署
  • 嵊州做网站钻磊云主机
  • 网站建设时间及简介靖安县城乡规划建设局网站
  • 记一次从文件读取到getshell
  • 从顶流综述,发现具身智能的关键拼图----具身智能的内部模拟器:World Model如何成为AI走向真实世界的关键技术
  • 学习笔记—契比雪夫多项式和契比图过滤器
  • 【机器学习入门】9.2:感知机 Python 实践代码模板(苹果香蕉分类任务适配)
  • 大会的网站架构企业网站设计的基本内容包括哪些
  • 打印对称的X。
  • 生产管理系统详解:生产产品,bom,生产线,生产工序,bom清单,生产订单,生产任务单,他们之间的关系梳理
  • 企业微信SCRM系统有什么作用,满足哪些功能?从获客到提效的功能适配逻辑
  • JS如何操作IndexedDB
  • 网站正在维护中wordpress 评分
  • Kafka关闭日志,启动一直打印日志
  • 搬家网站建设思路荆门哪里有专门做企业网站的
  • 前后端分离
  • curl开发常用方法总结
  • rust实战:基础框架Rust + Tauri Windows 桌面应用开发文档