# spout-rs
[](https://crates.io/crates/spout-rs)
[](https://docs.rs/spout-rs)
Rust bindings for [Spout2](https://github.com/leadedge/Spout2) — GPU texture sharing on Windows
via DirectX 11 and OpenGL.
## Requirements
- Windows only (Spout2 is a Windows-exclusive library)
- Spout2 SDK headers — set `SPOUT2_SDK_DIR` to the directory containing `SpoutSender.h`
(e.g. `vendor/Spout2/SPOUTSDK/SpoutGL`). Defaults to the vendored submodule when
building from a spout-rs clone, so this only needs to be set by downstream consumers.
- A compiled `Spout.lib` import library — set `SPOUT2_LIB_DIR` to its containing directory
- `Spout.dll` on `PATH` at runtime (found in `cmake-build/bin/Release` after building)
## Building
After cloning, run the bootstrap task to install git hooks, initialise submodules, and compile Spout2:
```sh
mise run bootstrap
```
Then set `SPOUT2_LIB_DIR` before building or running tests:
```sh
$env:SPOUT2_LIB_DIR = "vendor\Spout2\cmake-build\lib\Release" # PowerShell
$env:PATH += ";vendor\Spout2\cmake-build\bin\Release"
cargo build
```
### Consuming from another workspace
The published crate excludes `vendor/`, so downstream consumers must point the build
script at their own copy of the Spout2 SDK headers and import library:
```sh
$env:SPOUT2_SDK_DIR = "<path-to-Spout2>\SPOUTSDK\SpoutGL"
$env:SPOUT2_LIB_DIR = "<path-to-Spout2>\cmake-build\lib\Release"
```
Both can be wired up in a workspace's `.cargo/config.toml` `[env]` block with
`relative = true` so developers don't need to set them per-shell.
## Usage
### Sender
```rust
use spout_rs::SpoutSender;
let mut sender = SpoutSender::new("my-sender");
// Each frame, after rendering to a texture:
sender.send_texture(tex_id, gl::TEXTURE_2D, 1920, 1080, false);
sender.hold_fps(60);
```
### Receiver
```rust
use spout_rs::SpoutReceiver;
let mut receiver = SpoutReceiver::new(Some("my-sender"));
// Each frame:
if receiver.is_connected() {
let info = receiver.sender_info(); // name, width, height, fps
receiver.receive_texture(tex_id, gl::TEXTURE_2D, false);
}
```
## Vendored Libraries
- [Spout2](https://github.com/leadedge/Spout2)