diff options
Diffstat (limited to 'src/render/OpenGL.cpp')
| -rw-r--r-- | src/render/OpenGL.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index c11fd8c0..1b820779 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -186,7 +186,7 @@ bool CHyprOpenGLImpl::passRequiresIntrospection(CMonitor* pMonitor) { return false; } -void CHyprOpenGLImpl::begin(CMonitor* pMonitor, CRegion* pDamage, CFramebuffer* fb) { +void CHyprOpenGLImpl::begin(CMonitor* pMonitor, const CRegion& damage_, CFramebuffer* fb, std::optional<CRegion> finalDamage) { m_RenderData.pMonitor = pMonitor; #ifndef GLES2 @@ -238,7 +238,8 @@ void CHyprOpenGLImpl::begin(CMonitor* pMonitor, CRegion* pDamage, CFramebuffer* if (m_RenderData.pCurrentMonData->monitorMirrorFB.isAllocated() && m_RenderData.pMonitor->mirrors.empty()) m_RenderData.pCurrentMonData->monitorMirrorFB.release(); - m_RenderData.damage.set(*pDamage); + m_RenderData.damage.set(damage_); + m_RenderData.finalDamage.set(finalDamage.value_or(damage_)); m_bFakeFrame = fb; @@ -284,7 +285,7 @@ void CHyprOpenGLImpl::end() { // end the render, copy the data to the WLR framebuffer if (m_bOffloadedFramebuffer) { - m_RenderData.damage = m_RenderData.pMonitor->lastFrameDamage; + m_RenderData.damage = m_RenderData.finalDamage; m_RenderData.outFB->bind(); @@ -342,6 +343,11 @@ void CHyprOpenGLImpl::end() { RASSERT(false, "glGetError at Opengl::end() returned GL_CONTEXT_LOST. Cannot continue until proper GPU reset handling is implemented."); } +void CHyprOpenGLImpl::setDamage(const CRegion& damage_, std::optional<CRegion> finalDamage) { + m_RenderData.damage.set(damage_); + m_RenderData.finalDamage.set(finalDamage.value_or(damage_)); +} + void CHyprOpenGLImpl::initShaders() { GLuint prog = createProgram(QUADVERTSRC, QUADFRAGSRC); m_RenderData.pCurrentMonData->m_shQUAD.program = prog; |
