summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcosparks <cosparks@students.cs.ubc.ca>2024-04-18 20:10:55 -0700
committercosparks <cosparks@students.cs.ubc.ca>2024-04-22 20:27:56 -0700
commit6d0dca76c08114b6b2cb69430f102cb85aa9d60a (patch)
treef6c01b0976b0962f1a5258c9e1afd93fe29bb751
parent7abe0c6014022874378cb64a11b26b0f0f178324 (diff)
downloadredot-engine-6d0dca76c08114b6b2cb69430f102cb85aa9d60a.tar.gz
Fixes SDF Collision Enable/Disable
- sets LightOccluderInstance field when sdf collision is updated - adds check for light occluder sdf_collision field in 2d renderers
-rw-r--r--drivers/gles3/rasterizer_canvas_gles3.cpp2
-rw-r--r--servers/rendering/renderer_canvas_cull.cpp2
-rw-r--r--servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp2
3 files changed, 4 insertions, 2 deletions
diff --git a/drivers/gles3/rasterizer_canvas_gles3.cpp b/drivers/gles3/rasterizer_canvas_gles3.cpp
index 9fa95a93f8..5fabeb94f5 100644
--- a/drivers/gles3/rasterizer_canvas_gles3.cpp
+++ b/drivers/gles3/rasterizer_canvas_gles3.cpp
@@ -1922,7 +1922,7 @@ void RasterizerCanvasGLES3::render_sdf(RID p_render_target, LightOccluderInstanc
while (instance) {
OccluderPolygon *oc = occluder_polygon_owner.get_or_null(instance->occluder);
- if (!oc || oc->sdf_vertex_array == 0) {
+ if (!oc || oc->sdf_vertex_array == 0 || !instance->sdf_collision) {
instance = instance->next;
continue;
}
diff --git a/servers/rendering/renderer_canvas_cull.cpp b/servers/rendering/renderer_canvas_cull.cpp
index 46c84fd230..34f9069649 100644
--- a/servers/rendering/renderer_canvas_cull.cpp
+++ b/servers/rendering/renderer_canvas_cull.cpp
@@ -1970,6 +1970,8 @@ void RendererCanvasCull::canvas_light_occluder_set_polygon(RID p_occluder, RID p
void RendererCanvasCull::canvas_light_occluder_set_as_sdf_collision(RID p_occluder, bool p_enable) {
RendererCanvasRender::LightOccluderInstance *occluder = canvas_light_occluder_owner.get_or_null(p_occluder);
ERR_FAIL_NULL(occluder);
+
+ occluder->sdf_collision = p_enable;
}
void RendererCanvasCull::canvas_light_occluder_set_transform(RID p_occluder, const Transform2D &p_xform) {
diff --git a/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp b/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp
index 6f56711151..fa8cf9c028 100644
--- a/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp
@@ -1931,7 +1931,7 @@ void RendererCanvasRenderRD::render_sdf(RID p_render_target, LightOccluderInstan
while (instance) {
OccluderPolygon *co = occluder_polygon_owner.get_or_null(instance->occluder);
- if (!co || co->sdf_index_array.is_null()) {
+ if (!co || co->sdf_index_array.is_null() || !instance->sdf_collision) {
instance = instance->next;
continue;
}