diff --git a/core/config/engine.cpp b/core/config/engine.cpp index 203f8c388269..2bb883784911 100644 --- a/core/config/engine.cpp +++ b/core/config/engine.cpp @@ -258,6 +258,12 @@ bool Engine::is_printing_error_messages() const { return CoreGlobals::print_error_enabled; } +void Engine::print_header(const String &p_string) const { + if (_print_header) { + print_line(p_string); + } +} + void Engine::add_singleton(const Singleton &p_singleton) { ERR_FAIL_COND_MSG(singleton_ptrs.has(p_singleton.name), vformat("Can't register singleton '%s' because it already exists.", p_singleton.name)); singletons.push_back(p_singleton); diff --git a/core/config/engine.h b/core/config/engine.h index b64309a9e838..be7cd62f663e 100644 --- a/core/config/engine.h +++ b/core/config/engine.h @@ -84,6 +84,8 @@ class Engine { bool project_manager_hint = false; bool extension_reloading = false; + bool _print_header = true; + static Engine *singleton; String write_movie_path; @@ -123,6 +125,7 @@ class Engine { void set_print_error_messages(bool p_enabled); bool is_printing_error_messages() const; + void print_header(const String &p_string) const; void set_frame_delay(uint32_t p_msec); uint32_t get_frame_delay() const; diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp index 974fd5283b00..b8ce271586ac 100644 --- a/core/config/project_settings.cpp +++ b/core/config/project_settings.cpp @@ -1393,6 +1393,7 @@ ProjectSettings::ProjectSettings() { GLOBAL_DEF_BASIC(PropertyInfo(Variant::STRING, "application/run/main_scene", PROPERTY_HINT_FILE, "*.tscn,*.scn,*.res"), ""); GLOBAL_DEF("application/run/disable_stdout", false); GLOBAL_DEF("application/run/disable_stderr", false); + GLOBAL_DEF("application/run/print_header", true); GLOBAL_DEF_RST("application/config/use_hidden_project_data_directory", true); GLOBAL_DEF("application/config/use_custom_user_dir", false); GLOBAL_DEF("application/config/custom_user_dir_name", ""); diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index f69faff2bd69..f8e91c94a0b0 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -353,6 +353,9 @@ This setting can be overridden using the [code]--max-fps <fps>[/code] command line argument (including with a value of [code]0[/code] for unlimited framerate). [b]Note:[/b] This property is only read when the project starts. To change the rendering FPS cap at runtime, set [member Engine.max_fps] instead. + + If [code]true[/code], the engine header is printed in the console on startup. This header describes the current version of the engine, as well as the renderer being used. This behavior can also be disabled on the command line with the [code]--no-header[/code] option. + Audio buses will disable automatically when sound goes below a given dB threshold for a given time. This saves CPU as effects assigned to that bus will no longer do any processing. diff --git a/drivers/gles3/rasterizer_gles3.cpp b/drivers/gles3/rasterizer_gles3.cpp index 0a20d8383627..f5296f969f07 100644 --- a/drivers/gles3/rasterizer_gles3.cpp +++ b/drivers/gles3/rasterizer_gles3.cpp @@ -193,7 +193,7 @@ typedef void(GLAPIENTRY *DEBUGPROCARB)(GLenum source, typedef void(GLAPIENTRY *DebugMessageCallbackARB)(DEBUGPROCARB callback, const void *userParam); void RasterizerGLES3::initialize() { - print_line(vformat("OpenGL API %s - Compatibility - Using Device: %s - %s", RS::get_singleton()->get_video_adapter_api_version(), RS::get_singleton()->get_video_adapter_vendor(), RS::get_singleton()->get_video_adapter_name())); + Engine::get_singleton()->print_header(vformat("OpenGL API %s - Compatibility - Using Device: %s - %s", RS::get_singleton()->get_video_adapter_api_version(), RS::get_singleton()->get_video_adapter_vendor(), RS::get_singleton()->get_video_adapter_name())); } void RasterizerGLES3::finalize() { diff --git a/main/main.cpp b/main/main.cpp index ceb2cbbae7e4..4c9c159f47da 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -483,6 +483,7 @@ void Main::print_help(const char *p_binary) { print_help_option("--version", "Display the version string.\n"); print_help_option("-v, --verbose", "Use verbose stdout mode.\n"); print_help_option("--quiet", "Quiet mode, silences stdout messages. Errors are still displayed.\n"); + print_help_option("--no-header", "Do not print engine version and rendering method header on startup.\n"); print_help_title("Run options"); print_help_option("--, ++", "Separator for user-provided arguments. Following arguments are not used by the engine, but can be read from `OS.get_cmdline_user_args()`.\n"); @@ -1013,6 +1014,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph quiet_stdout = true; + } else if (I->get() == "--no-header") { + Engine::get_singleton()->_print_header = false; + } else if (I->get() == "--audio-driver") { // audio driver if (I->next()) { @@ -1833,6 +1837,10 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph if (bool(GLOBAL_GET("application/run/disable_stderr"))) { CoreGlobals::print_error_enabled = false; } + if (!bool(GLOBAL_GET("application/run/print_header"))) { + // --no-header option for project settings. + Engine::get_singleton()->_print_header = false; + } if (quiet_stdout) { CoreGlobals::print_line_enabled = false; @@ -2449,7 +2457,7 @@ Error Main::setup2() { set_current_thread_safe_for_nodes(true); // Print engine name and version - print_line(String(VERSION_NAME) + " v" + get_full_version_string() + " - " + String(VERSION_WEBSITE)); + Engine::get_singleton()->print_header(String(VERSION_NAME) + " v" + get_full_version_string() + " - " + String(VERSION_WEBSITE)); #ifdef TOOLS_ENABLED if (editor || project_manager || cmdline_tool) { @@ -2742,8 +2750,6 @@ Error Main::setup2() { AudioDriverManager::initialize(audio_driver_idx); - print_line(" "); // Add a blank line for readability. - // Right moment to create and initialize the audio server. audio_server = memnew(AudioServer); audio_server->init(); @@ -2763,6 +2769,9 @@ Error Main::setup2() { OS::get_singleton()->benchmark_end_measure("Startup", "Servers"); + // Add a blank line for readability. + Engine::get_singleton()->print_header(""); + register_core_singletons(); /* Initialize the main window and boot screen */ diff --git a/servers/rendering/rendering_device.cpp b/servers/rendering/rendering_device.cpp index 3290738b4082..3b51f5274a92 100644 --- a/servers/rendering/rendering_device.cpp +++ b/servers/rendering/rendering_device.cpp @@ -4983,7 +4983,7 @@ Error RenderingDevice::initialize(RenderingContextDriver *p_context, DisplayServ } // Output our device version. - print_line(vformat("%s %s - %s - Using Device #%d: %s - %s", get_device_api_name(), get_device_api_version(), rendering_method, device_index, _get_device_vendor_name(device), device.name)); + Engine::get_singleton()->print_header(vformat("%s %s - %s - Using Device #%d: %s - %s", get_device_api_name(), get_device_api_version(), rendering_method, device_index, _get_device_vendor_name(device), device.name)); } // Pick the main queue family. It is worth noting we explicitly do not request the transfer bit, as apparently the specification defines