spout-rs 0.1.3

Rust bindings for Spout2 — GPU texture sharing on Windows
Documentation
#include "spout_bridge.h"
#include <string>

// SpoutSenderBridge

void SpoutSenderBridge::set_sender_name(rust::Str name) {
    inner.SetSenderName(std::string(name).c_str());
}

bool SpoutSenderBridge::send_texture(uint32_t tex_id, uint32_t target,
                                     uint32_t width, uint32_t height,
                                     bool invert, uint32_t host_fbo) {
    return inner.SendTexture(
        static_cast<GLuint>(tex_id),
        static_cast<GLuint>(target),
        width, height, invert,
        static_cast<GLuint>(host_fbo)
    );
}

bool SpoutSenderBridge::send_image(rust::Slice<const uint8_t> pixels,
                                   uint32_t width, uint32_t height,
                                   uint32_t gl_format, bool invert, uint32_t host_fbo) {
    return inner.SendImage(
        pixels.data(), width, height,
        static_cast<GLenum>(gl_format), invert,
        static_cast<GLuint>(host_fbo)
    );
}

void SpoutSenderBridge::release_sender() {
    inner.ReleaseSender();
}

bool SpoutSenderBridge::is_initialized() {
    return inner.IsInitialized();
}

rust::String SpoutSenderBridge::get_name() {
    return rust::String(inner.GetName());
}

uint32_t SpoutSenderBridge::get_width() {
    return inner.GetWidth();
}

uint32_t SpoutSenderBridge::get_height() {
    return inner.GetHeight();
}

void SpoutSenderBridge::hold_fps(int32_t fps) {
    inner.HoldFps(fps);
}

// SpoutReceiverBridge

void SpoutReceiverBridge::set_receiver_name(rust::Str name) {
    inner.SetReceiverName(std::string(name).c_str());
}

bool SpoutReceiverBridge::receive_texture(uint32_t tex_id, uint32_t target,
                                          bool invert, uint32_t host_fbo) {
    return inner.ReceiveTexture(
        static_cast<GLuint>(tex_id),
        static_cast<GLuint>(target),
        invert,
        static_cast<GLuint>(host_fbo)
    );
}

bool SpoutReceiverBridge::receive_texture_connect() {
    return inner.ReceiveTexture();
}

void SpoutReceiverBridge::release_receiver() {
    inner.ReleaseReceiver();
}

bool SpoutReceiverBridge::is_updated() {
    return inner.IsUpdated();
}

bool SpoutReceiverBridge::is_connected() {
    return inner.IsConnected();
}

bool SpoutReceiverBridge::is_frame_new() {
    return inner.IsFrameNew();
}

rust::String SpoutReceiverBridge::get_sender_name() {
    return rust::String(inner.GetSenderName());
}

uint32_t SpoutReceiverBridge::get_sender_width() {
    return inner.GetSenderWidth();
}

uint32_t SpoutReceiverBridge::get_sender_height() {
    return inner.GetSenderHeight();
}

double SpoutReceiverBridge::get_sender_fps() {
    return inner.GetSenderFps();
}

long SpoutReceiverBridge::get_sender_frame() {
    return inner.GetSenderFrame();
}

// Directory

int32_t spout_sender_count() {
    SpoutSender s;
    return s.GetSenderCount();
}

rust::String spout_get_sender(int32_t index) {
    SpoutSender s;
    char name[256] = {};
    s.GetSender(index, name, sizeof(name));
    return rust::String(name);
}

// Factory functions

std::unique_ptr<SpoutSenderBridge> new_spout_sender() {
    return std::make_unique<SpoutSenderBridge>();
}

std::unique_ptr<SpoutReceiverBridge> new_spout_receiver() {
    return std::make_unique<SpoutReceiverBridge>();
}