diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index ffb61ab20d3..57387aa65ad 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -2226,7 +2226,8 @@ [b]Note:[/b] Depth prepass is only supported when using the Forward+ or Compatibility rendering method. When using the Mobile rendering method, there is no depth prepass performed. - Thread model for rendering. Rendering on a thread can vastly improve performance, but synchronizing to the main thread can cause a bit more jitter. + The thread model to use for rendering. Rendering on a thread may improve performance, but synchronizing to the main thread can cause a bit more jitter. + [b]Note:[/b] The [b]Multi-Threaded[/b] option is experimental, and has several known bugs which can lead to crashing, especially when using particles or resizing the window. Not recommended for use in production at this stage. Default background clear color. Overridable per [Viewport] using its [Environment]. See [member Environment.background_mode] and [member Environment.background_color] in particular. To change this default color programmatically, use [method RenderingServer.set_default_clear_color]. diff --git a/main/main.cpp b/main/main.cpp index b759944ff03..f7de02fb733 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1150,6 +1150,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph rtm = OS::RENDER_THREAD_UNSAFE; } else if (I->next()->get() == "separate") { rtm = OS::RENDER_SEPARATE_THREAD; + } else { + OS::get_singleton()->print("Unknown render thread mode, aborting.\nValid options are 'unsafe', 'safe' and 'separate'.\n"); + goto error; } N = I->next()->next(); @@ -1875,7 +1878,8 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph } if (rtm >= 0 && rtm < 3) { - if (editor) { + if (editor || project_manager) { + // Editor and project manager cannot run with rendering in a separate thread (they will crash on startup). rtm = OS::RENDER_THREAD_SAFE; } OS::get_singleton()->_render_thread_mode = OS::RenderThreadMode(rtm); @@ -2209,6 +2213,10 @@ Error Main::setup2() { } } + if (OS::get_singleton()->_render_thread_mode == OS::RENDER_SEPARATE_THREAD) { + WARN_PRINT("The Multi-Threaded rendering thread model is experimental, and has known issues which can lead to project crashes. Use the Single-Safe option in the project settings instead."); + } + /* Initialize Pen Tablet Driver */ {