#pragma once namespace Components { class Renderer : public Component { public: typedef void(Callback)(); typedef void(BackendCallback)(IDirect3DDevice9*); Renderer(); ~Renderer(); #if defined(DEBUG) || defined(FORCE_UNIT_TESTS) const char* getName() override { return "Renderer"; }; #endif static int Width(); static int Height(); static void Once(Utils::Slot callback); static void OnFrame(Utils::Slot callback); static void OnBackendFrame(Utils::Slot callback); static void OnDeviceRecoveryEnd(Utils::Slot callback); static void OnDeviceRecoveryBegin(Utils::Slot callback); private: static void FrameStub(); static void FrameHandler(); static void BackendFrameStub(); static void BackendFrameHandler(); static Utils::Signal FrameSignal; static Utils::Signal FrameOnceSignal; static Utils::Signal EndRecoverDeviceSignal; static Utils::Signal BeginRecoverDeviceSignal; static Utils::Signal BackendFrameSignal; }; }