renderer: ensure same program is used once

ensure we only call glUseProgram on same program once.
This commit is contained in:
Tom Englund 2025-05-20 14:10:59 +02:00
parent ea02583af6
commit 30087dcda2
2 changed files with 10 additions and 1 deletions

View file

@ -249,6 +249,13 @@ std::optional<std::vector<std::pair<uint64_t, bool>>> CDRMRenderer::getModsForFo
return result;
}
void CDRMRenderer::useProgram(GLuint prog) {
if (m_currentProgram == prog)
return;
GLCALL(glUseProgram(prog));
}
bool CDRMRenderer::initDRMFormats() {
std::vector<EGLint> formats;
@ -1004,7 +1011,7 @@ CDRMRenderer::SBlitResult CDRMRenderer::blit(SP<IBuffer> from, SP<IBuffer> 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));

View file

@ -200,6 +200,8 @@ namespace Aquamarine {
bool initDRMFormats();
std::optional<std::vector<std::pair<uint64_t, bool>>> getModsForFormat(EGLint format);
bool hasModifiers = false;
void useProgram(GLuint prog);
GLuint m_currentProgram = 0;
Hyprutils::Memory::CWeakPointer<CBackend> backend;