#pragma once
#include "rust/cxx.h"
#include "SpoutSender.h"
#include "SpoutReceiver.h"
#include <memory>
class SpoutSenderBridge {
public:
void set_sender_name(rust::Str name);
bool send_texture(uint32_t tex_id, uint32_t target,
uint32_t width, uint32_t height,
bool invert, uint32_t host_fbo);
bool send_image(rust::Slice<const uint8_t> pixels,
uint32_t width, uint32_t height,
uint32_t gl_format, bool invert, uint32_t host_fbo);
void release_sender();
bool is_initialized();
rust::String get_name();
uint32_t get_width();
uint32_t get_height();
void hold_fps(int32_t fps);
private:
SpoutSender inner;
};
class SpoutReceiverBridge {
public:
void set_receiver_name(rust::Str name);
bool receive_texture(uint32_t tex_id, uint32_t target,
bool invert, uint32_t host_fbo);
bool receive_texture_connect();
void release_receiver();
bool is_updated();
bool is_connected();
bool is_frame_new();
rust::String get_sender_name();
uint32_t get_sender_width();
uint32_t get_sender_height();
double get_sender_fps();
long get_sender_frame();
private:
SpoutReceiver inner;
};
std::unique_ptr<SpoutSenderBridge> new_spout_sender();
std::unique_ptr<SpoutReceiverBridge> new_spout_receiver();
int32_t spout_sender_count();
rust::String spout_get_sender(int32_t index);