#opengl #3d #graphics #windowing #gamedev

已删除 miniquad-fork-x

跨平台窗口上下文和渲染库

0.3.0-alpha.46 2022年4月18日

#101 in #windowing

MIT/Apache

215KB
3K SLoC

Miniquad

这个分支/库仅因为 https://github.com/rust-lang/cargo/issues/1565 而存在

它可以在Linux上创建多个窗口

Github Actions Docs Crates.io version Discord chat Matrix

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硬件 :/

示例

Imgur

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状态没有类型保证。请随时在用户代码中提供安全抽象!

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

  • sokol-gfx API兼容性。虽然sokol作为API设计基础非常出色,但仅仅在Rust中重新实现sokol并不是目标。想法是从sokol中学习,但在可能的情况下以Rust的方式构建库。

金牌赞助商

Miniquad由以下赞助

依赖项

~0–1.8MB
~50K SLoC