diff options
| author | Tom Englund <tomenglund26@gmail.com> | 2025-07-03 12:37:33 +0200 |
|---|---|---|
| committer | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2025-07-07 18:09:34 +0200 |
| commit | ceec1943ffad717ff99cd72c60922738e318a445 (patch) | |
| tree | a886641d8473b37e3d2156d14677308a13c8cabc /src/protocols/core/Compositor.cpp | |
| parent | 83c453cb82de4fd2a653cb9bf3863d6387e5e612 (diff) | |
compositor: dont send around int max values
we know the buffersize use it instead of int max values that can
potentially cause math issues and slowdowns. minor improvement to
glmark2 aswell.
Diffstat (limited to 'src/protocols/core/Compositor.cpp')
| -rw-r--r-- | src/protocols/core/Compositor.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp index 371da093..9f3a5407 100644 --- a/src/protocols/core/Compositor.cpp +++ b/src/protocols/core/Compositor.cpp @@ -96,7 +96,7 @@ CWLSurfaceResource::CWLSurfaceResource(SP<CWlSurface> resource_) : m_resource(re if (m_pending.bufferSize != m_current.bufferSize) { m_pending.updated.bits.damage = true; - m_pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_pending.bufferDamage = CBox{{}, m_pending.bufferSize}; } }); @@ -175,7 +175,12 @@ CWLSurfaceResource::CWLSurfaceResource(SP<CWlSurface> resource_) : m_resource(re }); m_resource->setDamageBuffer([this](CWlSurface* r, int32_t x, int32_t y, int32_t w, int32_t h) { m_pending.updated.bits.damage = true; - m_pending.bufferDamage.add(CBox{x, y, w, h}); + const auto damageSize = Vector2D(w, h); + + if (damageSize > m_pending.bufferSize) + m_pending.bufferDamage.add(CBox{{x, y}, m_pending.bufferSize}); + else + m_pending.bufferDamage.add(CBox{{x, y}, damageSize}); }); m_resource->setSetBufferScale([this](CWlSurface* r, int32_t scale) { @@ -186,7 +191,7 @@ CWLSurfaceResource::CWLSurfaceResource(SP<CWlSurface> resource_) : m_resource(re m_pending.updated.bits.damage = true; m_pending.scale = scale; - m_pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_pending.bufferDamage = CBox{{}, m_pending.bufferSize}; }); m_resource->setSetBufferTransform([this](CWlSurface* r, uint32_t tr) { @@ -197,14 +202,14 @@ CWLSurfaceResource::CWLSurfaceResource(SP<CWlSurface> resource_) : m_resource(re m_pending.updated.bits.damage = true; m_pending.transform = (wl_output_transform)tr; - m_pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_pending.bufferDamage = CBox{{}, m_pending.bufferSize}; }); m_resource->setSetInputRegion([this](CWlSurface* r, wl_resource* region) { m_pending.updated.bits.input = true; if (!region) { - m_pending.input = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_pending.input = CBox{{}, m_pending.bufferSize}; return; } @@ -437,8 +442,8 @@ void CWLSurfaceResource::map() { frame(Time::steadyNow()); - m_current.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; - m_pending.bufferDamage = CBox{{}, {INT32_MAX, INT32_MAX}}; + m_current.bufferDamage = CBox{{}, m_current.bufferSize}; + m_pending.bufferDamage = CBox{{}, m_pending.bufferSize}; } void CWLSurfaceResource::unmap() { |
