diff --git a/doc/classes/EditorSettings.xml b/doc/classes/EditorSettings.xml index 449f5639fd2..20842e7535c 100644 --- a/doc/classes/EditorSettings.xml +++ b/doc/classes/EditorSettings.xml @@ -629,6 +629,11 @@ If [code]true[/code], editor main menu is using embedded [MenuBar] instead of system global menu. Specific to the macOS platform. + + Sets the V-Sync mode for the editor. Does not affect the project when run from the editor (this is controlled by [member ProjectSettings.display/window/vsync/vsync_mode]). + Depending on the platform and used renderer, the engine will fall back to [b]Enabled[/b] if the desired mode is not supported. + [b]Note:[/b] V-Sync modes other than [b]Enabled[/b] are only supported in the Forward+ and Mobile rendering methods, not Compatibility. + Base speed for increasing/decreasing float values by dragging them in the inspector. diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index ae5eb435ba2..f4109963a3d 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -875,7 +875,7 @@ If [code]true[/code] subwindows are embedded in the main window. - Sets the V-Sync mode for the main game window. + Sets the V-Sync mode for the main game window. The editor's own V-Sync mode can be set using [member EditorSettings.interface/editor/vsync_mode]. See [enum DisplayServer.VSyncMode] for possible values and how they affect the behavior of your application. Depending on the platform and used renderer, the engine will fall back to [b]Enabled[/b] if the desired mode is not supported. [b]Note:[/b] V-Sync modes other than [b]Enabled[/b] are only supported in the Forward+ and Mobile rendering methods, not Compatibility. diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 20ceed0cb8f..07a048c6072 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -345,6 +345,11 @@ void EditorNode::shortcut_input(const Ref &p_event) { } } +void EditorNode::_update_vsync_mode() { + const DisplayServer::VSyncMode window_vsync_mode = DisplayServer::VSyncMode(int(EDITOR_GET("interface/editor/vsync_mode"))); + DisplayServer::get_singleton()->window_set_vsync_mode(window_vsync_mode); +} + void EditorNode::_update_from_settings() { _update_title(); @@ -758,6 +763,7 @@ void EditorNode::_notification(int p_what) { } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { + _update_vsync_mode(); FileDialog::set_default_show_hidden_files(EDITOR_GET("filesystem/file_dialog/show_hidden_files")); EditorFileDialog::set_default_show_hidden_files(EDITOR_GET("filesystem/file_dialog/show_hidden_files")); EditorFileDialog::set_default_display_mode((EditorFileDialog::DisplayMode)EDITOR_GET("filesystem/file_dialog/display_mode").operator int()); @@ -6271,6 +6277,8 @@ EditorNode::EditorNode() { FileAccess::set_backup_save(EDITOR_GET("filesystem/on_save/safe_save_on_backup_then_rename")); + _update_vsync_mode(); + // Warm up the surface upgrade tool as early as possible. surface_upgrade_tool = memnew(SurfaceUpgradeTool); run_surface_upgrade_tool = EditorSettings::get_singleton()->get_project_metadata("surface_upgrade_tool", "run_on_restart", false); diff --git a/editor/editor_node.h b/editor/editor_node.h index e7011e921ee..04d7b921c59 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -584,6 +584,7 @@ private: void _dropped_files(const Vector &p_files); void _add_dropped_files_recursive(const Vector &p_files, String to_path); + void _update_vsync_mode(); void _update_from_settings(); void _gdextensions_reloaded(); diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 060f2054165..9ba3eec817e 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -439,6 +439,9 @@ void EditorSettings::_load_defaults(Ref p_extra_config) { // low FPS limits, the editor can take a small while to become usable after // being focused again, so this should be used at the user's discretion. EDITOR_SETTING_USAGE(Variant::FLOAT, PROPERTY_HINT_RANGE, "interface/editor/unfocused_low_processor_mode_sleep_usec", 100000, "1,1000000,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) + + EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "interface/editor/vsync_mode", 1, "Disabled,Enabled,Adaptive,Mailbox") + _initial_set("interface/editor/separate_distraction_mode", false); _initial_set("interface/editor/automatically_open_screenshots", true); EDITOR_SETTING_USAGE(Variant::BOOL, PROPERTY_HINT_NONE, "interface/editor/single_window_mode", false, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED)