2个不稳定版本
0.2.0 | 2023年12月3日 |
---|---|
0.1.0 | 2023年5月5日 |
#747 in 游戏开发
155KB
1K SLoC
MAGE引擎核心crate
一个100%安全的Rust ASCII游戏引擎,用于编写文本工具或类似传统Rogue-like的瓦片游戏。
此crate管理Mage App
特质、Mage Config
结构和渲染引擎。渲染引擎将使用GPU以极高的速度将瓦片(通常是ASCII字符)渲染到屏幕上。在一个nVidia RTX2080显卡上,它可以以大约2000 fps的速度渲染30000个字符(即每秒6000万个字符)。
App
特质提供了一个包含两个方法的接口:tick
和present
。tick方法用于游戏模拟部分。Delta time、输入和其他一些信息被传递到主机程序。同样,present方法用于渲染。各种u32
切片被传递到主机以读取和写入。
Config
包含传递初始化提示给引擎的信息,包括瓦片数据、窗口大小等。
设置完成后,主机应用程序调用mage_core::run(...)
以启动主循环。
工作原理
GPU运行一个需要4个纹理的片段着色器
- 字体/瓦片纹理
- 字符纹理
- 前景颜色纹理
- 背景颜色纹理
字体/瓦片纹理
这是一个图像(通常是PNG图像),其中包含256个瓦片图像,排列在一个16x16的网格中。下面是一个此类图像的示例
如果没有提供,它实际上是一个默认图像。每个瓦片(共有256个)可以映射到一个单独的字节。
字符纹理
字符纹理中的红色通道(或最低8位)表示瓦片。这意味着其他24位未被使用,实际上可以由应用程序用于任何目的。纹理上的每个像素代表一个字符,纹理尺寸与可以放置在窗口中的字符单元数量相匹配。随着窗口大小的变化,此纹理也会调整大小。当前纹理的宽度和高度(以字符为单位)通过present
方法传递给应用程序。
前景颜色纹理
与字符纹理类似,每个像素代表一个字符单元,其尺寸相同。每个u32
条目代表字符应采用的前景颜色。u32
的格式为ABGR
。忽略alpha通道,可以保留应用程序需要的任何内容。
背景颜色纹理
这与前景颜色纹理相同,但用于确定字符单元的背景颜色。
综合以上内容。
GPU片段着色器将这四个纹理组合起来以渲染整个屏幕。前景颜色、背景颜色和字符纹理组合为每个字符单元,以确定该单元的颜色和内容。内容根据字符纹理中给出的索引从字体/瓦片纹理中提取。着色器实际上非常简单,可以在src/shader.wgsl
中查看。
构建
构建相当简单
$ cargo build [--release]
示例
包含了一些示例,我使用它们来测试引擎并帮助用户了解如何使用Mage。目前,这是唯一的文档,但我将努力编写一个Mdbook。
示例按常规方式运行
$ cargo run --release --example [example name]
例如,对于一个尝试使用Mage所有功能的示例
$ cargo run --release --example basic
功能
- 简单的API
- Alt+Enter切换全屏
- 跨平台(应在所有主要操作系统上运行)。
- 一旦设置好纹理,渲染就是100%的GPU。
免责声明
目前,这还是一个正在进行中的项目,尚未准备好投入生产。它缺少一些关键功能,包括但不限于
- 键盘和鼠标输入
- ECS系统
- 音频支持
依赖项
20–61MB
~785K SLoC