Skip to content

Commit 45ce9f0

Browse files
committed
Merge pull request godotengine#93436 from Calinou/3d-editor-half-resolution-use-3d-scaling
Use Viewport's 3D Scaling in the 3D editor's Half Resolution option
2 parents 80d1459 + 54a6e67 commit 45ce9f0

File tree

1 file changed

+12
-16
lines changed

1 file changed

+12
-16
lines changed

editor/scene/3d/node_3d_editor_plugin.cpp

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -712,9 +712,9 @@ void Node3DEditorViewport::cancel_transform() {
712712
}
713713

714714
void 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

720720
float Node3DEditorViewport::get_znear() const {
@@ -738,19 +738,19 @@ Vector3 Node3DEditorViewport::_get_camera_position() const {
738738
}
739739

740740
Point2 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

744744
Vector3 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

748748
Vector3 Node3DEditorViewport::_get_camera_normal() const {
749749
return -_get_camera_transform().basis.get_column(2);
750750
}
751751

752752
Vector3 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

756756
void Node3DEditorViewport::_clear_selected() {
@@ -835,7 +835,7 @@ void Node3DEditorViewport::_select_clicked(bool p_allow_locked) {
835835
ObjectID 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

Comments
 (0)