From 02f30ea15b349d1ed98b608ed06ec88c834592dd Mon Sep 17 00:00:00 2001 From: UjinT34 <41110182+UjinT34@users.noreply.github.com> Date: Sat, 7 Mar 2026 21:21:23 +0300 Subject: renderer: refactor gl renderer (#13488) --- src/render/GLRenderer.hpp | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/render/GLRenderer.hpp (limited to 'src/render/GLRenderer.hpp') diff --git a/src/render/GLRenderer.hpp b/src/render/GLRenderer.hpp new file mode 100644 index 00000000..1446e9b2 --- /dev/null +++ b/src/render/GLRenderer.hpp @@ -0,0 +1,52 @@ +#pragma once + +#include "Renderer.hpp" + +class CHyprGLRenderer : public IHyprRenderer { + public: + CHyprGLRenderer(); + + void endRender(const std::function& renderingDoneCallback = {}) 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(); + + private: + void renderOffToMain(IFramebuffer* 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; + + void draw(CBorderPassElement* element, const CRegion& damage) override; + void draw(CClearPassElement* element, const CRegion& damage) override; + void draw(CFramebufferElement* element, const CRegion& damage) override; + void draw(CPreBlurElement* element, const CRegion& damage) override; + void draw(CRectPassElement* element, const CRegion& damage) override; + void draw(CShadowPassElement* element, const CRegion& damage) override; + void draw(CTexPassElement* element, const CRegion& damage) override; + void draw(CTextureMatteElement* element, const CRegion& damage) override; + + SP getBlurTexture(PHLMONITORREF pMonitor) override; + + SP m_currentRenderbuffer = nullptr; + + friend class CHyprOpenGLImpl; +}; -- cgit v1.2.3