Change Camera.viewport_to_world_2d to rescale according to the rendering target's scaling factor #17338
+5
−0
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.
Camera.viewport_to_world_2d doesn't behave as expected with the target window is rescaled, or didn't have a 1:1 scale factor in the first place. If the rendering target has enough information for us to get its scaling factor, we should use it to rescale the viewport coordinates before computing normalized device coordinates and then converting to world coordinates. This change should preserve the existing behavior if rendering target information is not available.
Fixes #17312
Solution
Get the target_scaling_factor option from our camera and unwrap_or, with default 1.0, so we will use the scaling factor if it exists. It might be that we want to return an error if this option is
None
, but it didn't care before, so perhaps the safer change is to default to the previous behavior if we can't rescale in the first place.Testing
Issue reported included an MRE here:
Issue MRE
This change successfully addresses the undesirable behavior in the MRE
Migration Guide
If you were using Camera.viewport_to_world_2d previously and manually correcting for scaling, it will probably break!