|
@@ -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();
|