123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- struct Video;
- struct VideoDriver {
- VideoDriver(Video& super) : super(super) {}
- virtual ~VideoDriver() = default;
- virtual auto create() -> bool { return true; }
- virtual auto driver() -> string { return "None"; }
- virtual auto ready() -> bool { return true; }
- virtual auto hasFullScreen() -> bool { return false; }
- virtual auto hasMonitor() -> bool { return false; }
- virtual auto hasExclusive() -> bool { return false; }
- virtual auto hasContext() -> bool { return false; }
- virtual auto hasBlocking() -> bool { return false; }
- virtual auto hasFlush() -> bool { return false; }
- virtual auto hasFormats() -> vector<string> { return {"ARGB24"}; }
- virtual auto hasShader() -> bool { return false; }
- auto hasFormat(string format) -> bool { return (bool)hasFormats().find(format); }
- virtual auto setFullScreen(bool fullScreen) -> bool { return true; }
- virtual auto setMonitor(string monitor) -> bool { return true; }
- virtual auto setExclusive(bool exclusive) -> bool { return true; }
- virtual auto setContext(uintptr context) -> bool { return true; }
- virtual auto setBlocking(bool blocking) -> bool { return true; }
- virtual auto setFlush(bool flush) -> bool { return true; }
- virtual auto setFormat(string format) -> bool { return true; }
- virtual auto setShader(string shader) -> bool { return true; }
- virtual auto focused() -> bool { return true; }
- virtual auto clear() -> void {}
- virtual auto size(uint& width, uint& height) -> void {}
- virtual auto acquire(uint32_t*& data, uint& pitch, uint width, uint height) -> bool { return false; }
- virtual auto release() -> void {}
- virtual auto output(uint width = 0, uint height = 0) -> void {}
- virtual auto poll() -> void {}
- protected:
- Video& super;
- friend class Video;
- bool fullScreen = false;
- string monitor = "Primary";
- bool exclusive = false;
- uintptr context = 0;
- bool blocking = false;
- bool flush = false;
- string format = "ARGB24";
- string shader = "Blur";
- };
- struct Video {
- static auto hasDrivers() -> vector<string>;
- static auto hasDriver(string driver) -> bool { return (bool)hasDrivers().find(driver); }
- static auto optimalDriver() -> string;
- static auto safestDriver() -> string;
- struct Monitor {
- string name;
- bool primary = false;
- int x = 0;
- int y = 0;
- int width = 0;
- int height = 0;
- };
- static auto monitor(string name) -> Monitor;
- static auto hasMonitors() -> vector<Monitor>;
- static auto hasMonitor(string name) -> bool {
- for(auto& monitor : hasMonitors()) {
- if(monitor.name == name) return true;
- }
- return false;
- }
- Video() : self(*this) { reset(); }
- explicit operator bool() { return instance->driver() != "None"; }
- auto reset() -> void { instance = new VideoDriver(*this); }
- auto create(string driver = "") -> bool;
- auto driver() -> string { return instance->driver(); }
- auto ready() -> bool { return instance->ready(); }
- auto hasFullScreen() -> bool { return instance->hasFullScreen(); }
- auto hasMonitor() -> bool { return instance->hasMonitor(); }
- auto hasExclusive() -> bool { return instance->hasExclusive(); }
- auto hasContext() -> bool { return instance->hasContext(); }
- auto hasBlocking() -> bool { return instance->hasBlocking(); }
- auto hasFlush() -> bool { return instance->hasFlush(); }
- auto hasFormats() -> vector<string> { return instance->hasFormats(); }
- auto hasShader() -> bool { return instance->hasShader(); }
- auto hasFormat(string format) -> bool { return instance->hasFormat(format); }
- auto fullScreen() -> bool { return instance->fullScreen; }
- auto monitor() -> string { return instance->monitor; }
- auto exclusive() -> bool { return instance->exclusive; }
- auto context() -> uintptr { return instance->context; }
- auto blocking() -> bool { return instance->blocking; }
- auto flush() -> bool { return instance->flush; }
- auto format() -> string { return instance->format; }
- auto shader() -> string { return instance->shader; }
- auto setMonitor(string monitor) -> bool;
- auto setFullScreen(bool fullScreen) -> bool;
- auto setExclusive(bool exclusive) -> bool;
- auto setContext(uintptr context) -> bool;
- auto setBlocking(bool blocking) -> bool;
- auto setFlush(bool flush) -> bool;
- auto setFormat(string format) -> bool;
- auto setShader(string shader) -> bool;
- auto focused() -> bool;
- auto clear() -> void;
- struct Size {
- uint width = 0;
- uint height = 0;
- };
- auto size() -> Size;
- struct Acquire {
- explicit operator bool() const { return data; }
- uint32_t* data = nullptr;
- uint pitch = 0;
- };
- auto acquire(uint width, uint height) -> Acquire;
- auto release() -> void;
- auto output(uint width = 0, uint height = 0) -> void;
- auto poll() -> void;
- auto onUpdate(const function<void (uint, uint)>&) -> void;
- auto doUpdate(uint width, uint height) -> void;
- protected:
- Video& self;
- unique_pointer<VideoDriver> instance;
- function<void (uint, uint)> update;
- };
|