<div>graesslin created this revision.<br />
graesslin added a reviewer: Plasma.<br />
Herald added a project: Plasma.<br />
Herald added a subscriber: plasma-devel.</div><br /><div><strong>REVISION SUMMARY</strong><div><p>A sub-surface changed in a way which needs a repaint. Of course only<br />
if the surface is mapped.</p>

<p>Make Scene::Window::window() and WindowPixmap::toplevel() const</p>

<p>No need to have them not const.</p>

<p>Add support for SubSurface to WindowPixmap</p>

<p>This change introduces a tree for WindowPixmap. A WindowPixmap can<br />
have a parent WindowPixmap and children. Each child represents a<br />
SubSurface and references the buffer of that SubSurface.</p>

<p>The tree of WindowPixmaps is updated each time updateBuffer is called.<br />
If there are new SubSurfaces new WindowPixmaps are created, for removed<br />
SubSurfaces the old WindowPixmap gets removed. Also the ordering is<br />
updated to reflect the current state.</p>

<p>This is currently rather expensive and should be changed to only rebuild<br />
the tree if it actually changed.</p>

<p>Add a SurfaceInterface *WindowPixmap::surface() const</p>

<p>Convenience method to get the Surface for a WindowPixmap which is either<br />
the toplevel's surface or a SubSurface.</p>

<p>Use new surface() method in WindowPixmap::updateBuffer</p>

<p>Render child WindowPixmap in SceneQPainter</p>

<p>The rendering is done in a recursive way. For updating the buffer an<br />
important change is done: the buffer is copied into a new QImage on each<br />
change and the differences are no longer painted. This is due to damage<br />
region in a sub-surface tree being basically unknown.</p>

<p>Create sub OpenGLWindowPixmap for sub-surfaces</p>

<p>Properly update EGL Texture for sub-surface buffers</p>

<p>We need to use the tracked damage instead of Toplevel's damage.</p>

<p>Render sub-surfaces in OpenGL compositor</p>

<p>This is more a hack than an actual implementation. It just renders<br />
all sub-surfaces after the main window got rendered. But it does not:</p>

<ul class="remarkup-list">
<li class="remarkup-list-item">use window quads (e.g. splitting not supported)</li>
<li class="remarkup-list-item">is not combined with rendering of the main surface</li>
<li class="remarkup-list-item">does not support previous pixmap</li>
</ul>

<p>Still it renders, which is the main goal at the moment.</p>

<p>Announce support for subcompositor protocol</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>rKWIN KWin</div></div></div><br /><div><strong>BRANCH</strong><div><div>subcompositor-arc</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D1282" rel="noreferrer">https://phabricator.kde.org/D1282</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>abstract_egl_backend.cpp<br />
scene.cpp<br />
scene.h<br />
scene_opengl.cpp<br />
scene_opengl.h<br />
scene_qpainter.cpp<br />
scene_qpainter.h<br />
toplevel.cpp<br />
wayland_server.cpp</div></div></div><br /><div><strong>EMAIL PREFERENCES</strong><div><a href="https://phabricator.kde.org/settings/panel/emailpreferences/" rel="noreferrer">https://phabricator.kde.org/settings/panel/emailpreferences/</a></div></div><br /><div><strong>To: </strong>graesslin, Plasma<br /><strong>Cc: </strong>plasma-devel, sebas<br /></div>