|
@@ -1787,6 +1787,7 @@ void RendererSceneCull::_update_instance(Instance *p_instance) {
|
|
pair.pair_allocator = &pair_allocator;
|
|
pair.pair_allocator = &pair_allocator;
|
|
pair.pair_pass = pair_pass;
|
|
pair.pair_pass = pair_pass;
|
|
pair.pair_mask = 0;
|
|
pair.pair_mask = 0;
|
|
|
|
+ pair.cull_mask = 0xFFFFFFFF;
|
|
|
|
|
|
if ((1 << p_instance->base_type) & RS::INSTANCE_GEOMETRY_MASK) {
|
|
if ((1 << p_instance->base_type) & RS::INSTANCE_GEOMETRY_MASK) {
|
|
pair.pair_mask |= 1 << RS::INSTANCE_LIGHT;
|
|
pair.pair_mask |= 1 << RS::INSTANCE_LIGHT;
|
|
@@ -1807,12 +1808,14 @@ void RendererSceneCull::_update_instance(Instance *p_instance) {
|
|
pair.pair_mask |= (1 << RS::INSTANCE_VOXEL_GI);
|
|
pair.pair_mask |= (1 << RS::INSTANCE_VOXEL_GI);
|
|
pair.bvh2 = &p_instance->scenario->indexers[Scenario::INDEXER_VOLUMES];
|
|
pair.bvh2 = &p_instance->scenario->indexers[Scenario::INDEXER_VOLUMES];
|
|
}
|
|
}
|
|
|
|
+ pair.cull_mask = RSG::light_storage->light_get_cull_mask(p_instance->base);
|
|
} else if (geometry_instance_pair_mask & (1 << RS::INSTANCE_REFLECTION_PROBE) && (p_instance->base_type == RS::INSTANCE_REFLECTION_PROBE)) {
|
|
} else if (geometry_instance_pair_mask & (1 << RS::INSTANCE_REFLECTION_PROBE) && (p_instance->base_type == RS::INSTANCE_REFLECTION_PROBE)) {
|
|
pair.pair_mask = RS::INSTANCE_GEOMETRY_MASK;
|
|
pair.pair_mask = RS::INSTANCE_GEOMETRY_MASK;
|
|
pair.bvh = &p_instance->scenario->indexers[Scenario::INDEXER_GEOMETRY];
|
|
pair.bvh = &p_instance->scenario->indexers[Scenario::INDEXER_GEOMETRY];
|
|
} else if (geometry_instance_pair_mask & (1 << RS::INSTANCE_DECAL) && (p_instance->base_type == RS::INSTANCE_DECAL)) {
|
|
} else if (geometry_instance_pair_mask & (1 << RS::INSTANCE_DECAL) && (p_instance->base_type == RS::INSTANCE_DECAL)) {
|
|
pair.pair_mask = RS::INSTANCE_GEOMETRY_MASK;
|
|
pair.pair_mask = RS::INSTANCE_GEOMETRY_MASK;
|
|
pair.bvh = &p_instance->scenario->indexers[Scenario::INDEXER_GEOMETRY];
|
|
pair.bvh = &p_instance->scenario->indexers[Scenario::INDEXER_GEOMETRY];
|
|
|
|
+ pair.cull_mask = RSG::texture_storage->decal_get_cull_mask(p_instance->base);
|
|
} else if (p_instance->base_type == RS::INSTANCE_PARTICLES_COLLISION) {
|
|
} else if (p_instance->base_type == RS::INSTANCE_PARTICLES_COLLISION) {
|
|
pair.pair_mask = (1 << RS::INSTANCE_PARTICLES);
|
|
pair.pair_mask = (1 << RS::INSTANCE_PARTICLES);
|
|
pair.bvh = &p_instance->scenario->indexers[Scenario::INDEXER_GEOMETRY];
|
|
pair.bvh = &p_instance->scenario->indexers[Scenario::INDEXER_GEOMETRY];
|