diff options
| author | Vaxry <vaxry@vaxry.net> | 2023-12-04 03:52:54 +0000 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2023-12-04 03:52:54 +0000 |
| commit | 68783d904d850df65887adb1bab7eff59943c1ac (patch) | |
| tree | 8c79712bf5213c1236b3a20f5874854459303f08 /src/protocols/ToplevelExport.cpp | |
| parent | 5d100bdcbbd87bac74935eae6b7d7aed25620323 (diff) | |
screencopy: use buffer format for glReadPixels
fixes #4029
Diffstat (limited to 'src/protocols/ToplevelExport.cpp')
| -rw-r--r-- | src/protocols/ToplevelExport.cpp | 13 |
1 files changed, 6 insertions, 7 deletions
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(); |
