1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
[]
= "mpv-engine"
= "0.2.0"
= "2024"
= "1.85"
= "Toolkit-agnostic libmpv embedding core: handle lifecycle, commands, typed events, and render seams."
= "MIT OR Apache-2.0"
= "https://github.com/ophymx/mpv-engine"
= ["mpv", "libmpv", "video", "player"]
= ["multimedia::video"]
# Dependency policy: the default build must stay boring — libmpv bindings
# and std-adjacent utility crates only. No toolkit deps (gtk, iced, winit),
# no git deps (crates.io forbids them, and they'd re-couple us to exactly
# the churn this crate exists to contain). Planned non-default features
# (`egl`, `export`, `wgpu`) get their own entries when implemented — see
# README "Roadmap".
[]
# Exported-frame render backend (macOS + Linux + Windows): the engine
# owns a hidden GL context on a dedicated render thread (CGL /
# surfaceless EGL over a DRM render node / WGL on an invisible window),
# renders into exportable framebuffers (IOSurface / DMA-BUF / shared
# D3D11 texture), and hands the shell zero-copy frame handles for Metal /
# Vulkan / D3D / wgpu import. Links the OpenGL, IOSurface and
# CoreFoundation frameworks (macOS), libEGL and libgbm (Linux), or
# opengl32, d3d11, dxgi, user32 and gdi32 (Windows) directly — no new
# Rust dependencies, per the policy above. On other platforms the feature
# compiles to nothing.
= []
# Zero-copy import of ExportedFrame into wgpu (implies `export`; macOS →
# Metal, Linux → Vulkan via wgpu-hal's own dmabuf import, Windows → DX12
# via OpenSharedHandle).
# Non-default and wgpu-major-locked on purpose — releases carrying it
# track wgpu majors (the egui-wgpu pattern, see README), so core-only
# consumers never feel that churn. Needs Rust 1.87 (wgpu's MSRV).
= [
"export",
"dep:wgpu",
"dep:wgpu-hal",
"dep:ash",
"dep:objc2",
"dep:objc2-metal",
"dep:objc2-io-surface",
"dep:windows",
]
[]
= "0.2"
# rsmpv/rsmpv-sys are permissively licensed (MIT OR Apache-2.0 / ISC)
# clean-room bindings; the only copyleft in a consumer's tree is libmpv
# itself — see LICENSING.md. `render` pulls in the safe render.h wrapper
# the render seam is built on.
= { = "0.2", = ["render"] }
= "0.12"
= "2"
= "0.1"
# wgpu with only the platform's native backend enabled: Vulkan on Linux,
# whose wgpu-hal carries the dmabuf import the Linux `wgpu` feature
# rides on (the Metal twin lives in the macOS section below).
[]
= { = "30", = false, = ["vulkan"], = true }
= { = "30", = false, = ["vulkan"], = true }
# The Linux wgpu import hand-rolls the dmabuf → VkImage import and wraps
# it via wgpu-hal's public `texture_from_raw` (with a DropCallback), so a
# consumed frame's pool buffer is *reused* rather than retired and
# reallocated per frame. No new crate enters the tree: wgpu-hal already
# depends on ash, and this must resolve to the *same* ash so the
# `vk::Image` types match — `30`'s wgpu-hal is on ash 0.38. Version-locked
# to wgpu like the rest of this feature (see the `wgpu` feature note).
= { = "0.38", = true }
# The objc2 trio exists only to wrap an IOSurface in an MTLTexture on the
# consumer's device — the same generation of bindings wgpu-hal's Metal
# backend itself uses, so no second ObjC binding family enters the tree.
[]
= { = "30", = false, = ["metal"], = true }
= { = "30", = false, = ["metal"], = true }
= { = "0.6", = true }
= { = "0.3.2", = true, = [
"MTLAllocation",
"MTLDevice",
"MTLPixelFormat",
"MTLResource",
"MTLTexture",
"objc2-io-surface",
] }
= { = "0.3.2", = true, = [
"objc2-core-foundation",
] }
# wgpu's DX12 backend plus the one `windows` interface the import needs
# (`ID3D12Device::OpenSharedHandle`) — the same generation of bindings
# wgpu-hal's own DX12 backend speaks, so no second Win32 binding family
# enters the tree. This is the objc2-trio arrangement, transposed.
[]
= { = "30", = false, = ["dx12"], = true }
= { = "30", = false, = ["dx12"], = true }
= { = "0.62", = false, = true, = [
"Win32_Foundation",
"Win32_Graphics_Direct3D12",
] }
[]
= "3"
= "0.4"
# Example-only (winit_player); dev-deps never reach consumers, so the
# no-toolkit-deps policy above is untouched.
= "0.30"
[[]]
= "winit_player"
= ["wgpu"]
# Real-window lifecycle harness (resize / fullscreen / transport /
# teardown / back-to-back / multi-engine). Needs a display and a GPU, so
# it is a manual gate rather than a `tests/` binary.
[[]]
= "harness"
= ["wgpu"]