diff options
author | Vaxry <[email protected]> | 2023-10-21 14:15:48 +0100 |
---|---|---|
committer | Vaxry <[email protected]> | 2023-10-21 14:15:56 +0100 |
commit | 92311d260ab25c11adab05678663bdccaff11fa6 (patch) | |
tree | d632d8998a979cb8582eede8dcb0d6f6002f19bd /src/render/OpenGL.cpp | |
parent | af72404259f7a39069d1449bedbc49b3e6ae4fbc (diff) | |
download | Hyprland-92311d260ab25c11adab05678663bdccaff11fa6.tar.gz Hyprland-92311d260ab25c11adab05678663bdccaff11fa6.zip |
renderer: add transformers
Diffstat (limited to 'src/render/OpenGL.cpp')
-rw-r--r-- | src/render/OpenGL.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 29574887..705d92a8 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -128,10 +128,12 @@ void CHyprOpenGLImpl::begin(CMonitor* pMonitor, CRegion* pDamage, bool fake) { m_RenderData.pCurrentMonData->primaryFB.m_pStencilTex = &m_RenderData.pCurrentMonData->stencilTex; m_RenderData.pCurrentMonData->mirrorFB.m_pStencilTex = &m_RenderData.pCurrentMonData->stencilTex; m_RenderData.pCurrentMonData->mirrorSwapFB.m_pStencilTex = &m_RenderData.pCurrentMonData->stencilTex; + m_RenderData.pCurrentMonData->offMainFB.m_pStencilTex = &m_RenderData.pCurrentMonData->stencilTex; m_RenderData.pCurrentMonData->primaryFB.alloc(pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y); m_RenderData.pCurrentMonData->mirrorFB.alloc(pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y); m_RenderData.pCurrentMonData->mirrorSwapFB.alloc(pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y); + m_RenderData.pCurrentMonData->offMainFB.alloc(pMonitor->vecPixelSize.x, pMonitor->vecPixelSize.y); createBGTextureForMonitor(pMonitor); } @@ -149,6 +151,8 @@ void CHyprOpenGLImpl::begin(CMonitor* pMonitor, CRegion* pDamage, bool fake) { m_bFakeFrame = fake; + m_RenderData.currentFB = &m_RenderData.pCurrentMonData->primaryFB; + if (m_bReloadScreenShader) { m_bReloadScreenShader = false; applyScreenShader(g_pConfigManager->getString("decoration:screen_shader")); @@ -1892,6 +1896,7 @@ void CHyprOpenGLImpl::destroyMonitorResources(CMonitor* pMonitor) { g_pHyprOpenGL->m_mMonitorRenderResources[pMonitor].mirrorSwapFB.release(); g_pHyprOpenGL->m_mMonitorRenderResources[pMonitor].monitorMirrorFB.release(); g_pHyprOpenGL->m_mMonitorRenderResources[pMonitor].blurFB.release(); + g_pHyprOpenGL->m_mMonitorRenderResources[pMonitor].offMainFB.release(); g_pHyprOpenGL->m_mMonitorRenderResources[pMonitor].stencilTex.destroyTexture(); g_pHyprOpenGL->m_mMonitorBGTextures[pMonitor].destroyTexture(); g_pHyprOpenGL->m_mMonitorRenderResources.erase(pMonitor); @@ -1914,3 +1919,19 @@ void CHyprOpenGLImpl::setMatrixScaleTranslate(const Vector2D& translate, const f void CHyprOpenGLImpl::restoreMatrix() { memcpy(m_RenderData.projection, m_RenderData.savedProjection, 9 * sizeof(float)); } + +void CHyprOpenGLImpl::bindOffMain() { + m_RenderData.pCurrentMonData->offMainFB.bind(); + clear(CColor(0, 0, 0, 0)); + m_RenderData.currentFB = &m_RenderData.pCurrentMonData->offMainFB; +} + +void CHyprOpenGLImpl::renderOffToMain(CFramebuffer* off) { + wlr_box monbox = {0, 0, m_RenderData.pMonitor->vecTransformedSize.x, m_RenderData.pMonitor->vecTransformedSize.y}; + renderTexturePrimitive(off->m_cTex, &monbox); +} + +void CHyprOpenGLImpl::bindBackOnMain() { + m_RenderData.pCurrentMonData->primaryFB.bind(); + m_RenderData.currentFB = &m_RenderData.pCurrentMonData->primaryFB; +} |