Fix bad parameter of rendering_method crashes Godot

Print error and default to forward plus

(cherry picked from commit b6bee1c21e)
This commit is contained in:
jsjtxietian 2023-10-31 17:58:04 +08:00 committed by Rémi Verschelde
parent 2cbe02ad70
commit b768561154
No known key found for this signature in database
GPG Key ID: C3336907360768E1
1 changed files with 4 additions and 3 deletions

View File

@ -310,15 +310,16 @@ RendererCompositorRD::RendererCompositorRD() {
uint64_t textures_per_stage = RD::get_singleton()->limit_get(RD::LIMIT_MAX_TEXTURES_PER_SHADER_STAGE); uint64_t textures_per_stage = RD::get_singleton()->limit_get(RD::LIMIT_MAX_TEXTURES_PER_SHADER_STAGE);
if (rendering_method == "mobile" || textures_per_stage < 48) { if (rendering_method == "mobile" || textures_per_stage < 48) {
scene = memnew(RendererSceneRenderImplementation::RenderForwardMobile());
if (rendering_method == "forward_plus") { if (rendering_method == "forward_plus") {
WARN_PRINT_ONCE("Platform supports less than 48 textures per stage which is less than required by the Clustered renderer. Defaulting to Mobile renderer."); WARN_PRINT_ONCE("Platform supports less than 48 textures per stage which is less than required by the Clustered renderer. Defaulting to Mobile renderer.");
} }
scene = memnew(RendererSceneRenderImplementation::RenderForwardMobile());
} else if (rendering_method == "forward_plus") { } else if (rendering_method == "forward_plus") {
// default to our high end renderer
scene = memnew(RendererSceneRenderImplementation::RenderForwardClustered()); scene = memnew(RendererSceneRenderImplementation::RenderForwardClustered());
} else { } else {
ERR_FAIL_MSG("Cannot instantiate RenderingDevice-based renderer with renderer type " + rendering_method); // Fall back to our high end renderer.
ERR_PRINT(vformat("Cannot instantiate RenderingDevice-based renderer with renderer type '%s'. Defaulting to Forward+ renderer.", rendering_method));
scene = memnew(RendererSceneRenderImplementation::RenderForwardClustered());
} }
scene->init(); scene->init();