mirror of
https://github.com/godotengine/godot.git
synced 2025-12-08 06:09:55 +00:00
Merge pull request #102399 from clayjohn/cull-mask-overhaul
Overhaul the cull mask internals for Lights, Decals, and Particle Colliders
This commit is contained in:
commit
19bb18716e
13 changed files with 67 additions and 14 deletions
|
|
@ -1120,9 +1120,6 @@ void main() {
|
|||
uvec2 decal_indices = instances.data[draw_call.instance_index].decals;
|
||||
for (uint i = 0; i < sc_decals(); i++) {
|
||||
uint decal_index = (i > 3) ? ((decal_indices.y >> ((i - 4) * 8)) & 0xFF) : ((decal_indices.x >> (i * 8)) & 0xFF);
|
||||
if (!bool(decals.data[decal_index].mask & instances.data[draw_call.instance_index].layer_mask)) {
|
||||
continue; //not masked
|
||||
}
|
||||
|
||||
vec3 uv_local = (decals.data[decal_index].xform * vec4(vertex, 1.0)).xyz;
|
||||
if (any(lessThan(uv_local, vec3(0.0, -1.0, 0.0))) || any(greaterThan(uv_local, vec3(1.0)))) {
|
||||
|
|
|
|||
|
|
@ -268,7 +268,7 @@ void LightStorage::light_set_cull_mask(RID p_light, uint32_t p_mask) {
|
|||
light->cull_mask = p_mask;
|
||||
|
||||
light->version++;
|
||||
light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_LIGHT);
|
||||
light->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_CULL_MASK);
|
||||
}
|
||||
|
||||
void LightStorage::light_set_distance_fade(RID p_light, bool p_enabled, float p_begin, float p_shadow, float p_length) {
|
||||
|
|
|
|||
|
|
@ -1850,6 +1850,13 @@ void ParticlesStorage::particles_collision_set_cull_mask(RID p_particles_collisi
|
|||
ParticlesCollision *particles_collision = particles_collision_owner.get_or_null(p_particles_collision);
|
||||
ERR_FAIL_NULL(particles_collision);
|
||||
particles_collision->cull_mask = p_cull_mask;
|
||||
particles_collision->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_CULL_MASK);
|
||||
}
|
||||
|
||||
uint32_t ParticlesStorage::particles_collision_get_cull_mask(RID p_particles_collision) const {
|
||||
ParticlesCollision *particles_collision = particles_collision_owner.get_or_null(p_particles_collision);
|
||||
ERR_FAIL_NULL_V(particles_collision, 0);
|
||||
return particles_collision->cull_mask;
|
||||
}
|
||||
|
||||
uint32_t ParticlesStorage::particles_collision_get_height_field_mask(RID p_particles_collision) const {
|
||||
|
|
|
|||
|
|
@ -583,6 +583,7 @@ public:
|
|||
RID particles_collision_get_heightfield_framebuffer(RID p_particles_collision) const;
|
||||
virtual uint32_t particles_collision_get_height_field_mask(RID p_particles_collision) const override;
|
||||
virtual void particles_collision_set_height_field_mask(RID p_particles_collision, uint32_t p_heightfield_mask) override;
|
||||
virtual uint32_t particles_collision_get_cull_mask(RID p_particles_collision) const override;
|
||||
|
||||
Dependency *particles_collision_get_dependency(RID p_particles) const;
|
||||
|
||||
|
|
|
|||
|
|
@ -2744,7 +2744,7 @@ void TextureStorage::decal_set_cull_mask(RID p_decal, uint32_t p_layers) {
|
|||
Decal *decal = decal_owner.get_or_null(p_decal);
|
||||
ERR_FAIL_NULL(decal);
|
||||
decal->cull_mask = p_layers;
|
||||
decal->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_DECAL);
|
||||
decal->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_CULL_MASK);
|
||||
}
|
||||
|
||||
void TextureStorage::decal_set_distance_fade(RID p_decal, bool p_enabled, float p_begin, float p_length) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue