高性能 Minecraft 2D/3D 渲染库,从 Epsilon HvH 模组中提取并优化。
OLG | A rendering framework originally designed within NekoyaHouse/Epsilon for Minecraft Java Edition 26.1 and above. We have split it out and maintained it further to facilitate the development of EpsilonBC and allow other mods to rely on OpenLumin for rendering.
-
高性能 2D 渲染 - 基于即时模式的批处理渲染系统
- 矩形、圆角矩形、三角形、阴影渲染
- 纹理渲染与缓存(LRU 策略,256 条目容量)
- TTF 字体渲染,支持抗锯齿
- 精确的裁剪区域(Scissor)坐标转换
-
3D 世界渲染 - 世界空间几何渲染
- 填充/线框盒子渲染
- 模糊盒子效果
- 自由线段渲染
-
着色器系统 - 完整的 GLSL 着色器支持
- 模糊着色器(高斯模糊)
- FXAA 抗锯齿
- 滤镜着色器
- 菜单背景特效(黑洞、外星地形、云层等)
-
渲染管线 - 灵活的渲染管线抽象
- GPU 缓冲区管理(Ring Buffer 架构)
- 帧缓冲(Framebuffer)管理
- 渲染目标(Render Target)系统
本库包含以下关键优化:
- P1 Scissor 坐标精度优化 - 通过显式 double 类型转换减少浮点误差累积
- P1 纹理缓存优化 - LRU 策略自动淘汰,防止内存泄漏
- P0 渲染帧生命周期 - 正确的
beginRenderFrame注入时机
repositories {
maven("https://github.com/NDBlockConnect/OpenLumin")
}
dependencies {
implementation("io.github.openlumin:OpenLumin:1.0.0")
}import io.github.openlumin.LuminRenderSystem;
import io.github.openlumin.schedulers.render2d.Render2DScheduler;
import io.github.openlumin.schedulers.render3d.Render3DScheduler;
// 2D 渲染
Render2DScheduler.INSTANCE.addRoundRect(
10, 10, 100, 50, // x, y, width, height
5, // radius
0xFFFFFFFF // color (ARGB)
);
// 3D 渲染
AABB box = new AABB(0, 0, 0, 1, 1, 1);
Render3DScheduler.INSTANCE.addOutlineBox(box, Color.RED);import io.github.openlumin.LuminRenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
public void onRender2D(PoseStack poseStack) {
Render2DScheduler.INSTANCE.flush();
}
public void onRender3D(PoseStack poseStack) {
Render3DScheduler.INSTANCE.flush(poseStack);
}io.github.openlumin/
├── buffer/ # GPU 缓冲区管理
├── immediate/ # 即时模式渲染器
├── renderers/ # 专用渲染器(矩形、纹理等)
├── schedulers/ # 渲染调度器(2D/3D)
├── shaders/ # 着色器封装
├── text/ # 文本渲染系统
├── holders/ # 资源持有者(缓存、渲染目标)
├── utils/ # 工具类(裁剪、颜色等)
└── LuminRenderSystem # 核心渲染系统入口
- LuminRenderSystem - 全局渲染状态管理
- Render2DScheduler - 2D 渲染命令调度
- Render3DScheduler - 3D 渲染命令调度(需手动调用 flush)
- LuminImmediateRenderer - 即时模式顶点提交
- TextureCacheHolder - 纹理缓存管理(LRU)
- Render3DScheduler 不再自动订阅事件 - 调用方需要在适当的渲染事件中手动调用
flush(poseStack) - 默认启用 TTF 抗锯齿 -
Render2DScheduler固定使用TTF_FONT_AA管线 - GUI 缩放获取 - 直接从
WindowRenderState.guiScale读取,不再依赖ClientSetting
本项目采用 GPL-3.0-only 许可证。详见 LICENSE 文件。
欢迎提交 Issue 和 Pull Request!
本库从 Epsilon HvH 模组提取,感谢原作者 Chen_Meng 和 06789 的贡献。