0.3.0-alpha.46 |
|
---|
#101 in #windowing
215KB
3K SLoC
Miniquad
这个分支/库仅因为 https://github.com/rust-lang/cargo/issues/1565 而存在
它可以在Linux上创建多个窗口
Miniquad是一个安全且跨平台的渲染库,专注于可移植性和低端平台支持
API灵感来源于 sokol-gfx (sokol概述, 2019更新)。实现受到 crayon 的影响。
对于Windows/Linux(以及可能移动设备)上的上下文管理和输入,“sokol-app”被使用。对于WASM没有外部依赖。
对于高级API,请查看
good-web-game:在miniquad之上实现了一些ggez子集,作为兼容层以在wasm上运行ggez游戏
macroquad:在miniquad之上的raylib-like库。 使用macroquad的100loc arkanoid
支持的平台
- Windows, OpenGl 3
- Linux, OpenGl 3
- macOS, OpenGL 3
- iOS, GLES 3
- WASM, WebGl1 - 在ios safari,ff,chrome上测试
- Android, GLES3
不支持,但期望的平台
- Android, GLES2 - 进行中。
- Metal。对于MacOs和IOS,除了OpenGL之外,还非常希望有一个Metal渲染后端。但我没有可以开始工作的MacOs硬件 :/
示例
examples/quad.rs: 网络演示
examples/offscreen.rs: 网络演示
PonasKovas/miniquad-mandelbrot: 网络演示
值得提一下zemeroth端口和astroblasto,它们是用miniquad驱动的good-web-game构建的。
构建示例
linux
# ubuntu system dependencies
apt install libx11-dev libxi-dev libgl1-mesa-dev
cargo run --example quad
windows
# both MSVC and GNU target is supported:
rustup target add x86_64-pc-windows-msvc
# or
rustup target add x86_64-pc-windows-gnu
cargo run --example quad
wasm
rustup target add wasm32-unknown-unknown
cargo build --example quad --target wasm32-unknown-unknown
然后使用以下.html文件来加载.wasm
index.html
<html lang="en">
<head>
<meta charset="utf-8">
<title>TITLE</title>
<style>
html,
body,
canvas {
margin: 0px;
padding: 0px;
width: 100%;
height: 100%;
overflow: hidden;
position: absolute;
background: black;
z-index: 0;
}
</style>
</head>
<body>
<canvas id="glcanvas" tabindex='1'></canvas>
<!-- Minified and statically hosted version of https://github.com/not-fl3/miniquad/blob/master/native/sapp-wasm/js/gl.js -->
<script src="https://not-fl3.github.io/miniquad-samples/gl.js"></script>
<script>load("quad.wasm");</script> <!-- Your compiled wasm file -->
</body>
</html>
服务器静态.wasm和.html的一种方法
cargo install basic-http-server
basic-http-server .
android
为Android构建推荐使用Docker。
miniquad使用稍作修改的cargo-apk
版本。
docker run --rm -v $(pwd)":/root/src" -w /root/src notfl3/cargo-apk cargo quad-apk build --example quad
APK文件将在target/android-artifacts/(debug|release)/apk
目录中。
启用"log-impl"后,所有日志调用都将转发到adb控制台。不需要对Android代码进行修改,一切应该都能正常工作。
iOS
请参阅miniquad iOS的示例项目。
交叉编译
# windows target from linux host:
# this is how windows builds are tested from linux machine:
rustup target add x86_64-pc-windows-gnu
cargo run --example quad --target x86_64-pc-windows-gnu
目标
-
快速编译时间。目前从"cargo clean"开始,桌面和Web都是大约5秒。
-
跨平台。所需平台特定用户代码应尽量少。
-
低端设备支持。
-
可玩性。在你自己的游戏中工作,很可能发现一些硬件兼容性问题。解决这个问题应该很容易,实现细节不应该被隐藏在抽象层之下。
非目标
-
终极类型安全性。库应该完全符合Rust定义的安全——没有未定义行为或内存不安全。但是,正确的GPU状态没有类型保证。请随时在用户代码中提供安全抽象!
-
sokol-gfx API兼容性。虽然sokol作为API设计基础非常出色,但仅仅在Rust中重新实现sokol并不是目标。想法是从sokol中学习,但在可能的情况下以Rust的方式构建库。
金牌赞助商
Miniquad由以下赞助
依赖项
~0–1.8MB
~50K SLoC