<table><tr><td style="">graesslin added inline comments.
</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/D3099" rel="noreferrer">View Revision</a></tr></table><br /><div><strong>INLINE COMMENTS</strong><div><div style="margin: 6px 0 12px 0;"><div style="border: 1px solid #C7CCD9; border-radius: 3px;"><div style="padding: 0; background: #F7F7F7; border-color: #e3e4e8; border-style: solid; border-width: 0 0 1px 0; margin: 0;"><div style="color: #74777d; background: #eff2f4; padding: 6px 8px; overflow: hidden;"><a style="float: right; text-decoration: none;" href="https://phabricator.kde.org/D3099#inline-11988" rel="noreferrer">View Inline</a><span style="color: #4b4d51; font-weight: bold;">broulik</span> wrote in <span style="color: #4b4d51; font-weight: bold;">kwinglutils.cpp:1181</span></div>
<div style="margin: 8px 0; padding: 0 12px; color: #74777D;"><p style="padding: 0; margin: 8px;">I don't understand the maths, why is the "x" the negative virtualScreenGeometry and "y" some formula?</p></div></div>
<div style="margin: 8px 0; padding: 0 12px;"><p style="padding: 0; margin: 8px;">OpenGL has a different coordinate system. The 0/0 is on the bottom left corner unlike our own coordinate system which has 0/0 as the top left.</p>

<p style="padding: 0; margin: 8px;">The virtualScreenGeometry contains the geometry of the output we are currently rendering to in our coordinate system. E.g. two screens:</p>

<ul class="remarkup-list">
<li class="remarkup-list-item">0,0x1920,1080</li>
<li class="remarkup-list-item">1280,0x1280,1024</li>
</ul>

<p style="padding: 0; margin: 8px;">Now we need to map that into the coordinate system of OpenGL which has for the first screen a window of size 1920,1080 and for the second screen a window of 1280,1024 - both windows have the coordinate system start at 0/0 at the bottom left.</p>

<p style="padding: 0; margin: 8px;">What we try to do here is to map the rendering to the OpenGL window. Everything of the first screen needs to end up on the first OpenGL window, everything on the second screen needs to end up on the second OpenGL window. In both cases we need to adjust so that it becomes 0/0 from bottom left corner.</p>

<p style="padding: 0; margin: 8px;">Thus for x we need to take the negative. For the left most screen nothing changes, 0 is 0. For the right screen we need to ensure that 1920 gets mapped to 0. So negative x it is.</p>

<p style="padding: 0; margin: 8px;">Height is similarly adjusted, but is a little bit more complex as it also swaps the coordinate system. Always a mess.</p></div></div></div></div></div><br /><div><strong>REPOSITORY</strong><div><div>rKWIN KWin</div></div></div><br /><div><strong>BRANCH</strong><div><div>render-target-viewport</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D3099" rel="noreferrer">https://phabricator.kde.org/D3099</a></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, KWin, Plasma on Wayland, mart<br /><strong>Cc: </strong>broulik, plasma-devel, kwin, lesliezhai, ali-mohamed, hardening, jensreuterberg, abetts, sebas<br /></div>