-
-
Notifications
You must be signed in to change notification settings - Fork 4k
Support all wgpu surface targets #18936
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
Open
brianreavis
wants to merge
14
commits into
bevyengine:main
Choose a base branch
from
brianreavis:pr-wgpu-surface-targets
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
+634
−222
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…lled out safety comments
… w/o an initial surface target)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
A-Windowing
Platform-agnostic interface layer to run your app in
D-Unsafe
Touches with unsafe code in some way
S-Needs-Review
Needs reviewer attention (from anyone!) to move forward
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.
Objective
This PR refactors window handles / surface creation to support all the surface targets that wgpu supports (defined here) instead of just the subset that can be represented by raw-window-handle.
Although not supported out-of-the-box, the primary point for doing this is to unlock the ability to run Bevy entirely off the main thread on iOS and MacOS via wgpu’s
SurfaceTargetUnsafe::CoreAnimationLayer
.Solution
Introduce a
SurfaceTargetSource
component on window entities that's very similar toRawHandleWrapper
. It hands out awgpu::SurfaceTarget
orwgpu::SurfaceTargetUnsafe
instead of a raw-window-handle handle.Could this have been achieved by adding CoreAnimationLayer to raw-window-handle? Yes, but then that crate would need a new release and wgpu would need updated. The approach in this PR ensures Bevy supports all that wgpu supports without the potential for future drift.
Although it's now unused,
RawHandleWrapper
was left in place for anyone implementing custom renderers that aren't necessarily wgpu-based.Showcase
Testing
SurfaceTargetUnsafe::CoreAnimationLayer
(note: this isn’t supported out of the box in Bevy, but with this PR, it can be achieved with custom initialization similar to what’s shown in the Showcase section above)bevy_winit
on MacOSMigration Guide
bevy_winit
but are usingbevy_render
(uncommon), you must insert aSurfaceTargetSource
component on window entities. It's nearly identical toRawHandleWrapper
, but supports additional surface targets that cannot be represented by raw-window-handle.RawHandleWrapperHolder
has been removed. UseRawHandleWrapper
to get a handle instead.