You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-07 12:30:27 +00:00
Fix crash in visibility range system.
This commit is contained in:
@@ -2578,7 +2578,7 @@ void RendererSceneCull::_scene_cull(CullData &cull_data, InstanceCullResult &cul
|
||||
#define HIDDEN_BY_VISIBILITY_CHECKS (visibility_flags == InstanceData::FLAG_VISIBILITY_DEPENDENCY_HIDDEN_CLOSE_RANGE || visibility_flags == InstanceData::FLAG_VISIBILITY_DEPENDENCY_HIDDEN)
|
||||
#define LAYER_CHECK (cull_data.visible_layers & idata.layer_mask)
|
||||
#define IN_FRUSTUM(f) (cull_data.scenario->instance_aabbs[i].in_frustum(f))
|
||||
#define VIS_RANGE_CHECK ((idata.visibility_index == -1) || _visibility_range_check(cull_data.scenario->instance_visibility[idata.visibility_index], cull_data.cam_transform.origin, cull_data.visibility_cull_data->viewport_mask) == 0)
|
||||
#define VIS_RANGE_CHECK ((idata.visibility_index == -1) || _visibility_range_check(cull_data.scenario->instance_visibility[idata.visibility_index], cull_data.cam_transform.origin, cull_data.visibility_viewport_mask) == 0)
|
||||
#define VIS_PARENT_CHECK ((idata.parent_array_index == -1) || ((cull_data.scenario->instance_data[idata.parent_array_index].flags & InstanceData::FLAG_VISIBILITY_DEPENDENCY_NEEDS_CHECK) == InstanceData::FLAG_VISIBILITY_DEPENDENCY_HIDDEN_CLOSE_RANGE))
|
||||
#define VIS_CHECK (visibility_check < 0 ? (visibility_check = (visibility_flags != InstanceData::FLAG_VISIBILITY_DEPENDENCY_NEEDS_CHECK || (VIS_RANGE_CHECK && VIS_PARENT_CHECK))) : visibility_check)
|
||||
#define OCCLUSION_CULLED (cull_data.occlusion_buffer != nullptr && (cull_data.scenario->instance_data[i].flags & InstanceData::FLAG_IGNORE_OCCLUSION_CULLING) == 0 && cull_data.occlusion_buffer->is_occluded(cull_data.scenario->instance_aabbs[i].bounds, cull_data.cam_transform.origin, inv_cam_transform, *cull_data.camera_matrix, z_near))
|
||||
@@ -2808,12 +2808,12 @@ void RendererSceneCull::_render_scene(const RendererSceneRender::CameraData *p_c
|
||||
|
||||
RENDER_TIMESTAMP("Visibility Dependencies");
|
||||
|
||||
VisibilityCullData visibility_cull_data;
|
||||
if (scenario->instance_visibility.get_bin_count() > 0) {
|
||||
if (!scenario->viewport_visibility_masks.has(p_viewport)) {
|
||||
scenario_add_viewport_visibility_mask(scenario->self, p_viewport);
|
||||
}
|
||||
|
||||
VisibilityCullData visibility_cull_data;
|
||||
visibility_cull_data.scenario = scenario;
|
||||
visibility_cull_data.viewport_mask = scenario->viewport_visibility_masks[p_viewport];
|
||||
visibility_cull_data.camera_position = p_camera_data->main_transform.origin;
|
||||
@@ -2924,6 +2924,7 @@ void RendererSceneCull::_render_scene(const RendererSceneRender::CameraData *p_c
|
||||
cull_data.render_reflection_probe = render_reflection_probe;
|
||||
cull_data.occlusion_buffer = RendererSceneOcclusionCull::get_singleton()->buffer_get_ptr(p_viewport);
|
||||
cull_data.camera_matrix = &p_camera_data->main_projection;
|
||||
cull_data.visibility_viewport_mask = scenario->viewport_visibility_masks.has(p_viewport) ? scenario->viewport_visibility_masks[p_viewport] : 0;
|
||||
//#define DEBUG_CULL_TIME
|
||||
#ifdef DEBUG_CULL_TIME
|
||||
uint64_t time_from = OS::get_singleton()->get_ticks_usec();
|
||||
|
||||
Reference in New Issue
Block a user