screencopy: fix shm exports with 10-bit

fixes #4019
This commit is contained in:
Vaxry 2023-12-01 17:20:56 +00:00
parent 8440a30231
commit 9c09f2a847
7 changed files with 37 additions and 30 deletions

View file

@ -6,13 +6,7 @@ bool CFramebuffer::alloc(int w, int h, uint32_t drmFormat) {
RASSERT((w > 1 && h > 1), "cannot alloc a FB with negative / zero size! (attempted {}x{})", w, h);
uint32_t glFormat = drmFormatToGL(drmFormat);
uint32_t glType = glFormat != GL_RGBA ?
#ifdef GLES2
GL_UNSIGNED_INT_2_10_10_10_REV_EXT :
#else
GL_UNSIGNED_INT_2_10_10_10_REV :
#endif
GL_UNSIGNED_BYTE;
uint32_t glType = glFormatToType(glFormat);
if (m_iFb == (uint32_t)-1) {
firstAlloc = true;

View file

@ -2064,3 +2064,16 @@ void CHyprOpenGLImpl::bindBackOnMain() {
void CHyprOpenGLImpl::setMonitorTransformEnabled(bool enabled) {
m_bEndFrame = !enabled;
}
uint32_t CHyprOpenGLImpl::getPreferredReadFormat(CMonitor* pMonitor) {
if (g_pHyprRenderer->isNvidia())
return DRM_FORMAT_XRGB8888;
if (pMonitor->drmFormat == DRM_FORMAT_XRGB8888)
return DRM_FORMAT_XRGB8888;
if (pMonitor->drmFormat == DRM_FORMAT_XBGR8888)
return DRM_FORMAT_XBGR8888;
if (pMonitor->drmFormat == DRM_FORMAT_XRGB2101010 || pMonitor->drmFormat == DRM_FORMAT_XBGR2101010)
return DRM_FORMAT_XBGR2101010;
return DRM_FORMAT_INVALID;
}

View file

@ -158,6 +158,8 @@ class CHyprOpenGLImpl {
void renderOffToMain(CFramebuffer* off);
void bindBackOnMain();
uint32_t getPreferredReadFormat(CMonitor* pMonitor);
SCurrentRenderData m_RenderData;
GLint m_iCurrentOutputFb = 0;