9个版本 (5个破坏性更新)

0.6.0 2019年9月23日
0.5.0 2019年9月22日
0.4.0 2019年9月21日
0.3.0 2019年9月21日
0.1.1 2019年9月10日

#270 in 图形API

LGPL-3.0-or-later

1.5MB
11K SLoC

VxDraw - Rust的简单2D渲染

Latest Version docs.rs

简介

vxdraw 是一个用于将精灵、文本和流式纹理绘制到窗口的渲染库。它不是一个引擎,而是一个库,没有运行时。

注意:此软件处于早期阶段,仅用于满足正在进行的工作的要求。可能会有一些粗糙的边缘。任何贡献都非常欢迎。目前仅支持Vulkan作为后端。

功能和动机

API的文档可以在 https://docs.rs/vxdraw 上找到。

vxdraw 旨在将变化的精灵流式传输到GPU,主要用于具有动画、移动和/或变形精灵的视频游戏。如果没有精灵更改,则出于效率考虑,数据不会重新上传到GPU。

vxdraw 通过紧密打包数据以获取几乎最优的GPU上传性能。其主要组织点是 layer - 定义了绝对绘制顺序。层是一组同类型的可绘制项的集合,其中包含4种类型

  • dyntex - 动态纹理,基于单个纹理的精灵
  • strtex - 流式纹理,基于可以编辑像素的纹理的精灵
  • quads - 着色的4点形状
  • text - 字体渲染和字母控制

最后是一个用于调试的伪层

  • debtri - 调试三角形,始终绘制在所有内容之上的三角形。主要用于检查是否正常工作或实现一个快速且实用的视觉工具来检查代码中的条件。

其他功能

  • 自定义混合模式(每层)
  • 过滤模式(每层)
  • 固定或动态透视矩阵(每层)
  • 为quads、text、dyntex和strtex提供用户提供的顶点/片段着色器(每层)

快照测试

vxdraw 允许通过检索完整帧数据来进行快照测试。

基准结果

以下是使用AMD Vega 56显卡运行cargo bench的基准测试结果

test debtri::tests::bench_rotating_windmills_no_render                      ... bench:         855 ns/iter (+/- 77)
test debtri::tests::bench_rotating_windmills_only                           ... bench:      57,253 ns/iter (+/- 8,600)
test debtri::tests::bench_rotating_windmills_set_color                      ... bench:      64,500 ns/iter (+/- 25,971)
test debtri::tests::bench_simple_triangle                                   ... bench:      50,443 ns/iter (+/- 5,055)
test debtri::tests::bench_still_windmills                                   ... bench:      52,454 ns/iter (+/- 5,280)
test debtri::tests::bench_windmills_set_color                               ... bench:           8 ns/iter (+/- 2)
test dyntex::tests::animated_fireballs_20x20_uvs2                           ... bench:     114,045 ns/iter (+/- 31,969)
test dyntex::tests::bench_many_particles                                    ... bench:      58,473 ns/iter (+/- 12,086)
test dyntex::tests::bench_many_sprites                                      ... bench:   3,250,726 ns/iter (+/- 119,911)
test dyntex::tests::bench_push_and_pop_sprite                               ... bench:          31 ns/iter (+/- 4)
test dyntex::tests::bench_push_and_pop_texture                              ... bench:  55,676,043 ns/iter (+/- 56,986,205)
test strtex::tests::adding_sprites                                          ... bench:          23 ns/iter (+/- 2)
test strtex::tests::bench_streaming_texture_set_500x500_area                ... bench:          10 ns/iter (+/- 1)
test strtex::tests::bench_streaming_texture_set_500x500_area_using_iterator ... bench:   2,636,501 ns/iter (+/- 374,451)
test strtex::tests::bench_streaming_texture_set_single_pixel                ... bench:          10 ns/iter (+/- 1)
test strtex::tests::bench_streaming_texture_set_single_pixel_while_drawing  ... bench:      65,817 ns/iter (+/- 10,654)
test strtex::tests::generate_perlin_noise                                   ... bench:   1,895,628 ns/iter (+/- 820,344)
test tests::clears_per_second                                               ... bench:      48,371 ns/iter (+/- 8,677)
test text::tests::text_flag                                                 ... bench:      75,114 ns/iter (+/- 28,652)

示例输出

  • 具有不同不透明度设置的相同纹理的多个精灵 result-1

  • 在3色纹理上的线性过滤模式 result-2

  • 各种四边形 result-3

依赖项

~19–34MB
~390K SLoC