diff --git a/src/backend/drm/Renderer.cpp b/src/backend/drm/Renderer.cpp index 934ef04..73e619d 100644 --- a/src/backend/drm/Renderer.cpp +++ b/src/backend/drm/Renderer.cpp @@ -249,6 +249,13 @@ std::optional>> CDRMRenderer::getModsForFo return result; } +void CDRMRenderer::useProgram(GLuint prog) { + if (m_currentProgram == prog) + return; + + GLCALL(glUseProgram(prog)); +} + bool CDRMRenderer::initDRMFormats() { std::vector formats; @@ -1004,7 +1011,7 @@ CDRMRenderer::SBlitResult CDRMRenderer::blit(SP from, SP to, S if (!intermediateBuf.empty()) GLCALL(glTexImage2D(fromTex.target, 0, PIXEL_BUFFER_FORMAT, fromDma.size.x, fromDma.size.y, 0, PIXEL_BUFFER_FORMAT, GL_UNSIGNED_BYTE, intermediateBuf.data())); - GLCALL(glUseProgram(SHADER.program)); + useProgram(SHADER.program); GLCALL(glDisable(GL_BLEND)); GLCALL(glDisable(GL_SCISSOR_TEST)); diff --git a/src/backend/drm/Renderer.hpp b/src/backend/drm/Renderer.hpp index 928f2b7..afff3d9 100644 --- a/src/backend/drm/Renderer.hpp +++ b/src/backend/drm/Renderer.hpp @@ -200,6 +200,8 @@ namespace Aquamarine { bool initDRMFormats(); std::optional>> getModsForFormat(EGLint format); bool hasModifiers = false; + void useProgram(GLuint prog); + GLuint m_currentProgram = 0; Hyprutils::Memory::CWeakPointer backend;