在编写第一行 XGE 代码之前,你需要准备好编译工具链并了解项目目录结构。本章将带你完成从零到可编译的全部准备工作。
XGE 是一个纯 C99 图形引擎,不依赖任何包管理器或 IDE 工程系统。它通过 批处理脚本 + GCC 命令行 的方式构建,这意味着你只需要一个正确的编译器环境即可。这种设计让 XGE 可以无缝嵌入任何构建系统——无论是 Makefile、CMake、MSBuild 还是你自研的构建脚本。
xge.dll / libxge.so),你的应用只需链接这个库并包含两个头文件(xge.h + xui.h)即可使用全部功能。
| 组件 | 最低版本 | 说明 |
|---|---|---|
| MinGW-w64 GCC | 12.x+ | C99 编译器,需包含 gcc、windres |
| OpenGL 驱动 | 3.3+ | 桌面平台需要支持 GL 3.3 的显卡驱动 |
| Windows SDK | — | MinGW-w64 自带,提供 gdi32、user32 等系统库 |
| Git | 任意 | 用于克隆仓库 |
cl.exe。XGE 的构建脚本针对 MinGW-w64 编写,链接参数(-lgdi32 -luser32 等)是 GCC 风格。如果你使用 Visual Studio,请安装 MinGW-w64 工具链并通过命令行构建。
克隆仓库后,你会看到如下结构:
脚本内部执行的核心命令等价于:
Debug 版额外定义 -DXGE_DEBUGMODE=1,暴露调试统计 API(xgeDebugGetStats、xgedbgDirtyRectCount 等)。产物为 build/xgedbg.dll。
创建 hello/main.c:
// hello/main.c — 最小 XGE 程序
#include "xge.h"
static int onFrame(void* pUser) {
(void)pUser;
xgeClear(0x0C181CFF); // 深蓝色清屏
return XGE_OK; // 返回 XGE_OK 继续循环
}
int main(void) {
xge_desc_t d = {0};
d.iWidth = 800;
d.iHeight = 600;
d.sTitle = "Hello XGE";
d.iFlags = XGE_INIT_WINDOW | XGE_INIT_RESIZABLE;
xgeInit(&d);
xgeRun(onFrame, NULL);
xgeUnit();
return 0;
}
ch01_main1.exe --frames 1 可自动退出。| 函数 / 宏 | 说明 |
|---|---|
xgeInit(const xge_desc_t*) | 初始化引擎,创建窗口 |
xgeUnit(void) | 销毁引擎,释放全部资源 |
xgeRun(proc, user) | 进入主循环 |
xgeClear(uint32_t) | 以 RGBA8 颜色清屏 |
XGE_INIT_WINDOW | 窗口模式(默认) |
XGE_INIT_RESIZABLE | 允许用户调整窗口大小 |
XGE_OK | 帧回调返回此值继续运行 |
xge.dll 放在可执行文件同目录或系统 PATH 中。-lxge 必须在 -lm -lws2_32 等系统库之前。xge.h 内部 #include "lib/xrt/xrt.h",所以编译时需要 -I.(仓库根目录)。xge.c 仅包含 src/xge_impl.c。如果你想把源码并入自己的工程,直接编译 src/ 下的 .c 文件即可,无需 xge.c。iWidth / iHeight 为 1920×1080,观察窗口变化。iFlags 改为 XGE_INIT_FULLSCREEN,运行后按 Alt+F4 退出。