8个重大版本发布

使用旧的Rust 2015

0.9.0 2019年2月12日
0.8.0 2018年11月13日
0.7.0 2018年4月16日
0.6.0 2017年12月30日
0.1.1 2016年3月26日

#1031 in 图形API

Download history 2/week @ 2024-03-09 1/week @ 2024-03-16 63/week @ 2024-03-30 15/week @ 2024-04-06

90 每月下载量

Apache-2.0

5MB
11K SLoC

Documentation on docs.rs Travis Build Status AppVeyor Build Status gfx on crates.io Gitter Chat
文档 | LearningGfx教程 | Graphics By Squares教程 | 博客

gfx-rs

gfx 是Rust编程语言的一个高性能、免绑定的图形API。它旨在成为Rust图形的默认API:用于一次性应用程序、或高级库或引擎。

动机

  • 图形API主要是针对C和C++设计的,因此它们是危险的,容易出错,静态安全保证很少。
  • 在平台特定API周围提供类型安全的包装器是可行的,但这只把平台独立性问题推到了更高的抽象层次,通常是游戏或渲染引擎。
  • 现代图形API虽然提供了极大的灵活性和高性能,但与传统固定功能API相比,往往具有更高的入门门槛。
  • 像OpenGL这样的图形API仍然需要开发者绑定和解绑对象才能对其执行操作。这导致大量的样板代码,并带来了与全局状态相关的问题。

特性

图形后端

硬件特性

  • 离屏渲染目标
  • 多采样
  • 实例化
  • 几何着色器
  • 细分
  • 计算
  • 持久映射

谁在使用它?

最大的开源项目包括

闪亮的屏幕,包括一些旧项目

Hematite LazyBox Vange-rs Claymore ZoC Rust-oids

入门指南

gfx-rs 的 git 仓库包含许多示例。如果您克隆了 gfx 目录,这些示例将自动下载。

$ cd <my_dir>
$ git clone https://github.com/gfx-rs/gfx

其中 <my_dir> 是您选择的目录名。一旦下载了 gfx,您就可以构建任何 gfx 示例。示例在 <my_dir>/gfx/Cargo.toml 文件中列出。例如,尝试

$ cd gfx
$ cargo run --example cube

如果您首次编译示例,可能需要一些时间,因为所有依赖项都必须编译。

如果您想构建自己的独立 gfx 程序,请在您的新的 Cargo.toml 中添加以下内容

[dependencies]
gfx = "0.18"

为了使 gfx 运作,它需要访问操作系统的图形系统。这通常通过一些窗口初始化 API 提供。gfx 可以使用其中一些来获取图形上下文。例如; glfwglutin

要了解如何获取图形上下文,请参阅 cube 示例triangle 示例

例如,要使用 glutin,您的 Cargo.toml 必须扩展以下依赖项

[dependencies]
...
glutin ="*"
gfx_window_glutin = "*"

或者,有关 gfx 和其相关 crate 的出色介绍,请参阅 此处

结构和当前版本

gfx 由几个 crate 组成。您可以在本仓库中找到它们的所有内容。

核心功能 图形后端 窗口后端
gfx on crates.io gfx_device_gl on crates.io gfx_window_sdl on crates.io
gfx_app on crates.io gfx_device_dx11 on crates.io gfx_window_dxgi on crates.io
gfx_core on crates.io gfx_device_metal on crates.io gfx_window_glfw on crates.io
gfx_macros on crates.io gfx_device_vulkan on crates.io gfx_window_metal on crates.io
gfx_window_glutin on crates.io
gfx_window_vulkan on crates.io

注意

gfx 仍在开发中。API 可能会随着要实现的新后端/功能而更改。如果您有兴趣提供帮助,请查看 contrib.md 并不要犹豫在 Gitter 上联系开发者。

依赖项

~7–21MB
~289K SLoC