@@ -712,9 +712,9 @@ void Node3DEditorViewport::cancel_transform() {
712712}
713713
714714void Node3DEditorViewport::_update_shrink () {
715- bool shrink = view_display_menu-> get_popup ()-> is_item_checked (view_display_menu-> get_popup ()-> get_item_index (VIEW_HALF_RESOLUTION) );
716- subviewport_container-> set_stretch_shrink (shrink ? 2 : 1 ) ;
717- subviewport_container-> set_texture_filter (shrink ? TEXTURE_FILTER_NEAREST : TEXTURE_FILTER_PARENT_NODE );
715+ const float scaling_3d_scale = GLOBAL_GET ( " rendering/scaling_3d/scale " );
716+ const float shrink_factor = view_display_menu-> get_popup ()-> is_item_checked (view_display_menu-> get_popup ()-> get_item_index (VIEW_HALF_RESOLUTION)) ? 0.5 : 1.0 ;
717+ viewport-> set_scaling_3d_scale ( MAX ( 0.25 , scaling_3d_scale * shrink_factor) );
718718}
719719
720720float Node3DEditorViewport::get_znear () const {
@@ -738,19 +738,19 @@ Vector3 Node3DEditorViewport::_get_camera_position() const {
738738}
739739
740740Point2 Node3DEditorViewport::point_to_screen (const Vector3 &p_point) {
741- return camera->unproject_position (p_point) * subviewport_container-> get_stretch_shrink () ;
741+ return camera->unproject_position (p_point);
742742}
743743
744744Vector3 Node3DEditorViewport::get_ray_pos (const Vector2 &p_pos) const {
745- return camera->project_ray_origin (p_pos / subviewport_container-> get_stretch_shrink () );
745+ return camera->project_ray_origin (p_pos);
746746}
747747
748748Vector3 Node3DEditorViewport::_get_camera_normal () const {
749749 return -_get_camera_transform ().basis .get_column (2 );
750750}
751751
752752Vector3 Node3DEditorViewport::get_ray (const Vector2 &p_pos) const {
753- return camera->project_ray_normal (p_pos / subviewport_container-> get_stretch_shrink () );
753+ return camera->project_ray_normal (p_pos);
754754}
755755
756756void Node3DEditorViewport::_clear_selected () {
@@ -835,7 +835,7 @@ void Node3DEditorViewport::_select_clicked(bool p_allow_locked) {
835835ObjectID Node3DEditorViewport::_select_ray (const Point2 &p_pos) const {
836836 Vector3 ray = get_ray (p_pos);
837837 Vector3 pos = get_ray_pos (p_pos);
838- Vector2 shrinked_pos = p_pos / subviewport_container-> get_stretch_shrink () ;
838+ Vector2 shrinked_pos = p_pos;
839839
840840 if (viewport->get_debug_draw () == Viewport::DEBUG_DRAW_SDFGI_PROBES) {
841841 RS::get_singleton ()->sdfgi_set_debug_probe_select (pos, ray);
@@ -3129,8 +3129,6 @@ void Node3DEditorViewport::_project_settings_changed() {
31293129 viewport->set_positional_shadow_atlas_quadrant_subdiv (2 , Viewport::PositionalShadowAtlasQuadrantSubdiv (atlas_q2));
31303130 viewport->set_positional_shadow_atlas_quadrant_subdiv (3 , Viewport::PositionalShadowAtlasQuadrantSubdiv (atlas_q3));
31313131
3132- _update_shrink ();
3133-
31343132 // Update MSAA, screen-space AA and debanding if changed
31353133
31363134 const int msaa_mode = GLOBAL_GET (" rendering/anti_aliasing/quality/msaa_3d" );
@@ -3158,8 +3156,7 @@ void Node3DEditorViewport::_project_settings_changed() {
31583156 const Viewport::Scaling3DMode scaling_3d_mode = Viewport::Scaling3DMode (int (GLOBAL_GET (" rendering/scaling_3d/mode" )));
31593157 viewport->set_scaling_3d_mode (scaling_3d_mode);
31603158
3161- const float scaling_3d_scale = GLOBAL_GET (" rendering/scaling_3d/scale" );
3162- viewport->set_scaling_3d_scale (scaling_3d_scale);
3159+ _update_shrink ();
31633160
31643161 const float fsr_sharpness = GLOBAL_GET (" rendering/scaling_3d/fsr_sharpness" );
31653162 viewport->set_fsr_sharpness (fsr_sharpness);
@@ -3413,7 +3410,7 @@ void Node3DEditorViewport::_notification(int p_what) {
34133410 }
34143411
34153412 if (show_info) {
3416- const String viewport_size = vformat (U" %d × %d" , viewport->get_size ().x , viewport->get_size ().y );
3413+ const String viewport_size = vformat (U" %d × %d" , viewport->get_size ().x * viewport-> get_scaling_3d_scale () , viewport->get_size ().y * viewport-> get_scaling_3d_scale () );
34173414 String text;
34183415 text += vformat (TTR (" X: %s\n " ), rtos (current_camera->get_position ().x ).pad_decimals (1 ));
34193416 text += vformat (TTR (" Y: %s\n " ), rtos (current_camera->get_position ().y ).pad_decimals (1 ));
@@ -3422,7 +3419,7 @@ void Node3DEditorViewport::_notification(int p_what) {
34223419 text += vformat (
34233420 TTR (" Size: %s (%.1fMP)\n " ),
34243421 viewport_size,
3425- viewport->get_size ().x * viewport->get_size ().y * 0.000001 );
3422+ viewport->get_size ().x * viewport->get_size ().y * Math::pow (viewport-> get_scaling_3d_scale (), 2 ) * 0.000001 );
34263423
34273424 text += " \n " ;
34283425 text += vformat (TTR (" Objects: %d\n " ), viewport->get_render_info (Viewport::RENDER_INFO_TYPE_VISIBLE, Viewport::RENDER_INFO_OBJECTS_IN_FRAME));
@@ -4561,8 +4558,7 @@ void Node3DEditorViewport::update_transform_gizmo_view() {
45614558 const int viewport_base_height = 400 * MAX (1 , EDSCALE);
45624559 gizmo_scale =
45634560 (gizmo_size / Math::abs (dd)) * MAX (1 , EDSCALE) *
4564- MIN (viewport_base_height, subviewport_container->get_size ().height ) / viewport_base_height /
4565- subviewport_container->get_stretch_shrink ();
4561+ MIN (viewport_base_height, subviewport_container->get_size ().height ) / viewport_base_height;
45664562 Vector3 scale = Vector3 (1 , 1 , 1 ) * gizmo_scale;
45674563
45684564 // if the determinant is zero, we should disable the gizmo from being rendered
@@ -4800,7 +4796,7 @@ Dictionary Node3DEditorViewport::get_state() const {
48004796 d[" grid" ] = view_display_menu->get_popup ()->is_item_checked (view_display_menu->get_popup ()->get_item_index (VIEW_GRID));
48014797 d[" information" ] = view_display_menu->get_popup ()->is_item_checked (view_display_menu->get_popup ()->get_item_index (VIEW_INFORMATION));
48024798 d[" frame_time" ] = view_display_menu->get_popup ()->is_item_checked (view_display_menu->get_popup ()->get_item_index (VIEW_FRAME_TIME));
4803- d[" half_res" ] = subviewport_container-> get_stretch_shrink () > 1 ;
4799+ d[" half_res" ] = view_display_menu-> get_popup ()-> is_item_checked (view_display_menu-> get_popup ()-> get_item_index (VIEW_HALF_RESOLUTION)) ;
48044800 d[" cinematic_preview" ] = view_display_menu->get_popup ()->is_item_checked (view_display_menu->get_popup ()->get_item_index (VIEW_CINEMATIC_PREVIEW));
48054801 if (previewing) {
48064802 d[" previewing" ] = EditorNode::get_singleton ()->get_edited_scene ()->get_path_to (previewing);
0 commit comments