On Wed, 4 Mar 2026 01:32:26 GMT, Sergey Bylokhov <[email protected]> wrote:
>> The OGL pipeline on Linux passes raw X11 window id to GLX. This is allowed >> by the spec but is a deprecated compatibility path. Mesa has a >> [bug](https://gitlab.freedesktop.org/mesa/mesa/-/issues/1001) where >> glXMakeContextCurrent() drops the buffers of the previously bound drawable >> when switching to a different window, corrupting its content. >> >> The fix creates GLXWindow objects via glXCreateWindow() and uses them >> instead of raw window id for all GLX calls. The question is where to store >> the GLXWindow. It could be stored in the java in XWindow and passed around, >> but that would pollute "shared xawt code" with OGL specific state even when >> OGL is not enabled. Instead, the GLXWindow is managed entirely on the native >> OGL side using a map keyed by the X window id. This keeps one GLXWindow per >> X window, creates it only when GLX surfaces are actually used, and uses >> reference counting so it is destroyed when the last surface releases it. >> >> Also fixes [JDK-8369561](https://bugs.openjdk.org/browse/JDK-8369561) — >> wrong pixel colors in DrawBitmaskImage on Linux, same root cause. >> >> Two tests added: >> - MultiWindowFillTest — reproduces the bug: paints two windows different >> colors, switches context between them, verifies the first window's content >> survives >> - FlipCoexistTest — verifies that direct rendering and flip BufferStrategy >> coexist on the same window. This test will fail if the implementation >> creates a separate GLXWindow per Java OGL surface instead of sharing one per >> X window > > Sergey Bylokhov has updated the pull request incrementally with one > additional commit since the last revision: > > Review feedback Marked as reviewed by prr (Reviewer). ------------- PR Review: https://git.openjdk.org/jdk/pull/29886#pullrequestreview-3892360744
