From 90b4b48b5a9ea1c8b29654576480d9ab672b48b3 Mon Sep 17 00:00:00 2001 From: clayjohn Date: Wed, 30 Oct 2024 17:04:02 -0700 Subject: [PATCH] Ensure shadow material and mesh are not used with wireframe mode And in the Compatibility renderer actually use the wireframe render mode --- doc/classes/RenderingServer.xml | 4 +++- doc/classes/Viewport.xml | 1 + drivers/gles3/rasterizer_scene_gles3.cpp | 4 ++-- .../forward_clustered/scene_shader_forward_clustered.h | 2 +- .../renderer_rd/forward_mobile/scene_shader_forward_mobile.h | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/doc/classes/RenderingServer.xml b/doc/classes/RenderingServer.xml index 26f80630bb60..134ccf101766 100644 --- a/doc/classes/RenderingServer.xml +++ b/doc/classes/RenderingServer.xml @@ -3314,7 +3314,8 @@ - This method is currently unimplemented and does nothing if called with [param generate] set to [code]true[/code]. + If [param generate] is [code]true[/code], generates debug wireframes for all meshes that are loaded when using the Compatibility renderer. By default, the engine does not generate debug wireframes at runtime, since they slow down loading of assets and take up VRAM. + [b]Note:[/b] You must call this method before loading any meshes when using the Compatibility renderer, otherwise wireframes will not be used. @@ -5047,6 +5048,7 @@ Debug draw draws objects in wireframe. + [b]Note:[/b] [method set_debug_generate_wireframes] must be called before loading any meshes for wireframes to be visible when using the Compatibility renderer. Normal buffer is drawn instead of regular scene so you can see the per-pixel normals that will be used by post-processing effects. diff --git a/doc/classes/Viewport.xml b/doc/classes/Viewport.xml index 78b6d527ea4b..678b7690d973 100644 --- a/doc/classes/Viewport.xml +++ b/doc/classes/Viewport.xml @@ -555,6 +555,7 @@ Objects are displayed as wireframe models. + [b]Note:[/b] [method RenderingServer.set_debug_generate_wireframes] must be called before loading any meshes for wireframes to be visible when using the Compatibility renderer. Objects are displayed without lighting information and their textures replaced by normal mapping. diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp index 537076d4edd9..dfc7d02ac041 100644 --- a/drivers/gles3/rasterizer_scene_gles3.cpp +++ b/drivers/gles3/rasterizer_scene_gles3.cpp @@ -238,7 +238,7 @@ void RasterizerSceneGLES3::_geometry_instance_add_surface_with_material(Geometry GLES3::SceneMaterialData *material_shadow = nullptr; void *surface_shadow = nullptr; - if (!p_material->shader_data->uses_particle_trails && !p_material->shader_data->writes_modelview_or_projection && !p_material->shader_data->uses_vertex && !p_material->shader_data->uses_discard && !p_material->shader_data->uses_depth_prepass_alpha && !p_material->shader_data->uses_alpha_clip && !p_material->shader_data->uses_world_coordinates) { + if (!p_material->shader_data->uses_particle_trails && !p_material->shader_data->writes_modelview_or_projection && !p_material->shader_data->uses_vertex && !p_material->shader_data->uses_discard && !p_material->shader_data->uses_depth_prepass_alpha && !p_material->shader_data->uses_alpha_clip && !p_material->shader_data->uses_world_coordinates && !p_material->shader_data->wireframe) { flags |= GeometryInstanceSurface::FLAG_USES_SHARED_SHADOW_MATERIAL; material_shadow = static_cast(GLES3::MaterialStorage::get_singleton()->material_get_data(scene_globals.default_material, RS::SHADER_SPATIAL)); @@ -3157,7 +3157,7 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params, } bool use_wireframe = false; - if (p_params->force_wireframe) { + if (p_params->force_wireframe || shader->wireframe) { GLuint wireframe_index_array_gl = mesh_storage->mesh_surface_get_index_buffer_wireframe(mesh_surface); if (wireframe_index_array_gl) { index_array_gl = wireframe_index_array_gl; diff --git a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h index e1ed85779e7a..1f4058a1219d 100644 --- a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h +++ b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h @@ -273,7 +273,7 @@ class SceneShaderForwardClustered { _FORCE_INLINE_ bool uses_shared_shadow_material() const { bool backface_culling = cull_mode == CULL_BACK; - return !uses_particle_trails && !writes_modelview_or_projection && !uses_vertex && !uses_position && !uses_discard && !uses_depth_prepass_alpha && !uses_alpha_clip && !uses_alpha_antialiasing && backface_culling && !uses_point_size && !uses_world_coordinates; + return !uses_particle_trails && !writes_modelview_or_projection && !uses_vertex && !uses_position && !uses_discard && !uses_depth_prepass_alpha && !uses_alpha_clip && !uses_alpha_antialiasing && backface_culling && !uses_point_size && !uses_world_coordinates && !wireframe; } virtual void set_code(const String &p_Code); diff --git a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h index f0afeebe7997..e2549d1f0062 100644 --- a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h +++ b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h @@ -243,7 +243,7 @@ class SceneShaderForwardMobile { } _FORCE_INLINE_ bool uses_shared_shadow_material() const { - return !uses_particle_trails && !writes_modelview_or_projection && !uses_vertex && !uses_discard && !uses_depth_prepass_alpha && !uses_alpha_clip && !uses_alpha_antialiasing && !uses_world_coordinates; + return !uses_particle_trails && !writes_modelview_or_projection && !uses_vertex && !uses_discard && !uses_depth_prepass_alpha && !uses_alpha_clip && !uses_alpha_antialiasing && !uses_world_coordinates && !wireframe; } virtual void set_code(const String &p_Code);