#pragma once #include "Renderer.hpp" #include "render/ElementRenderer.hpp" namespace Render::GL { class CHyprGLRenderer : public Render::IHyprRenderer { public: CHyprGLRenderer(); ~CHyprGLRenderer() = default; eType type() override; void endRender(const std::function& renderingDoneCallback = {}) override; UP createSyncFDManager() override; SP createStencilTexture(const int width, const int height) override; SP createTexture(bool opaque = false) override; SP createTexture(uint32_t drmFormat, uint8_t* pixels, uint32_t stride, const Vector2D& size, bool keepDataCopy = false, bool opaque = false) override; SP createTexture(const Aquamarine::SDMABUFAttrs&, bool opaque = false) override; SP createTexture(const int width, const int height, unsigned char* const data) override; SP createTexture(cairo_surface_t* cairo) override; SP createTexture(std::span lut3D, size_t N) override; bool explicitSyncSupported() override; std::vector getDRMFormats() override; std::vector getDRMFormatModifiers(DRMFormat format) override; SP createFB(const std::string& name = "") override; void disableScissor() override; void blend(bool enabled) override; void drawShadow(const CBox& box, int round, float roundingPower, int range, CHyprColor color, float a) override; SP blurFramebuffer(SP source, float a, CRegion* originalDamage) override; void setViewport(int x, int y, int width, int height) override; bool reloadShaders(const std::string& path = "") override; void unsetEGL(); WP elementRenderer() override; private: void renderOffToMain(SP off) override; SP getOrCreateRenderbufferInternal(SP buffer, uint32_t fmt) override; bool beginRenderInternal(PHLMONITOR pMonitor, CRegion& damage, bool simple = false) override; bool beginFullFakeRenderInternal(PHLMONITOR pMonitor, CRegion& damage, SP fb, bool simple = false) override; void initRender() override; bool initRenderBuffer(SP buffer, uint32_t fmt) override; SP getBlurTexture(PHLMONITORREF pMonitor) override; SP m_currentRenderbuffer; UP m_elementRenderer; friend class CHyprOpenGLImpl; }; }