#pragma once #include "Monitor.hpp" #include "Format.hpp" #include "time/Timer.hpp" #include "../render/Framebuffer.hpp" #include #include namespace Monitor { class CMonitorResources { public: CMonitorResources(WP monitor, DRMFormat format, Vector2D size, NColorManagement::PImageDescription imageDescription); SP getUnusedWorkBuffer(); void forEachUnusedFB(std::function)> callback, bool includeNamed = false); bool hasMirrorFB(); void enableMirror(); void disableMirror(); SP mirrorFB(); SP getMirrorTexture(); SP m_mirrorTex; SP m_stencilTex; // TODO fix blur ignore alpha and remove SP m_blurFB; private: void initFB(SP fb); void setImageDescription(NColorManagement::PImageDescription imageDescription); NColorManagement::PImageDescription getMirrorTexImageDescription(); struct SResource { SP buffer; CTimer lastUsed; }; SP m_monitorMirrorFB; WP m_monitor; DRMFormat m_drmFormat; Vector2D m_size; NColorManagement::PImageDescription m_imageDescription; std::vector m_workBuffers; friend class ::CMonitor; }; }