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

Reply via email to