summaryrefslogtreecommitdiff
path: root/src/render/OpenGL.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2024-02-23 01:02:32 +0000
committerVaxry <vaxry@vaxry.net>2024-02-23 01:02:32 +0000
commit8c3613632a6ccebf9fb797ec756ecfce99514eec (patch)
tree6c788a5b79f0dda977b81fddc473b53ff3271b99 /src/render/OpenGL.cpp
parentc1ef361e02e4c4a52fbc5dbd9e67b79e0afab4f3 (diff)
renderer: nuke lastFrameDamage and rework finalDamage
this fucking SUCKED
Diffstat (limited to 'src/render/OpenGL.cpp')
-rw-r--r--src/render/OpenGL.cpp12
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;