131个版本

0.4.5 2024年7月9日
0.4.2 2024年5月29日
0.4.0 2024年2月21日
0.4.0-alpha.102023年9月6日
0.2.53 2020年3月31日

#17 in GUI

Download history 7037/week @ 2024-05-04 8044/week @ 2024-05-11 7491/week @ 2024-05-18 6239/week @ 2024-05-25 7951/week @ 2024-06-01 6155/week @ 2024-06-08 6883/week @ 2024-06-15 6093/week @ 2024-06-22 3585/week @ 2024-06-29 5035/week @ 2024-07-06 6822/week @ 2024-07-13 7063/week @ 2024-07-20 6737/week @ 2024-07-27 5532/week @ 2024-08-03 7493/week @ 2024-08-10 6195/week @ 2024-08-17

27,181 每月下载量
用于 95 个crate (20 直接)

MIT/Apache

1MB
21K SLoC

Miniquad

Github Actions Docs Crates.io version Discord chat Matrix

Miniquad是我们在一个不需要复杂的依赖树和数千行代码就能用计算机绘制东西的世界中的梦想的实现。

Miniquad旨在提供一个跨平台的图形抽象层,该层在具有GPU的任何平台上都能正常工作,尽可能地轻量级,同时尽可能覆盖更多的机器。

支持的平台

  • Windows, OpenGL 3, OpenGL 2.2;
  • Linux, OpenGL 2.2, OpenGL 3, GLES 2, GLES 3;
  • macOS, OpenGL 3, Metal;
  • iOS, GLES 2, GLES 3, Metal;
  • WASM, WebGL 1 - 在iOS Safari、Firefox、Chrome上测试过;
  • Android, GLES 2, GLES 3.

示例

Imgur

examples/quad.rs: 网络演示
examples/offscreen.rs: 网络演示

PonasKovas/miniquad-mandelbrot: 网络演示

构建示例

Linux

cargo run --example quad

在NixOS Linux上,您可以使用shell.nix启动一个开发环境,在其中可以构建和运行Miniquad。

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

在模拟器上运行

mkdir MyGame.app
cargo build --target x86_64-apple-ios --release
cp target/release/mygame MyGame.app
# only if the game have any assets
cp -r assets MyGame.app
cat > MyGame.app/Info.plist << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>mygame</string>
<key>CFBundleIdentifier</key>
<string>com.mygame</string>
<key>CFBundleName</key>
<string>mygame</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
</dict>
</plist>
EOF

xcrun simctl install booted MyGame.app/
xcrun simctl launch booted com.mygame

有关为真实iPhone配置的详细信息和建议,请参阅https://macroquad.rs/articles/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文件。这个文件非常易于复制粘贴——它不使用任何miniquad特定的抽象。只需复制miniquad平台实现的一部分并单独使用它就非常简单。

非目标

  • 最高类型安全性。库应完全符合Rust对安全的定义——无UB或内存不安全性。但正确的GPU状态没有类型保证。用户代码中提供安全性抽象是自由的!

  • 高端API,如Vulkan/DirectX 12。请查看gfx-rsvulkano

金级赞助商

Miniquad由以下组织支持

SourceGear

依赖关系

~0–1MB
~27K SLoC