<table><tr><td style="">graesslin created this revision.<br />Restricted Application added a project: KWin.<br />Restricted Application added subscribers: kwin, plasma-devel.
</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/D6396" rel="noreferrer">View Revision</a></tr></table><br /><div><strong>REVISION SUMMARY</strong><div><p>The current way to specify the OpenGL context attributes does no longer<br />
scale as can be seen in <a href="https://phabricator.kde.org/D6344" style="background-color: #e7e7e7;
          border-color: #e7e7e7;
          border-radius: 3px;
          padding: 0 4px;
          font-weight: bold;
          color: black;text-decoration: none;" rel="noreferrer">D6344</a>. There are too many different context<br />
attribute sets and with every addition we grow lots of copied code. The<br />
chances to introduce errors in that code which is difficult to debug are<br />
very high. As can be seen in the glx backend which defines major 1,<br />
minor 2, but it should be major 2, minor 1.</p>

<p>This change reworks this code by creating a builder class which contains<br />
only an abstract definition of what needs to be in the attributes.<br />
E.g. the version, whether it's robust and so on.</p>

<p>Now we can just have a list of possible attributes in a well described<br />
way:</p>

<div class="remarkup-code-block" style="margin: 12px 0;" data-code-lang="text" data-sigil="remarkup-code-block"><pre class="remarkup-code" style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; padding: 12px; margin: 0; background: rgba(71, 87, 120, 0.08);">auto builder;
builder.setVersion(3, 1);
builder.setRobust(true);</pre></div>

<p>All possible builders are added to a list and operated on in a for loop<br />
which tries to creat a context. Once it succeeded it breaks the list.<br />
In addition a debug statement is added which prints out the set of<br />
options which went into the context.</p>

<p>So far this is only done for EGL, GLX can follow once <a href="https://phabricator.kde.org/D6344" style="background-color: #e7e7e7;
          border-color: #e7e7e7;
          border-radius: 3px;
          padding: 0 4px;
          font-weight: bold;
          color: black;text-decoration: none;" rel="noreferrer">D6344</a> is merged.</p></div></div><br /><div><strong>TEST PLAN</strong><div><p>New unit test added, kwin_wayland OpenGL tests run and verified</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R108 KWin</div></div></div><br /><div><strong>BRANCH</strong><div><div>context-attribute-builder</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D6396" rel="noreferrer">https://phabricator.kde.org/D6396</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>CMakeLists.txt<br />
abstract_egl_backend.cpp<br />
abstract_opengl_context_attribute_builder.cpp<br />
abstract_opengl_context_attribute_builder.h<br />
autotests/CMakeLists.txt<br />
autotests/opengl_context_attribute_builder_test.cpp<br />
egl_context_attribute_builder.cpp<br />
egl_context_attribute_builder.h</div></div></div><br /><div><strong>To: </strong>graesslin, KWin, Plasma<br /><strong>Cc: </strong>plasma-devel, kwin, ZrenBot, progwolff, lesliezhai, ali-mohamed, hardening, jensreuterberg, abetts, sebas, apol, mart, lukas<br /></div>