mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	Mask out shadows on CanvasItems that don't have a matching item_shadow_mask
This restores the behavior from 3.x
This commit is contained in:
		
							parent
							
								
									f952bfe998
								
							
						
					
					
						commit
						2b68c63a88
					
				
					 8 changed files with 200 additions and 175 deletions
				
			
		|  | @ -65,31 +65,31 @@ class RendererCanvasRenderRD : public RendererCanvasRender { | |||
| 	}; | ||||
| 
 | ||||
| 	enum { | ||||
| 		INSTANCE_FLAGS_LIGHT_COUNT_SHIFT = 0, // 4 bits for light count.
 | ||||
| 
 | ||||
| 		FLAGS_INSTANCING_MASK = 0x7F, | ||||
| 		FLAGS_INSTANCING_HAS_COLORS = (1 << 7), | ||||
| 		FLAGS_INSTANCING_HAS_CUSTOM_DATA = (1 << 8), | ||||
| 		INSTANCE_FLAGS_CLIP_RECT_UV = (1 << 4), | ||||
| 		INSTANCE_FLAGS_TRANSPOSE_RECT = (1 << 5), | ||||
| 		INSTANCE_FLAGS_USE_MSDF = (1 << 6), | ||||
| 		INSTANCE_FLAGS_USE_LCD = (1 << 7), | ||||
| 
 | ||||
| 		FLAGS_CLIP_RECT_UV = (1 << 9), | ||||
| 		FLAGS_TRANSPOSE_RECT = (1 << 10), | ||||
| 		INSTANCE_FLAGS_NINEPACH_DRAW_CENTER = (1 << 8), | ||||
| 		INSTANCE_FLAGS_NINEPATCH_H_MODE_SHIFT = 9, | ||||
| 		INSTANCE_FLAGS_NINEPATCH_V_MODE_SHIFT = 11, | ||||
| 
 | ||||
| 		FLAGS_CONVERT_ATTRIBUTES_TO_LINEAR = (1 << 11), | ||||
| 		INSTANCE_FLAGS_SHADOW_MASKED_SHIFT = 13, // 16 bits.
 | ||||
| 	}; | ||||
| 
 | ||||
| 		FLAGS_NINEPACH_DRAW_CENTER = (1 << 12), | ||||
| 	enum { | ||||
| 		BATCH_FLAGS_INSTANCING_MASK = 0x7F, | ||||
| 		BATCH_FLAGS_INSTANCING_HAS_COLORS = (1 << 7), | ||||
| 		BATCH_FLAGS_INSTANCING_HAS_CUSTOM_DATA = (1 << 8), | ||||
| 
 | ||||
| 		FLAGS_USE_SKELETON = (1 << 15), | ||||
| 		FLAGS_NINEPATCH_H_MODE_SHIFT = 16, | ||||
| 		FLAGS_NINEPATCH_V_MODE_SHIFT = 18, | ||||
| 		FLAGS_LIGHT_COUNT_SHIFT = 20, | ||||
| 		BATCH_FLAGS_DEFAULT_NORMAL_MAP_USED = (1 << 9), | ||||
| 		BATCH_FLAGS_DEFAULT_SPECULAR_MAP_USED = (1 << 10), | ||||
| 	}; | ||||
| 
 | ||||
| 		FLAGS_DEFAULT_NORMAL_MAP_USED = (1 << 24), | ||||
| 		FLAGS_DEFAULT_SPECULAR_MAP_USED = (1 << 25), | ||||
| 
 | ||||
| 		FLAGS_USE_MSDF = (1 << 26), | ||||
| 		FLAGS_USE_LCD = (1 << 27), | ||||
| 
 | ||||
| 		FLAGS_FLIP_H = (1 << 28), | ||||
| 		FLAGS_FLIP_V = (1 << 29), | ||||
| 	enum { | ||||
| 		CANVAS_FLAGS_CONVERT_ATTRIBUTES_TO_LINEAR = (1 << 0), | ||||
| 	}; | ||||
| 
 | ||||
| 	enum { | ||||
|  | @ -370,7 +370,7 @@ class RendererCanvasRenderRD : public RendererCanvasRender { | |||
| 		uint32_t base_instance_index; | ||||
| 		ShaderSpecialization shader_specialization; | ||||
| 		uint32_t specular_shininess; | ||||
| 		uint32_t pad; | ||||
| 		uint32_t batch_flags; | ||||
| 	}; | ||||
| 
 | ||||
| 	// TextureState is used to determine when a new batch is required due to a change of texture state.
 | ||||
|  | @ -508,6 +508,7 @@ class RendererCanvasRenderRD : public RendererCanvasRender { | |||
| 			uint32_t mesh_instance_count; | ||||
| 		}; | ||||
| 		bool has_blend = false; | ||||
| 		uint32_t flags = 0; | ||||
| 	}; | ||||
| 
 | ||||
| 	HashMap<TextureState, TextureInfo, HashableHasher<TextureState>> texture_info_map; | ||||
|  | @ -535,7 +536,7 @@ class RendererCanvasRenderRD : public RendererCanvasRender { | |||
| 
 | ||||
| 			uint32_t directional_light_count; | ||||
| 			float tex_to_sdf; | ||||
| 			uint32_t pad1; | ||||
| 			uint32_t flags; | ||||
| 			uint32_t pad2; | ||||
| 		}; | ||||
| 
 | ||||
|  | @ -596,9 +597,7 @@ class RendererCanvasRenderRD : public RendererCanvasRender { | |||
| 	struct RenderTarget { | ||||
| 		// Current render target for the canvas.
 | ||||
| 		RID render_target; | ||||
| 		// The base flags for each InstanceData, derived from the render target.
 | ||||
| 		// Either FLAGS_CONVERT_ATTRIBUTES_TO_LINEAR or 0
 | ||||
| 		uint32_t base_flags = 0; | ||||
| 		bool use_linear_colors = false; | ||||
| 	}; | ||||
| 
 | ||||
| 	inline RID _get_pipeline_specialization_or_ubershader(CanvasShaderData *p_shader_data, PipelineKey &r_pipeline_key, PushConstant &r_push_constant, RID p_mesh_instance = RID(), void *p_surface = nullptr, uint32_t p_surface_index = 0, RID *r_vertex_array = nullptr); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 clayjohn
						clayjohn