[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-panel-devel
Subject: [Differential] [Request, 299 lines] D1282: Consider change in sub-surface tree as a full damage
From: graesslin_(Martin_Gräßlin) <noreply () phabricator ! kde ! or
Date: 2016-04-01 8:10:35
Message-ID: differential-rev-PHID-DREV-ayhaqd5l3kihm4rfkkdc-req () phabricator ! kde ! org
[Download RAW message or body]
[Attachment #2 (multipart/alternative)]
graesslin created this revision.
graesslin added a reviewer: Plasma.
Herald added a project: Plasma.
Herald added a subscriber: plasma-devel.
REVISION SUMMARY
A sub-surface changed in a way which needs a repaint. Of course only
if the surface is mapped.
Make Scene::Window::window() and WindowPixmap::toplevel() const
No need to have them not const.
Add support for SubSurface to WindowPixmap
This change introduces a tree for WindowPixmap. A WindowPixmap can
have a parent WindowPixmap and children. Each child represents a
SubSurface and references the buffer of that SubSurface.
The tree of WindowPixmaps is updated each time updateBuffer is called.
If there are new SubSurfaces new WindowPixmaps are created, for removed
SubSurfaces the old WindowPixmap gets removed. Also the ordering is
updated to reflect the current state.
This is currently rather expensive and should be changed to only rebuild
the tree if it actually changed.
Add a SurfaceInterface *WindowPixmap::surface() const
Convenience method to get the Surface for a WindowPixmap which is either
the toplevel's surface or a SubSurface.
Use new surface() method in WindowPixmap::updateBuffer
Render child WindowPixmap in SceneQPainter
The rendering is done in a recursive way. For updating the buffer an
important change is done: the buffer is copied into a new QImage on each
change and the differences are no longer painted. This is due to damage
region in a sub-surface tree being basically unknown.
Create sub OpenGLWindowPixmap for sub-surfaces
Properly update EGL Texture for sub-surface buffers
We need to use the tracked damage instead of Toplevel's damage.
Render sub-surfaces in OpenGL compositor
This is more a hack than an actual implementation. It just renders
all sub-surfaces after the main window got rendered. But it does not:
- use window quads (e.g. splitting not supported)
- is not combined with rendering of the main surface
- does not support previous pixmap
Still it renders, which is the main goal at the moment.
Announce support for subcompositor protocol
REPOSITORY
rKWIN KWin
BRANCH
subcompositor-arc
REVISION DETAIL
https://phabricator.kde.org/D1282
AFFECTED FILES
abstract_egl_backend.cpp
scene.cpp
scene.h
scene_opengl.cpp
scene_opengl.h
scene_qpainter.cpp
scene_qpainter.h
toplevel.cpp
wayland_server.cpp
EMAIL PREFERENCES
https://phabricator.kde.org/settings/panel/emailpreferences/
To: graesslin, Plasma
Cc: plasma-devel, sebas
[Attachment #5 (text/html)]
<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>
[Attachment #6 (text/plain)]
_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic