XGE 是一款纯 C 编写的跨平台 2D/3D 图形引擎。内置完整 SVG 渲染管线、 高级矢量路径系统、glTF 3D 管线与 80+ 控件的 XUI 框架——从一条贝塞尔曲线到一整套桌面级界面,再到一座程序化岛屿。
从底层 GPU 批渲染到上层 UI 控件,每一层都由同一套 C 代码驱动,无运行时依赖、无虚拟机。
21,800 行 shape_ex 引擎:贝塞尔曲线、椭圆弧、线性/径向渐变、虚线描边、路径裁剪、Alpha/Luma 遮罩、Trim Path 与高斯模糊——一条 API 链路贯穿始终。
xgeShapeExCubicToxgeShapeExArcToxgeShapeExStrokeDash
xgeShapeExMaskShapeSetxgeShapeExTrimPath
22,000 行自研解析与渲染器,支持渐变、裁剪、滤镜与 preserveAspectRatio,可直接光栅化到纹理。
用户空间 / 对象边界盒两种渐变单位,Pad / Reflect / Repeat 扩散模式,Paint Order 可控。
Miter / Round / Bevel 连接,Non-scaling 描边与路径动画。
Sound / Music / Stream 分层,音频组、淡入淡出与 3D 定位,基于 miniaudio。
TTF 实时光栅化 + 自研 XRF 位图字体,字形图集缓存、字距调整与文本装饰线。
glTF 2.0 模型、PBR 材质、方向/点/聚光直接光照、级联阴影、静态 IBL、骨骼动画与根运动、拾取与天空——105 个公开 C API,与 2D 共用同一套窗口、输入与资源底座。
xge3dModelLoadxge3dLightDefaultxge3dAnimatorCreate
xge3dFogDefaultxge3dSceneRaycast
分块高度场(U16/F32)带 1-4 级 LOD 与裙边,三角形级高度采样与射线查询;线性距离雾与立方图天空。
七个构建档位按需产出:从纯 2D 到全功能。65 个控件开关、8 个 3D 子模块开关,依赖冲突在编译期报错。
所有模块遵循同一命名约定与错误码体系,句柄即指针,结构体即配置。没有隐藏状态,没有魔法。
// 一个窗口,三行代码 xge_desc_t desc = {0}; desc.iWidth = 1280; desc.iHeight = 720; desc.sTitle = "Hello XGE"; desc.iFlags = XGE_INIT_RESIZABLE | XGE_INIT_HIGHDPI; xgeInit(&desc); xgeRun(onFrame, NULL); xgeUnit();
xge_shape_ex pShape; xgeShapeExCreate(&pShape); // 构建一条带圆角的闭合路径 xgeShapeExAppendCapsule(pShape, 80, 80, 240, 64, 1); // 线性渐变填充 + 虚线描边 xge_shape_ex_color_stop_t stops[] = { { 0.0f, 0xFFB454FF }, { 1.0f, 0xFF6B5EFF } }; xgeShapeExFillLinearGradient(pShape, 80,80,320,144, XGE_SHAPE_EX_GRADIENT_USER_SPACE, stops, 2); xgeShapeExStrokeWidth(pShape, 2.0f); xgeShapeExDraw(pShape, 0.25f); xgeShapeExDestroy(pShape);
xge_svg pSvg; xgeSvgCreate(&pSvg); xgeSvgLoad(pSvg, "icon.svg"); // 按目标矩形绘制,自动处理 viewBox 与纵横比 xge_rect_t dst = { 100, 100, 256, 256 }; xgeSvgDraw(pSvg, dst, 0.25f); // 或直接光栅化进纹理 xgeSvgTextureLoad(pTex, "icon.svg", 512, 512);
xge3d_scene*pScene; xge3dSceneCreate(&pScene); // 加载 glTF 模型并实例化进场景 xge3d_model *pModel; xge3dModelLoad("explorer.gltf", &pModel); xge3d_node_t root; xge3dModelInstantiate(pScene, pModel, 0, &root); // 平行光 + 阴影 + 天空 xge3d_node_t tLightNode; xge3dNodeCreate(pScene, 0, &tLightNode); xge3d_light_desc_t tLight = xge3dLightDefault(XGE3D_LIGHT_DIRECTIONAL); xge3dNodeSetLight(pScene, tLightNode, &tLight); // 渲染一帧 xge3d_camera_t tCam; xge3dCameraPerspective(&tCam, 1.2f, 16.0f/9.0f, 0.1f, 500.0f); xge3dCameraLookAt(&tCam, tEye, tTarget, tUp); xge3dRender(pRenderer, pScene, &tDesc, NULL);
// XUI 通过渲染代理与 XGE 解耦 xui_context pContext; xuiCreate(&pContext); xuiSetProxy(pContext, &tProxy); xuiWidgetCreate(pContext, &pRoot); xui_button_desc_t btn = {0}; btn.sText = "开始渲染"; xuiButtonCreate(pContext, &pButton, &btn); // 事件:捕获 → 目标 → 冒泡 xuiWidgetSetEventCallback(pButton, onClick, NULL);
xge_music_t tMusic; xgeMusicLoad(&tMusic, "bgm.ogg"); xgeMusicSetLoop(&tMusic, 1); xgeMusicPlay(&tMusic); // 两秒内淡入到 80% 音量 xgeMusicFade(&tMusic, 0.0f, 0.8f, 2000);
所有创建型 API 返回 int 错误码,输出参数前置;所有资源都有显式的 AddRef / Free 生命周期。调试器里看到的,就是真实发生的。
从按钮、输入框到代码编辑器、终端、图表与Dock面板——同一套布局、样式与事件系统驱动全部控件。
当前展示 51 个控件 · 全部控件均配备独立单元测试与可运行示例
平台层与 GPU 层完全解耦:桌面走 Sokol + OpenGL,嵌入式走 EGL,Web 走 WebGL2,小程序走自研桥接。
XUI 通过渲染代理调用 XGE,XGE 通过平台后端调用系统——任何一层都可以被替换或单独嵌入你的项目。
无需 CMake、无需包管理器。一条构建脚本产出单个 DLL,把 xge.h 拖进项目即可开始。
Windows / MinGW-w64 环境,Release 与 Debug 双版本输出;七个构建档位按需裁剪。
每个示例都支持 --frames 自动化运行与截图捕获。