Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

macos opengl paint error #2491

Closed
totaam opened this issue Nov 22, 2019 · 11 comments
Closed

macos opengl paint error #2491

totaam opened this issue Nov 22, 2019 · 11 comments
Labels

Comments

@totaam
Copy link
Collaborator

totaam commented Nov 22, 2019

Was just running xpra keyboard-test trying to reproduce #2480.

client   1 @25.820 Error painting planar update
client   1 @25.820   File "/Users/osx/Desktop/Xpra.app/Contents/Resources/lib/python/xpra/client/gl/gl_window_backing_base.py", line 1113, in gl_paint_planar
client   1 @25.820     self.update_planar_textures(enc_width, enc_height, img, pixel_format, scaling=scaling)
client   1 @25.820   File "/Users/osx/Desktop/Xpra.app/Contents/Resources/lib/python/xpra/client/gl/gl_window_backing_base.py", line 1190, in update_planar_textures
client   1 @25.820     glTexSubImage2D(target, 0, 0, 0, w, h, GL_LUMINANCE, GL_UNSIGNED_BYTE, pixel_data)
client   1 @25.820   File "latebind.pyx", line 32, in OpenGL_accelerate.latebind.LateBind.__call__ (src/latebind.c:989)
client   1 @25.820   File "wrapper.pyx", line 318, in OpenGL_accelerate.wrapper.Wrapper.__call__ (src/wrapper.c:6561)
client   1 @25.820 GLError: GLError(
client   1 @25.820 	err = 1282,
client   1 @25.820 	description = 'invalid operation',
client   1 @25.820 	baseOperation = glTexSubImage2D,
client   1 @25.820 	pyArgs = (
client   1 @25.820 		GL_TEXTURE_RECTANGLE_ARB,
client   1 @25.820 		0,
client   1 @25.820 		0,
client   1 @25.820 		0,
client   1 @25.820 		500,
client   1 @25.820 		274,
client   1 @25.820 		GL_LUMINANCE,
client   1 @25.820 		GL_UNSIGNED_BYTE,
client   1 @25.820 		<memory at 0x11fc289b0>,
client   1 @25.820 	),
client   1 @25.820 	cArgs = (
client   1 @25.820 		GL_TEXTURE_RECTANGLE_ARB,
client   1 @25.820 		0,
client   1 @25.820 		0,
client   1 @25.820 		0,
client   1 @25.820 		500,
client   1 @25.820 		274,
client   1 @25.820 		GL_LUMINANCE,
client   1 @25.820 		GL_UNSIGNED_BYTE,
client   1 @25.820 		<memory at 0x11fc289b0>,
client   1 @25.820 	),
client   1 @25.820 	cArguments = (
client   1 @25.820 		GL_TEXTURE_RECTANGLE_ARB,
client   1 @25.820 		0,
client   1 @25.820 		0,
client   1 @25.820 		0,
client   1 @25.820 		500,
client   1 @25.820 		274,
client   1 @25.820 		GL_LUMINANCE,
client   1 @25.820 		GL_UNSIGNED_BYTE,
client   1 @25.820 		<memory at 0x11fc289b0>,
client   1 @25.820 	)
client   1 @25.820 )
Warning: client decoding error:
 OpenGL h264 paint failed: GLError( err=1282, description # 'invalid operation', baseOperationglTexSubImage2D )
client   1 @25.828  flush=0, image=AVImageWrapper-AVFrameWrapper(0x7f98f8cdb540)(GBRP:(0, 0, 500, 274, 24):3_PLANES), coords=(20, 170, 500, 274), size=500x274
client   1 @25.938 Error painting planar update
client   1 @25.938   File "/Users/osx/Desktop/Xpra.app/Contents/Resources/lib/python/xpra/client/gl/gl_window_backing_base.py", line 1113, in gl_paint_planar
client   1 @25.938     self.update_planar_textures(enc_width, enc_height, img, pixel_format, scaling=scaling)
client   1 @25.938   File "/Users/osx/Desktop/Xpra.app/Contents/Resources/lib/python/xpra/client/gl/gl_window_backing_base.py", line 1190, in update_planar_textures
client   1 @25.938     glTexSubImage2D(target, 0, 0, 0, w, h, GL_LUMINANCE, GL_UNSIGNED_BYTE, pixel_data)
client   1 @25.938   File "latebind.pyx", line 32, in OpenGL_accelerate.latebind.LateBind.__call__ (src/latebind.c:989)
client   1 @25.938   File "wrapper.pyx", line 318, in OpenGL_accelerate.wrapper.Wrapper.__call__ (src/wrapper.c:6561)
client   1 @25.938 GLError: GLError(
client   1 @25.938 	err = 1282,
client   1 @25.938 	description = 'invalid operation',
client   1 @25.938 	baseOperation = glTexSubImage2D,
client   1 @25.938 	pyArgs = (
client   1 @25.938 		GL_TEXTURE_RECTANGLE_ARB,
client   1 @25.938 		0,
client   1 @25.938 		0,
client   1 @25.938 		0,
client   1 @25.938 		500,
client   1 @25.938 		274,
client   1 @25.938 		GL_LUMINANCE,
client   1 @25.938 		GL_UNSIGNED_BYTE,
client   1 @25.938 		<memory at 0x11fc28b90>,
client   1 @25.938 	),
client   1 @25.938 	cArgs = (
client   1 @25.938 		GL_TEXTURE_RECTANGLE_ARB,
client   1 @25.938 		0,
client   1 @25.938 		0,
client   1 @25.938 		0,
client   1 @25.938 		500,
client   1 @25.938 		274,
client   1 @25.938 		GL_LUMINANCE,
client   1 @25.938 		GL_UNSIGNED_BYTE,
client   1 @25.938 		<memory at 0x11fc28b90>,
client   1 @25.938 	),
client   1 @25.938 	cArguments = (
client   1 @25.938 		GL_TEXTURE_RECTANGLE_ARB,
client   1 @25.938 		0,
client   1 @25.938 		0,
client   1 @25.938 		0,
client   1 @25.938 		500,
client   1 @25.938 		274,
client   1 @25.938 		GL_LUMINANCE,
client   1 @25.938 		GL_UNSIGNED_BYTE,
client   1 @25.938 		<memory at 0x11fc28b90>,
client   1 @25.938 	)
client   1 @25.938 )
client   1 @25.947  flush=0, image=AVImageWrapper-AVFrameWrapper(0x7f98fc3e9000)(GBRP:(0, 0, 500, 274, 24):3_PLANES), coords=(20, 170, 500, 274), size=500x274

(..)

Warning: client decoding error:
 OpenGL RGB paint failed: GLError( err=1282, description # 'invalid operation', baseOperationglEnd )
client   1 @26.588 Error painting planar update
client   1 @26.588   File "/Users/osx/Desktop/Xpra.app/Contents/Resources/lib/python/xpra/client/gl/gl_window_backing_base.py", line 1121, in gl_paint_planar
client   1 @26.588     self.render_planar_update(x, y, enc_width, enc_height, x_scale, y_scale, shader)
client   1 @26.588   File "/Users/osx/Desktop/Xpra.app/Contents/Resources/lib/python/xpra/client/gl/gl_window_backing_base.py", line 1218, in render_planar_update
client   1 @26.588     glEnd()
client   1 @26.588   File "latebind.pyx", line 44, in OpenGL_accelerate.latebind.Curry.__call__ (src/latebind.c:1201)
client   1 @26.588   File "/Users/osx/Desktop/Xpra.app/Contents/Resources/lib/python/site-packages.zip/OpenGL/GL/exceptional.py", line 45, in glEnd
client   1 @26.588     return baseFunction( )
client   1 @26.588   File "errorchecker.pyx", line 53, in OpenGL_accelerate.errorchecker._ErrorChecker.glCheckError (src/errorchecker.c:1218)
client   1 @26.588 GLError: GLError(
client   1 @26.588 	err = 1282,
client   1 @26.588 	description = 'invalid operation',
client   1 @26.588 	baseOperation = glEnd,
client   1 @26.588 	cArguments = ()
client   1 @26.588 )
client   1 @26.596  flush=0, image=AVImageWrapper-AVFrameWrapper(0x7f98fc3e8900)(GBRP:(0, 0, 504, 236, 24):3_PLANES), coords=(20, 151, 504, 236), size=504x236
Warning: client decoding error:
 OpenGL h264 paint failed: GLError( err=1282, description # 'invalid operation', baseOperationglEnd )
client   1 @26.685 Error painting planar update
client   1 @26.685   File "/Users/osx/Desktop/Xpra.app/Contents/Resources/lib/python/xpra/client/gl/gl_window_backing_base.py", line 1121, in gl_paint_planar
client   1 @26.685     self.render_planar_update(x, y, enc_width, enc_height, x_scale, y_scale, shader)
client   1 @26.685   File "/Users/osx/Desktop/Xpra.app/Contents/Resources/lib/python/xpra/client/gl/gl_window_backing_base.py", line 1218, in render_planar_update
client   1 @26.685     glEnd()
client   1 @26.685   File "latebind.pyx", line 44, in OpenGL_accelerate.latebind.Curry.__call__ (src/latebind.c:1201)
client   1 @26.685   File "/Users/osx/Desktop/Xpra.app/Contents/Resources/lib/python/site-packages.zip/OpenGL/GL/exceptional.py", line 45, in glEnd
client   1 @26.685     return baseFunction( )
client   1 @26.685   File "errorchecker.pyx", line 53, in OpenGL_accelerate.errorchecker._ErrorChecker.glCheckError (src/errorchecker.c:1218)
client   1 @26.685 GLError: GLError(
client   1 @26.685 	err = 1282,
client   1 @26.685 	description = 'invalid operation',
client   1 @26.685 	baseOperation = glEnd,
client   1 @26.685 	cArguments = ()
client   1 @26.685 )
client   1 @26.694  flush=0, image=AVImageWrapper-AVFrameWrapper(0x7f98fb0f4c40)(GBRP:(0, 0, 504, 236, 24):3_PLANES), coords=(20, 151, 504, 236), size=504x236

This could well be related to the changes from #2481****

@totaam
Copy link
Collaborator Author

totaam commented Nov 29, 2019

2019-11-29 10:54:28: antoine commented


Reproducible if the window is created from an xterm, but re-connecting to the same session where the window is already shown does not show any errors!?

Also not present in v3?

With -d draw,paint,opengl:

gl_paint_planar(0, 'jpeg', ImageWrapper(YUV444P:(0, 0, 540, 667, 24):PACKED), 0, 0, 540, 667, 540, 667, [<function WindowClient._do_draw.<locals>.record_decode_time at 0x11cb80f80>, <bound method ClientWindowBase.after_draw_refresh of GLClientWindow(3 : GLDrawingArea(3, (540, 667), None))>])
GLDrawingArea(3, (540, 667), None).update_planar_textures(540, 667, ImageWrapper(YUV444P:(0, 0, 540, 667, 24):PACKED), 'YUV444P')
Creating new planar textures, pixel format YUV444P
updating planar textures: 540x667 YUV444P
set_alignment(540, 540, 'Y') GL_UNPACK_ROW_LENGTH=0, GL_UNPACK_ALIGNMENT=4
texture 0: div=(1, 1), rowstride=540, 540x667, data=360180 bytes, upload=zerocopy:memoryview
set_alignment(540, 540, 'U') GL_UNPACK_ROW_LENGTH=0, GL_UNPACK_ALIGNMENT=4
texture 1: div=(1, 1), rowstride=540, 540x667, data=360180 bytes, upload=zerocopy:memoryview
set_alignment(540, 540, 'V') GL_UNPACK_ROW_LENGTH=0, GL_UNPACK_ALIGNMENT=4
texture 2: div=(1, 1), rowstride=540, 540x667, data=360180 bytes, upload=zerocopy:memoryview
GLDrawingArea(3, (540, 667), YUV444P).render_planar_update(0, 0, 540, 667, 1, 1, 2) pixel_format=YUV444P
painting planar update, format YUV444P
GLDrawingArea(3, (540, 667), YUV444P).render_planar_update(..) texture_size=(540, 667), size=(540, 667)
Error painting planar update
  File "/Users/gtk3/Desktop/Xpra.app/Contents/Resources/lib/python/xpra/client/gl/gl_window_backing_base.py", line 1101, in gl_paint_planar
    self.render_planar_update(x, y, enc_width, enc_height, x_scale, y_scale, shader)
  File "/Users/gtk3/Desktop/Xpra.app/Contents/Resources/lib/python/xpra/client/gl/gl_window_backing_base.py", line 1199, in render_planar_update
    glEnd()
  File "src/latebind.pyx", line 44, in OpenGL_accelerate.latebind.Curry.__call__
  File "/Users/gtk3/Desktop/Xpra.app/Contents/Resources/lib/python/site-packages.zip/OpenGL/GL/exceptional.py", line 45, in glEnd
    return baseFunction( )
  File "src/errorchecker.pyx", line 53, in OpenGL_accelerate.errorchecker._ErrorChecker.glCheckError
Warning: client decoding error:
GLError: GLError(
 OpenGL jpeg paint failed: GLError( err=1282, description # b'invalid operation', baseOperationglEnd )
	err = 1282,
	description = b'invalid operation',
	baseOperation = glEnd,
	cArguments = ()
)
 flush=0, image=ImageWrapper(YUV444P:(0, 0, 540, 667, 24):PACKED), coords=(0, 0, 540, 667), size=540x667
record_decode_time(False, OpenGL jpeg paint failed: GLError( err=1282, description # b'invalid operation', baseOperationglEnd )) decoding error on wid=3, b'jpeg': 540x667
sending ack: ('damage-sequence', 1, 3, 540, 667, -1, "OpenGL jpeg paint failed: GLError( err=1282, description # b'invalid operation', baseOperationglEnd )")
after_draw_refresh(False, OpenGL jpeg paint failed: GLError( err=1282, description # b'invalid operation', baseOperationglEnd )) pending_refresh=[]

@totaam
Copy link
Collaborator Author

totaam commented Nov 29, 2019

Easy to reproduce with keyboard-test and --encodings=jpeg.

Adding debug logging to the glMultiTexCoord2i and glVertex2i calls found in the glBegin / glEnd block does not show any invalid values.
Could be related to the changes of how / when we call present_fbo but XPRA_OPENGL_DRAW_REFRESH=0 does not help.

Even when this bug is fixed, maybe we should re-initialize the window in case of paint errors?
Maybe the opengl probe should use a JPEG YUV paint?

What is the difference between a new window and one we just connected to?
It is the very first paint that fails. Keeping jpeg but switching to XPRA_JPEG_YUV=0 works OK. Delaying the first YUV paint using a counter does not help.

@totaam
Copy link
Collaborator Author

totaam commented Dec 1, 2019

2019-12-01 17:37:08: antoine commented


Duplicate ticket: #2499.

Bisection:

  • 24565 bad
  • 24000 needs this patch to run:
--- ../src/xpra/platform/darwin/gui.py	(revision 24000)
+++ ../src/xpra/platform/darwin/gui.py	(working copy)
@@ -89,7 +89,7 @@
         import gi
         gi.require_version('GtkosxApplication', '1.0')
         from gi.repository import GtkosxApplication #@UnresolvedImport
-        gtkosx_application = GtkosxApplication()
+        gtkosx_application = GtkosxApplication
         macapp = gtkosx_application.Application()
         macapp.connect("NSApplicationWillTerminate", quit_handler)
     return macapp

Not so easy then as the range from r23800 to ~24250 cannot be bisected.

Trying to find the fix for the "runtime opengl problem", to then be able to bisect before 24250:

@totaam
Copy link
Collaborator Author

totaam commented Dec 2, 2019

2019-12-02 17:24:30: antoine commented


Restarting bisection (and adding +r24188 + r24189 + r24191):

Trying with v2.5.x: needs r23527 to be able to run the packaging scripts, 24575 automates this.
v2.5.3-24575 works OK (latest from 2.5.x branch)
So the regression happened somewhere between 22133 (tag v2.5.x) and 3.0.3.

@totaam
Copy link
Collaborator Author

totaam commented Dec 3, 2019

2019-12-03 04:19:17: antoine uploaded file bundle.patch (1.3 KiB)

updated patch for building trunk circa 3.0-dev

@totaam
Copy link
Collaborator Author

totaam commented Dec 3, 2019

2019-12-03 06:38:21: antoine commented


Bisecting again, with the bundle patch attached:

r23560 is the problem, and it's not easy to split into parts or revert.

@totaam
Copy link
Collaborator Author

totaam commented Dec 3, 2019

2019-12-03 12:33:02: antoine commented


Splitting the patch and applying piece by piece.
No problems with these parts of r23560 (some for obvious reasons since unused, ie: gtk2, gtkgl):

  • [/browser/xpra/trunk/src/xpra/client/gl/gtk3/gtkgl_client_window.py?rev=23560]
  • [/browser/xpra/trunk/src/xpra/client/gtk2/gtk2_window_base.py?rev=23560]
  • [/browser/xpra/trunk/src/xpra/client/gtk_base/gtk_client_window_base.py?rev=23560]
  • [/browser/xpra/trunk/src/xpra/client/gtk3/client_window.py?rev=23560]

The last few are harder to untangle. gtk3/gtk3_client_window.py started as a copy of gtk3/client_window.py.
Applying this part of the change triggers the bug: [/browser/xpra/trunk/src/xpra/client/gl/gtk3/gl_client_window.py?rev=23560].
But unsurprisingly, keeping gtk3/gtk3_client_window.py as a verbatim copy of gtk3/client_window.py works OK.
So the problem comes from the seemingly innocuous changes here: [/changeset/23560/xpra#file5]

Applying piece by piece, it is the init_drawing_area vs init_widget_events change that breaks things.
Specifically, overriding init_widget_events and registering the "draw" event callback.

This ensures we use our custom code for painting the drawing area widget, and this calls backing.cairo_draw which calls present_fbo with the opengl backend.
Skipping cairo_draw also works.
The updates end up on screen thanks to queue_draw_area which calls gl_expose_rect.
Removing the queue_draw_area overrides from both gl_client_window and gtk3_client_window and letting the normal GTK code call down to our drawing_area_draw also triggers the error..
Again, only reliably with a new window, not when connecting to an existing window!?!

@totaam
Copy link
Collaborator Author

totaam commented Dec 3, 2019

2019-12-03 16:27:07: antoine commented


Interestingly, XPRA_OPENGL_DRAW_REFRESH=0 triggers the bug more.

Using the big hammer, looking for log differences with -d opengl,metadata,geometry,state,window:

  • window created after connecting (bug) - summarized:
process_new_common: [7, 0, 0, 540, 800, {b'xid': b'0x400003', ...
make_new_backing(<class 'xpra.client.gl.gtk3.gl_drawing_area.GLDrawingArea'>, 540, 800, 540, 800) effective backing class=<class 'xpra.client.gl.gtk3.gl_drawing_area.GLDrawingArea'>, server alpha=False, window alpha=False
make_new_window(..) window(7)=GLClientWindow(7 : GLDrawingArea(7, (540, 800), None))
clip_to_backing(GLDrawingArea(7, (540, 800), None), <cairo.Context object at 0x12191e470>) rectangle=(0, 0, 540, 667)
get_paint_context(<__gi__.GdkQuartzWindow object at 0x1234a20f0 (GdkQuartzWindow at 0x7f89e21a3650)>) nsview(0x7f89e42ce100)=<GdkQuartzView: 0x7f89e42ce100>
AGLWindowContext(<NSOpenGLContext: 0x7f89e42da890>, <GdkQuartzView: 0x7f89e42ce100>)
present_fbo: adding (0, 0, 540, 800) to pending paint list (size=0), flush=0, paint_screen=False
'configure-window', 7, 0, 45, 540, 667, {'encodings.rgb_formats': ...
'configure-window', 7, 0, 45, 540, 667, {}, 0, {}, False, 7, (0, 443), ['mod2']
window_state_updated(..) state updates: {'focused': True}, actual updates: {'focused': True}, server updates: {'focused': True}
map-window wid=7, geometry=(0, 45, 540, 667), client props={'workspace': 65535}, state={'focused': True, 'frame': (0, 0, 22, 0)}
get_paint_context(<__gi__.GdkQuartzWindow object at 0x129040a00 (GdkQuartzWindow at 0x7fbcea023650)>) nsview(0x7fbce97b7300)=<GdkQuartzView: 0x7fbce97b7300>
-> AGLWindowContext(<NSOpenGLContext: 0x7f89e46f99b0>, <GdkQuartzView: 0x7f89e42ce100>)
do_present_fbo: painting ((0, 0, 540, 667),)
2.do_gl_show(GLDrawingArea(7, (540, 667), None)) swapping buffers now
GL cursor 16x16 uploaded 1024 bytes of RGBA pixel data using zerocopy:bytes-as-memoryview
metadata update for window 7: {b'iconic': False}
metadata update for window 7: {b'size-constraints': {b'base-size': (0, 0), b'gravity': 1, b'minimum-size': (139, 139)}}
gl_paint_planar(0, 'jpeg', ImageWrapper(YUV444P:(0, 0, 540, 667, 24):PACKED), 0, 0, 540, 667, 540, 667, [<function WindowClient._do_draw.<locals>.record_decode_time at 0x110689170>, <bound method ClientWindowBase.after_draw_refresh of GLClientWindow(7 : GLDrawingArea(7, (540, 667), None))>])
GLDrawingArea(7, (540, 667), YUV444P).render_planar_update(0, 0, 540, 667, 1, 1, 2) pixel_format=YUV444P
OpenGL jpeg paint failed: GLError( err=1282, description # b'invalid operation', baseOperationglEnd )
  • window already created (OK):
process_new_common: [7, 0, 45, 540, 667, {b'xid': b'0x400003', ...
make_new_backing(<class 'xpra.client.gl.gtk3.gl_drawing_area.GLDrawingArea'>, 540, 667, 540, 667) effective backing class=<class 'xpra.client.gl.gtk3.gl_drawing_area.GLDrawingArea'>, server alpha=False, window alpha=False
make_new_window(..) window(7)=GLClientWindow(7 : GLDrawingArea(7, (540, 667), None))
-> missing clip_to_backing?
get_paint_context(<__gi__.GdkQuartzWindow object at 0x12a9a4550 (GdkQuartzWindow at 0x7f90690ba1a0)>) nsview(0x7f9068fbd640)=<GdkQuartzView: 0x7f9068fbd640>
AGLWindowContext(<NSOpenGLContext: 0x7f9068fa14c0>, <GdkQuartzView: 0x7f9068fbd640>)
-> GL cursor 16x16 uploaded 1024 bytes of RGBA pixel data using zerocopy:bytes-as-memoryview
-> clip_to_backing(GLDrawingArea(7, (540, 667), None), <cairo.Context object at 0x11972bc30>) rectangle=(0, 0, 540, 667)
present_fbo: adding (0, 0, 540, 667) to pending paint list (size=0), flush=0, paint_screen=False
'configure-window', 7, 0, 45, 540, 667, {'encodings.rgb_formats': ...
'configure-window', 7, 0, 45, 540, 667, {}, 0, {}, False, 7, (3, 552), ['mod2']
window_state_updated(..) state updates: {'focused': True}, actual updates: {'focused': True}, server updates: {'focused': True}
map-window wid=7, geometry=(0, 45, 540, 667), client props={'workspace': 65535}, state={'focused': True, 'frame': (0, 0, 22, 0)}
do_present_fbo: painting ((0, 0, 540, 667),)
2.do_gl_show(GLDrawingArea(7, (540, 667), None)) swapping buffers now
GL cursor 16x16 uploaded 1024 bytes of RGBA pixel data using zerocopy:bytes-as-memoryview
gl_paint_planar(3, 'jpeg', ImageWrapper(YUV444P:(0, 0, 540, 178, 24):PACKED), 0, 489, 540, 178, 540, 178, [<function WindowClient._do_draw.<locals>.record_decode_time at 0x1196ecd40>])
Creating new planar textures, pixel format YUV444P (was None), texture size (540, 178) (was (0, 0))
GLDrawingArea(7, (540, 667), YUV444P).render_planar_update(0, 489, 540, 178, 1, 1, 2) pixel_format=YUV444P
...
gl_paint_planar(2, 'jpeg', ..
gl_paint_planar(1, 'jpeg', ..
gl_paint_planar(0, 'jpeg',
do_present_fbo: painting ((0, 0, 540, 667),)
1.do_gl_show(GLDrawingArea(7, (540, 667), YUV444P)) swapping buffers now

Disabling the cursor code makes no difference.
The two AGLWindowContext instances look suspicious: the GdkQuartzWindow they're for is not the same!?
One is preceded by a clip_to_backing which is not the case when things work OK.

Turns out that this is due to the "context-reinit" workaround added in r23441 for macos: #2372, so smooth resizing #478 and window gravity #2217 will need to be re-tested.
We can't change the value of the flag because then window contents look weird after resizing.
"context-reinit" needs to be fixed or fbo resizing made to work on macos.. no easy fix!

@totaam
Copy link
Collaborator Author

totaam commented Dec 4, 2019

Fixing "fbo resizing" would also fix #2373.

@totaam
Copy link
Collaborator Author

totaam commented Dec 4, 2019

Found the solution here: Update the Rendering Context When the Renderer or Geometry Changes using NSOpenGLContext.update().

So r24590 fixes "fbo resizing" on macos, and r24591 disables "context reinit" mode.
One more thing needed: we need to repaint the outer edge of the window which is not part of the drawing area.

@totaam
Copy link
Collaborator Author

totaam commented Dec 5, 2019

Not going to worry about the outer edge as it's pretty difficult to trigger it and there's nothing to see there: it only happens when there's a geometry mismatch and the client geometry is bigger than it should be because GTK3 didn't honour our geometry constraints...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant