<table><tr><td style="">zzag created this revision.<br />zzag added a reviewer: KWin.<br />Herald added a project: KWin.<br />Herald added a subscriber: kwin.<br />zzag requested review of this revision.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D29131">View Revision</a></tr></table><br /><div><strong>REVISION SUMMARY</strong><div><p>No window quads are generated for sub-surfaces right now. This means that<br />
effects that operate on window quads are not able to transform<br />
sub-surfaces. Furthermore, the OpenGL scene needs window quads to clip<br />
windows without using the scissor test.</p>

<p>The best (imho) way to render sub-surfaces would be with some help from a<br />
scene graph. Unfortunately, KDE hasn't developed any scene graph<br />
implementation that we could plug inti kwin and let the scene graph do<br />
its magic. As a short term solution, this patch adjusts relevant parts of<br />
the scene to make it generate window quads for sub-surfaces.</p>

<p>In order to build window quads, we traverse the current window pixmap<br />
tree in DFS manner. When we enter a pixmap, we generate window quads. An<br />
id is assigned to each quad that can be later used to match a list of<br />
window quads against some particular window pixmap.</p>

<p>With the proposed change, no changes to effects are required. Effects see<br />
window quads for sub-surfaces as regular WindowQuadContents quads.</p>

<p>Cross-fading is still kind of broken. In order to cross-fade between two<br />
window pixmap trees, we need to render each tree in a texture, then<br />
cross-fade between those two textures in a shader. Unfortunately, this is<br />
not easy to do with the current design, so I only left a FIXME comment.<br />
Although it should be pretty straightforward with a scene graph.</p>

<p>BUG: 387313</p></div></div><br /><div><strong>TEST PLAN</strong><div><p>Enabled the wobbly windows effect, moved weston-subsurfaces<br />
around on the screen.</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R108 KWin</div></div></div><br /><div><strong>BRANCH</strong><div><div>subsurface-quads</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D29131">https://phabricator.kde.org/D29131</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>CMakeLists.txt<br />
platformsupport/scenes/opengl/abstract_egl_backend.cpp<br />
plugins/scenes/opengl/scene_opengl.cpp<br />
plugins/scenes/opengl/scene_opengl.h<br />
plugins/scenes/qpainter/scene_qpainter.cpp<br />
plugins/scenes/qpainter/scene_qpainter.h<br />
scene.cpp<br />
scene.h<br />
subsurfacemonitor.cpp<br />
subsurfacemonitor.h</div></div></div><br /><div><strong>To: </strong>zzag, KWin<br /><strong>Cc: </strong>kwin, Orage, cacarry, LeGast00n, The-Feren-OS-Dev, cblack, jraleigh, zachus, fbampaloukas, mkulinski, ragreen, jackyalcine, iodelay, crozbo, bwowk, ZrenBot, ngraham, alexeymin, himcesjf, lesliezhai, ali-mohamed, hardening, romangg, jensreuterberg, abetts, sebas, apol, ahiemstra, mart<br /></div>