From 68783d904d850df65887adb1bab7eff59943c1ac Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 4 Dec 2023 03:52:54 +0000 Subject: screencopy: use buffer format for glReadPixels fixes #4029 --- src/protocols/ToplevelExport.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'src/protocols/ToplevelExport.cpp') diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp index 6a001c02..dabad2ab 100644 --- a/src/protocols/ToplevelExport.cpp +++ b/src/protocols/ToplevelExport.cpp @@ -387,19 +387,18 @@ bool CToplevelExportProtocolManager::copyFrameShm(SScreencopyFrame* frame, times if (frame->overlayCursor) g_pHyprRenderer->renderSoftwareCursors(PMONITOR, fakeDamage, g_pInputManager->getMouseCoordsInternal() - frame->pWindow->m_vRealPosition.vec()); - GLint glf, glt; - glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT, &glf); - glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE, &glt); - if (glf == 0 || glt == 0) { - glf = drmFormatToGL(frame->pMonitor->drmFormat); - glt = glFormatToType(glf); + const auto PFORMAT = g_pHyprOpenGL->getPixelFormatFromDRM(format); + if (!PFORMAT) { + g_pHyprRenderer->endRender(); + wlr_buffer_end_data_ptr_access(frame->buffer); + return false; } g_pHyprOpenGL->m_RenderData.mainFB->bind(); glPixelStorei(GL_PACK_ALIGNMENT, 1); - glReadPixels(0, 0, frame->box.width, frame->box.height, glf, glt, data); + glReadPixels(0, 0, frame->box.width, frame->box.height, PFORMAT->glFormat, PFORMAT->glType, data); g_pHyprRenderer->endRender(); -- cgit v1.2.3