Xpra: Ticket #2466: GTK3 OpenGL win32 window is transparent

Like it's not getting painted at all.

Tried 2.5.3 and 3.0.x on a win7 system with a Quadro M4000.

The code was originally added in r16993 + r16964, see ticket:1569#comment:5.

See also:



Tue, 29 Oct 2019 12:12:58 GMT - Antoine Martin: status, description changed


Tue, 29 Oct 2019 13:25:54 GMT - Antoine Martin:

Using v3.0.1-r24295, and just showing an xterm:


Wed, 30 Oct 2019 15:31:34 GMT - Antoine Martin: attachment set

try to use Gtk.GLArea


Wed, 30 Oct 2019 15:38:01 GMT - Antoine Martin: priority changed

Turns out that we may be able to use GTK Bug 756142 - Bring back support for legacy OpenGL contexts using the undocumented env var GDK_GL=legacy. (patch hooks the widget)

As per gdkglcontext-win32.c: OpenGL does not work with WS_EX_LAYERED enabled, so we need to disable WS_EX_LAYERED when we acquire a valid HGLRC I've tried doing the same thing in the window style fixup code (removing WS_EX_LAYERED), but that did not help.


Thu, 31 Oct 2019 08:15:35 GMT - Antoine Martin:

This may help if we have to use gtk.glarea: #2467 move to opengl core profile


Sat, 02 Nov 2019 11:13:48 GMT - Antoine Martin:

As per #2469, this also seems to affect some linux drivers.


Sun, 03 Nov 2019 15:04:38 GMT - Antoine Martin: status changed; resolution set

Easy fix in r24350 + r24351 + r24353, with older versions use:

XPRA_OPENGL_DRAW_REFRESH=1 ./Xpra_cmd.exe attach ...

Backport in r24352.


Sun, 03 Nov 2019 16:12:51 GMT - Antoine Martin: status changed; resolution deleted

The fix is incorrect, it ends up disabling opengl because this now triggers a rendering error:

Error presenting FBO
Traceback (most recent call last):
  File "E:\Xpra\trunk\src/xpra/client/gl/gl_window_backing_base.py", line 666, in present_fbo
    self.do_present_fbo()
  File "E:\Xpra\trunk\src/xpra/client/gl/gl_window_backing_base.py", line 691, in do_present_fbo
    glBindFramebuffer(GL_FRAMEBUFFER, 0)
  File "E:\Xpra\trunk\src\dist\lib\library.zip\OpenGL\error.py", line 223, in glCheckError
    raise GLError(
OpenGL.error.GLError: GLError(
        err = 1282,
        description = b'invalid operation',
        baseOperation = glBindFramebuffer,
        cArguments = (GL_FRAMEBUFFER, 0)
)
EndPaint

Mon, 04 Nov 2019 08:40:58 GMT - Antoine Martin:

The rendering error is fixed in r24365, but the window remains transparent..


Mon, 04 Nov 2019 12:13:00 GMT - Antoine Martin:

"Fix" for now is to disable opengl on win32: r24369 + r24371.

Backport in r24374.

See also #2243 and r23305, maybe #2457 is related somehow?


Thu, 07 Nov 2019 15:11:34 GMT - Antoine Martin: status changed; resolution set

Indeed, #2457 and #2475 were related and r24405 fixes all 3 bugs.

So r24405 partially reverts r24369 and r24371: we just keep the opengl variable substitution in the config file. v3.x revert in r24406.


Sun, 17 Nov 2019 03:49:26 GMT - Antoine Martin:

XPRA_OPENGL_DRAW_REFRESH=1 seems to have caused a performance regression: #2481


Mon, 06 Jan 2020 19:52:17 GMT - alas: attachment set

Long client logs with -d opengl, including launch of chromium-browser from xterm.


Mon, 06 Jan 2020 19:52:58 GMT - alas: attachment set

Short client logs with -d opengl, connecting to session with chromium-browser already launched.


Mon, 06 Jan 2020 19:53:32 GMT - alas: attachment set

Very short client logs with -d opengl, but oengl=off.


Mon, 06 Jan 2020 20:01:51 GMT - alas: status changed; resolution deleted

I guess I'm reopening this ticket.

With Xpra-Python3_Setup_3.0.4-r24778.exe (on windows 7) launched against Fedora 30 server with xpra v3.0.4-r24778 (I don't see a r24903 or later server version, mentioned in #1797, or client version available with dnf update on stable or pulling from /dists directory) with my new-usual server launch command of:

 xpra start :13 --no-daemon --bind-tcp=0.0.0.0:1234 --bind-ws=0.0.0.0:1237 --bind-wss=0.0.0.0:1239 --ssl-cert=/etc/xpra/148-ssl.pem  --start-child=xterm --start-child=xterm --exit-with-children

When the python client connects with opengl enabled, I am unable to display a chromium-browser launched from an xterm... though I am able to display firefox.

Attached new log.txt with a long list of client-side logs with -d opengl... which started with initial launch of session and then all the time it took to launch the chromium-browser in one of the xterms (which didn't display).

Attached log2.txt which is shorter, client-side logs from simply re-connecting to the same session with that chromium-browser application already running (which doesn't display) and then disconnecting within a second or three.

And, just for comparison, included opengl-off-log.txt capturing the logs with opengl disabled - which unsurprisingly results in a very short bit of logs, but seemed like it ought to be included just for completeness?


Mon, 06 Jan 2020 20:31:14 GMT - Antoine Martin: owner, status changed

Happening again with a chromium window, but not the xterm. (just like #2514 - maybe should have gone there?)

Key elements from the logs:

OpenGL enabled with Intel(R) HD Graphics 530

Intel driver, we meet again.

Desktop-scaling is triggered by the large desktop size:

desktop size is 5760x2160 with 1 screen:
  Default (1524x571 mm - DPI: 96x96)
    Lenovo Wide viewing angle & High density FlexView Display 1920x1080 1920x1080 at 3840x1080 (344x194 mm - DPI: 141x141) workarea: 1920x1040
    (Standard monitor types) DELL UP3214Q 3840x2160 (698x392 mm - DPI: 139x139) workarea: 3840x2160
 upscaled to 125%, virtual screen size: 4608x1728
  Default (1524x571 mm - DPI: 76x76)
    Lenovo Wide viewing angle & High density FlexView Display 1920x1080 1536x864 at 3072x864 (344x194 mm - DPI: 113x113) workarea: 1536x832
    (Standard monitor types) DELL UP3214Q 3072x1728 (698x392 mm - DPI: 111x111) workarea: 3072x1728

The xterm window which does show up:

Initializing GL context for window size (624, 395), backing size (499, 316), max texture size=16384

I am guessing that the chromium window must be this one:

Initializing GL context for window size (1313, 853), backing size (1050, 682), max texture size=16384

Lots of h264 screen updates quite early on, but nothing unexpected otherwise.


@afarr: Looks to me like r24727 isn't doing what it is supposed to. As per ticket:2514#comment:8: GTK3 is just buggy on win32 with undecorated windows, we are not supposed to use opengl on win32 with GTK3 if the window is not decorated. (I believe your chromium window draws its own decorations and does not use the default window manager decorations) Yet, from the logs, opengl seems to be used to try to draw it. Weird.

The only other possibility is some bad interaction between desktop-scaling and r24441 / r24483, does the problem go away if you turn it off? (either using --desktop-scaling=no or using the system tray menu).

If not, please post the -d window log of just when chromium is launched.


Mon, 06 Jan 2020 20:55:51 GMT - alas:

Using the same versions, when I launch the client with --desktop-scaling=no the chromium-browser still fails to display when launched (with greylisted but on opengl).

Got this from the -d window in client-side logs when launching the chromium-browser.

2020-01-06 12:50:52,119 make_new_window(..) client_window_classes=(<class 'xpra.client.gl.gtk3.nativegl_client_window.GLClientWindow'>, <class 'xpra.client.gtk3.client_window.ClientWindow'>), group_leader_window=<__gi__.GdkWin32Window object at 0x000000003c18dc80 (GdkWin32Window at 0x0000000003004960)>
2020-01-06 12:50:52,120 <class 'xpra.client.gl.gtk3.nativegl_client_window.GLClientWindow'>(gtk3.client, <__gi__.GdkWin32Window object at 0x000000003c18dc80 (GdkWin32Window at 0x0000000003004960)>, 0, 4, 395, 1030, 1050, 682, 1050, 682, {b'xid': b'0xc00001', b'client-machine': b'xpra-lib-fed30-2', b'pid': 13942, b'title': b'New Tab - Chromium', b'role': b'browser', b'class-instance': (b'chromium-browser', b'Chromium-browser'), b'window-type': (b'NORMAL',), b'size-constraints': {b'position': (395, 1030), b'minimum-size': (508, 87)}, b'
icon-title': b'', b'decorations': 0, b'set-initial-position': True, b'iconic': False}, False, {}, WindowBorder(False, 0xD41D8C, 0.6, 5), (32767, 32767), [4096, 2048, 16, 16, 7, 7, 1, b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xf
f\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xf
f\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xf
f\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0
0\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x0
0\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xf
f\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xf
f\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff', b''], 0)
2020-01-06 12:50:52,135 setup_window(1050, 682)
2020-01-06 12:50:52,137 new_backing(1050, 682) backing_class=<class 'xpra.client.gl.gtk_base.gl_drawing_area.GLDrawingArea'>
2020-01-06 12:50:52,138 make_new_backing(<class 'xpra.client.gl.gtk_base.gl_drawing_area.GLDrawingArea'>, 1050, 682, 1050, 682) effective backing class=<class 'xpra.client.gl.gtk_b
ase.gl_drawing_area.GLDrawingArea'>, server alpha=False, window alpha=False
2020-01-06 12:50:52,140 set_window_type(['NORMAL']) hints=0
2020-01-06 12:50:52,141 make_new_window(..) window(4)=GLClientWindow(4 : gtk3.GLDrawingArea(4, (1050, 682), None))
2020-01-06 12:50:52,147 Win32Hooks: window frame size is 8x8
2020-01-06 12:50:52,148 Win32Hooks: message_map={36: <bound method Win32Hooks.on_getminmaxinfo of <xpra.platform.win32.window_hooks.Win32Hooks object at 0x000000003ae24640>>}
2020-01-06 12:50:52,155 GL do_configure_event(<Gdk.EventConfigure object at 0x000000003c18b950 (void at 0x000000001b394510)>)
2020-01-06 12:50:52,158 GLClientWindow(4 : gtk3.GLDrawingArea(4, (1050, 682), None)).do_map_event(<Gdk.EventAny object at 0x000000003ae254f0 (void at 0x000000001b394b50)>) OR=False
2020-01-06 12:50:52,160 GL do_configure_event(<Gdk.EventConfigure object at 0x000000003ae254f0 (void at 0x000000001b394bf0)>)
2020-01-06 12:50:52,229 cairo_paint_border(<cairo.Context object at 0x000000003c189830>, None)
2020-01-06 12:50:52,242 cairo_paint_border(<cairo.Context object at 0x000000003c189910>, None)
2020-01-06 12:50:52,246 cairo_paint_border(<cairo.Context object at 0x000000003ae13f10>, None)
2020-01-06 12:50:52,265 cairo_paint_border(<cairo.Context object at 0x000000003c1899f0>, None)
2020-01-06 12:50:52,267 cairo_paint_border(<cairo.Context object at 0x000000003c189470>, None)
2020-01-06 12:50:52,282 cairo_paint_border(<cairo.Context object at 0x000000003c189c50>, None)
2020-01-06 12:50:52,284 cairo_paint_border(<cairo.Context object at 0x000000003c189070>, None)
2020-01-06 12:50:52,294 cairo_paint_border(<cairo.Context object at 0x000000003c189750>, None)
2020-01-06 12:50:52,296 cairo_paint_border(<cairo.Context object at 0x000000003ae13e10>, None)
2020-01-06 12:50:52,308 cairo_paint_border(<cairo.Context object at 0x000000003ae13e10>, None)
2020-01-06 12:50:52,310 cairo_paint_border(<cairo.Context object at 0x000000003ae13e50>, None)
2020-01-06 12:50:52,325 cairo_paint_border(<cairo.Context object at 0x000000003c189830>, None)
2020-01-06 12:50:52,327 cairo_paint_border(<cairo.Context object at 0x000000003ae13e10>, None)
2020-01-06 12:50:52,342 cairo_paint_border(<cairo.Context object at 0x000000003c189090>, None)
2020-01-06 12:50:52,345 cairo_paint_border(<cairo.Context object at 0x000000003ae13e50>, None)
2020-01-06 12:50:52,359 cairo_paint_border(<cairo.Context object at 0x000000003ae13f10>, None)
2020-01-06 12:50:52,361 cairo_paint_border(<cairo.Context object at 0x000000003ae13e10>, None)
2020-01-06 12:50:52,376 cairo_paint_border(<cairo.Context object at 0x000000003c189c50>, None)
2020-01-06 12:50:52,378 cairo_paint_border(<cairo.Context object at 0x000000003ae13e50>, None)
2020-01-06 12:50:52,392 cairo_paint_border(<cairo.Context object at 0x000000003c189750>, None)
2020-01-06 12:50:52,394 cairo_paint_border(<cairo.Context object at 0x000000003ae13e50>, None)
2020-01-06 12:50:52,408 cairo_paint_border(<cairo.Context object at 0x000000003c189cb0>, None)
2020-01-06 12:50:52,410 cairo_paint_border(<cairo.Context object at 0x000000003ae13e50>, None)
2020-01-06 12:50:52,425 cairo_paint_border(<cairo.Context object at 0x000000003c189050>, None)
2020-01-06 12:50:52,427 cairo_paint_border(<cairo.Context object at 0x000000003ae13a30>, None)
2020-01-06 12:50:52,443 cairo_paint_border(<cairo.Context object at 0x000000003c189970>, None)
2020-01-06 12:50:52,446 cairo_paint_border(<cairo.Context object at 0x000000003ae13e50>, None)
2020-01-06 12:50:57,270 cairo_paint_border(<cairo.Context object at 0x000000003c18fc70>, None)
2020-01-06 12:50:57,287 cairo_paint_border(<cairo.Context object at 0x000000003c18f530>, None)
2020-01-06 12:50:57,304 cairo_paint_border(<cairo.Context object at 0x000000003c18ffd0>, None)
2020-01-06 12:50:57,322 cairo_paint_border(<cairo.Context object at 0x000000003c18f730>, None)
2020-01-06 12:50:57,338 cairo_paint_border(<cairo.Context object at 0x000000003c18fc90>, None)
2020-01-06 12:50:57,353 cairo_paint_border(<cairo.Context object at 0x000000003c18fc90>, None)
2020-01-06 12:50:57,370 cairo_paint_border(<cairo.Context object at 0x000000003c18fc90>, None)
2020-01-06 12:50:57,387 cairo_paint_border(<cairo.Context object at 0x000000003c18feb0>, None)
2020-01-06 12:50:57,403 cairo_paint_border(<cairo.Context object at 0x000000003c18fb70>, None)
2020-01-06 12:50:57,420 cairo_paint_border(<cairo.Context object at 0x000000003c18fb50>, None)
2020-01-06 12:50:57,437 cairo_paint_border(<cairo.Context object at 0x000000003c18ffd0>, None)
2020-01-06 12:50:57,454 cairo_paint_border(<cairo.Context object at 0x000000003c18fdf0>, None)
2020-01-06 12:50:57,470 cairo_paint_border(<cairo.Context object at 0x000000003c18f9d0>, None)

Tue, 07 Jan 2020 09:49:17 GMT - Antoine Martin: status changed; resolution set

Thanks for the logs afarr!

It was a patch problem: ticket:2514#comment:12.


Sat, 23 Jan 2021 05:52:01 GMT - migration script:

this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/2466