[macOS]: Call layer.setNeedsDisplay on show. #17096
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What does the pull request do?
The
AvaloniaNative.GlPlatformSurface.CreateGlRenderTarget
method can only be called on the UI thread. In normal circumstances this method is called in response to a call toTopLevel.HandlePaint
from the nativeAvnView.updateLayer
method. The flow of operations goes like this:AvnView.updateLayer
is calledTopLevel.HandlePaint
MediaContext.ImmediateRenderRequested
to render on the UI threadGlPlatformSurface.CreateGlRenderTarget
on the UI thread and a GL render target is createdHowever, a customer was experiencing a problem where
AvnView.updateLayer
and by extensionTopLevel.HandlePaint
were being called before the window is shown. This broke the creation of the GL render target:AvnView.updateLayer
is calledTopLevel.HandlePaint
MediaContext.ImmediateRenderRequested
This was happening because the customer is creating/showing the window by pushing jobs to the dispatcher, causing the
HandlePaint
request to come in earlier than expected.What is the current behavior?
The window is blank until a resize happens (which causes
HandlePaint
to be called).How was the solution implemented (if it's not obvious)?
The layer is invalidated at the end of a show operation, so
AvnView.updateLayer
/HandlePaint
is called, creating the render target