On Mon, 23 Feb 2026 19:24:34 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 This pull request has now been integrated. Changeset: e24a8f06 Author: Sergey Bylokhov <[email protected]> URL: https://git.openjdk.org/jdk/commit/e24a8f06e30a0889b1fb5689ac3d4180f90d25d4 Stats: 353 lines in 4 files changed: 348 ins; 1 del; 4 mod 8378201: [OGL] glXMakeContextCurrent() drops the buffers of the unbound drawable 8369561: sun/java2d/OpenGL/DrawBitmaskImage.java#id0: Incorrect color for first pixel (actual=ff000000) Reviewed-by: prr, aivanov ------------- PR: https://git.openjdk.org/jdk/pull/29886
