2个不稳定版本

0.2.0 2023年12月3日
0.1.0 2023年5月5日

#747 in 游戏开发

MIT许可

155KB
1K SLoC

MAGE引擎核心crate

Example screenshot

一个100%安全的Rust ASCII游戏引擎,用于编写文本工具或类似传统Rogue-like的瓦片游戏。

此crate管理Mage App特质、Mage Config结构和渲染引擎。渲染引擎将使用GPU以极高的速度将瓦片(通常是ASCII字符)渲染到屏幕上。在一个nVidia RTX2080显卡上,它可以以大约2000 fps的速度渲染30000个字符(即每秒6000万个字符)。

App特质提供了一个包含两个方法的接口:tickpresent。tick方法用于游戏模拟部分。Delta time、输入和其他一些信息被传递到主机程序。同样,present方法用于渲染。各种u32切片被传递到主机以读取和写入。

Config包含传递初始化提示给引擎的信息,包括瓦片数据、窗口大小等。

设置完成后,主机应用程序调用mage_core::run(...)以启动主循环。

工作原理

GPU运行一个需要4个纹理的片段着色器

  • 字体/瓦片纹理
  • 字符纹理
  • 前景颜色纹理
  • 背景颜色纹理

字体/瓦片纹理

这是一个图像(通常是PNG图像),其中包含256个瓦片图像,排列在一个16x16的网格中。下面是一个此类图像的示例

Font example image

如果没有提供,它实际上是一个默认图像。每个瓦片(共有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