mirror of
https://github.com/godotengine/godot.git
synced 2025-11-03 15:11:19 +00:00
Merge pull request #72075 from Maran23/extents-to-size
Replace Extents with Size in VoxelGI, ReflectionProbe, FogVolume, Decal and GPUParticles*3D
This commit is contained in:
commit
3eb1ac9fd2
55 changed files with 573 additions and 371 deletions
|
|
@ -330,7 +330,7 @@ public:
|
|||
render_element_count++;
|
||||
}
|
||||
|
||||
_FORCE_INLINE_ void add_box(BoxType p_box_type, const Transform3D &p_transform, const Vector3 &p_half_extents) {
|
||||
_FORCE_INLINE_ void add_box(BoxType p_box_type, const Transform3D &p_transform, const Vector3 &p_half_size) {
|
||||
if (p_box_type == BOX_TYPE_DECAL && cluster_count_by_type[ELEMENT_TYPE_DECAL] == max_elements_by_type) {
|
||||
return; // Max number elements reached.
|
||||
}
|
||||
|
|
@ -342,7 +342,7 @@ public:
|
|||
Transform3D xform = view_xform * p_transform;
|
||||
|
||||
// Extract scale and scale the matrix by it, makes things simpler.
|
||||
Vector3 scale = p_half_extents;
|
||||
Vector3 scale = p_half_size;
|
||||
for (uint32_t i = 0; i < 3; i++) {
|
||||
float s = xform.basis.rows[i].length();
|
||||
scale[i] *= s;
|
||||
|
|
|
|||
|
|
@ -82,11 +82,11 @@ void Fog::fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape) {
|
|||
fog_volume->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB);
|
||||
}
|
||||
|
||||
void Fog::fog_volume_set_extents(RID p_fog_volume, const Vector3 &p_extents) {
|
||||
void Fog::fog_volume_set_size(RID p_fog_volume, const Vector3 &p_size) {
|
||||
FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume);
|
||||
ERR_FAIL_COND(!fog_volume);
|
||||
|
||||
fog_volume->extents = p_extents;
|
||||
fog_volume->size = p_size;
|
||||
fog_volume->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB);
|
||||
}
|
||||
|
||||
|
|
@ -120,8 +120,8 @@ AABB Fog::fog_volume_get_aabb(RID p_fog_volume) const {
|
|||
case RS::FOG_VOLUME_SHAPE_CYLINDER:
|
||||
case RS::FOG_VOLUME_SHAPE_BOX: {
|
||||
AABB aabb;
|
||||
aabb.position = -fog_volume->extents;
|
||||
aabb.size = fog_volume->extents * 2;
|
||||
aabb.position = -fog_volume->size / 2;
|
||||
aabb.size = fog_volume->size;
|
||||
return aabb;
|
||||
}
|
||||
default: {
|
||||
|
|
@ -131,10 +131,10 @@ AABB Fog::fog_volume_get_aabb(RID p_fog_volume) const {
|
|||
}
|
||||
}
|
||||
|
||||
Vector3 Fog::fog_volume_get_extents(RID p_fog_volume) const {
|
||||
Vector3 Fog::fog_volume_get_size(RID p_fog_volume) const {
|
||||
const FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume);
|
||||
ERR_FAIL_COND_V(!fog_volume, Vector3());
|
||||
return fog_volume->extents;
|
||||
return fog_volume->size;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -210,7 +210,7 @@ void Fog::init_fog_shader(uint32_t p_max_directional_lights, int p_roughness_lay
|
|||
actions.renames["WORLD_POSITION"] = "world.xyz";
|
||||
actions.renames["OBJECT_POSITION"] = "params.position";
|
||||
actions.renames["UVW"] = "uvw";
|
||||
actions.renames["EXTENTS"] = "params.extents";
|
||||
actions.renames["SIZE"] = "params.size";
|
||||
actions.renames["ALBEDO"] = "albedo";
|
||||
actions.renames["DENSITY"] = "density";
|
||||
actions.renames["EMISSION"] = "emission";
|
||||
|
|
@ -643,7 +643,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
|||
|
||||
Vector3 position = fog_volume_instance->transform.get_origin();
|
||||
RS::FogVolumeShape volume_type = RendererRD::Fog::get_singleton()->fog_volume_get_shape(fog_volume);
|
||||
Vector3 extents = RendererRD::Fog::get_singleton()->fog_volume_get_extents(fog_volume);
|
||||
Vector3 extents = RendererRD::Fog::get_singleton()->fog_volume_get_size(fog_volume) / 2;
|
||||
|
||||
if (volume_type != RS::FOG_VOLUME_SHAPE_WORLD) {
|
||||
// Local fog volume.
|
||||
|
|
@ -683,9 +683,9 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P
|
|||
push_constant.position[0] = position.x;
|
||||
push_constant.position[1] = position.y;
|
||||
push_constant.position[2] = position.z;
|
||||
push_constant.extents[0] = extents.x;
|
||||
push_constant.extents[1] = extents.y;
|
||||
push_constant.extents[2] = extents.z;
|
||||
push_constant.size[0] = extents.x * 2;
|
||||
push_constant.size[1] = extents.y * 2;
|
||||
push_constant.size[2] = extents.z * 2;
|
||||
push_constant.corner[0] = min.x;
|
||||
push_constant.corner[1] = min.y;
|
||||
push_constant.corner[2] = min.z;
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ private:
|
|||
|
||||
struct FogVolume {
|
||||
RID material;
|
||||
Vector3 extents = Vector3(1, 1, 1);
|
||||
Vector3 size = Vector3(2, 2, 2);
|
||||
|
||||
RS::FogVolumeShape shape = RS::FOG_VOLUME_SHAPE_BOX;
|
||||
|
||||
|
|
@ -83,7 +83,7 @@ private:
|
|||
float position[3];
|
||||
float pad;
|
||||
|
||||
float extents[3];
|
||||
float size[3];
|
||||
float pad2;
|
||||
|
||||
int32_t corner[3];
|
||||
|
|
@ -239,12 +239,12 @@ public:
|
|||
Dependency *fog_volume_get_dependency(RID p_fog_volume) const;
|
||||
|
||||
virtual void fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape) override;
|
||||
virtual void fog_volume_set_extents(RID p_fog_volume, const Vector3 &p_extents) override;
|
||||
virtual void fog_volume_set_size(RID p_fog_volume, const Vector3 &p_size) override;
|
||||
virtual void fog_volume_set_material(RID p_fog_volume, RID p_material) override;
|
||||
virtual RS::FogVolumeShape fog_volume_get_shape(RID p_fog_volume) const override;
|
||||
RID fog_volume_get_material(RID p_fog_volume) const;
|
||||
virtual AABB fog_volume_get_aabb(RID p_fog_volume) const override;
|
||||
Vector3 fog_volume_get_extents(RID p_fog_volume) const;
|
||||
Vector3 fog_volume_get_size(RID p_fog_volume) const;
|
||||
|
||||
/* FOG VOLUMES INSTANCE */
|
||||
|
||||
|
|
|
|||
|
|
@ -1232,9 +1232,9 @@ void RenderForwardClustered::_update_volumetric_fog(Ref<RenderSceneBuffersRD> p_
|
|||
|
||||
/* Lighting */
|
||||
|
||||
void RenderForwardClustered::setup_added_reflection_probe(const Transform3D &p_transform, const Vector3 &p_half_extents) {
|
||||
void RenderForwardClustered::setup_added_reflection_probe(const Transform3D &p_transform, const Vector3 &p_half_size) {
|
||||
if (current_cluster_builder != nullptr) {
|
||||
current_cluster_builder->add_box(ClusterBuilderRD::BOX_TYPE_REFLECTION_PROBE, p_transform, p_half_extents);
|
||||
current_cluster_builder->add_box(ClusterBuilderRD::BOX_TYPE_REFLECTION_PROBE, p_transform, p_half_size);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1244,9 +1244,9 @@ void RenderForwardClustered::setup_added_light(const RS::LightType p_type, const
|
|||
}
|
||||
}
|
||||
|
||||
void RenderForwardClustered::setup_added_decal(const Transform3D &p_transform, const Vector3 &p_half_extents) {
|
||||
void RenderForwardClustered::setup_added_decal(const Transform3D &p_transform, const Vector3 &p_half_size) {
|
||||
if (current_cluster_builder != nullptr) {
|
||||
current_cluster_builder->add_box(ClusterBuilderRD::BOX_TYPE_DECAL, p_transform, p_half_extents);
|
||||
current_cluster_builder->add_box(ClusterBuilderRD::BOX_TYPE_DECAL, p_transform, p_half_size);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2615,8 +2615,8 @@ void RenderForwardClustered::_render_sdfgi(Ref<RenderSceneBuffersRD> p_render_bu
|
|||
render_list[RENDER_LIST_SECONDARY].sort_by_key();
|
||||
_fill_instance_data(RENDER_LIST_SECONDARY);
|
||||
|
||||
Vector3 half_extents = p_bounds.size * 0.5;
|
||||
Vector3 center = p_bounds.position + half_extents;
|
||||
Vector3 half_size = p_bounds.size * 0.5;
|
||||
Vector3 center = p_bounds.position + half_size;
|
||||
|
||||
Vector<RID> sbs = {
|
||||
p_albedo_texture,
|
||||
|
|
@ -2644,16 +2644,16 @@ void RenderForwardClustered::_render_sdfgi(Ref<RenderSceneBuffersRD> p_render_bu
|
|||
fb_size.x = p_size[right_axis];
|
||||
fb_size.y = p_size[up_axis];
|
||||
|
||||
scene_data.cam_transform.origin = center + axis * half_extents;
|
||||
scene_data.cam_transform.origin = center + axis * half_size;
|
||||
scene_data.cam_transform.basis.set_column(0, right);
|
||||
scene_data.cam_transform.basis.set_column(1, up);
|
||||
scene_data.cam_transform.basis.set_column(2, axis);
|
||||
|
||||
//print_line("pass: " + itos(i) + " xform " + scene_data.cam_transform);
|
||||
|
||||
float h_size = half_extents[right_axis];
|
||||
float v_size = half_extents[up_axis];
|
||||
float d_size = half_extents[i] * 2.0;
|
||||
float h_size = half_size[right_axis];
|
||||
float v_size = half_size[up_axis];
|
||||
float d_size = half_size[i] * 2.0;
|
||||
scene_data.cam_projection.set_orthogonal(-h_size, h_size, -v_size, v_size, 0, d_size);
|
||||
//print_line("pass: " + itos(i) + " cam hsize: " + rtos(h_size) + " vsize: " + rtos(v_size) + " dsize " + rtos(d_size));
|
||||
|
||||
|
|
|
|||
|
|
@ -640,9 +640,9 @@ public:
|
|||
RendererRD::SSEffects *get_ss_effects() { return ss_effects; }
|
||||
|
||||
/* callback from updating our lighting UBOs, used to populate cluster builder */
|
||||
virtual void setup_added_reflection_probe(const Transform3D &p_transform, const Vector3 &p_half_extents) override;
|
||||
virtual void setup_added_reflection_probe(const Transform3D &p_transform, const Vector3 &p_half_size) override;
|
||||
virtual void setup_added_light(const RS::LightType p_type, const Transform3D &p_transform, float p_radius, float p_spot_aperture) override;
|
||||
virtual void setup_added_decal(const Transform3D &p_transform, const Vector3 &p_half_extents) override;
|
||||
virtual void setup_added_decal(const Transform3D &p_transform, const Vector3 &p_half_size) override;
|
||||
|
||||
virtual void base_uniforms_changed() override;
|
||||
_FORCE_INLINE_ virtual void update_uniform_sets() override {
|
||||
|
|
|
|||
|
|
@ -204,9 +204,9 @@ public:
|
|||
|
||||
/* LIGHTING */
|
||||
|
||||
virtual void setup_added_reflection_probe(const Transform3D &p_transform, const Vector3 &p_half_extents){};
|
||||
virtual void setup_added_reflection_probe(const Transform3D &p_transform, const Vector3 &p_half_size){};
|
||||
virtual void setup_added_light(const RS::LightType p_type, const Transform3D &p_transform, float p_radius, float p_spot_aperture){};
|
||||
virtual void setup_added_decal(const Transform3D &p_transform, const Vector3 &p_half_extents){};
|
||||
virtual void setup_added_decal(const Transform3D &p_transform, const Vector3 &p_half_size){};
|
||||
|
||||
/* GI */
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ layout(push_constant, std430) uniform Params {
|
|||
vec3 position;
|
||||
float pad;
|
||||
|
||||
vec3 extents;
|
||||
vec3 size;
|
||||
float pad2;
|
||||
|
||||
ivec3 corner;
|
||||
|
|
@ -184,36 +184,37 @@ void main() {
|
|||
vec4 local_pos = params.transform * world;
|
||||
local_pos.xyz /= local_pos.w;
|
||||
|
||||
vec3 half_size = params.size / 2.0;
|
||||
float sdf = -1.0;
|
||||
if (params.shape == 0) {
|
||||
// Ellipsoid
|
||||
// https://www.shadertoy.com/view/tdS3DG
|
||||
float k0 = length(local_pos.xyz / params.extents);
|
||||
float k1 = length(local_pos.xyz / (params.extents * params.extents));
|
||||
float k0 = length(local_pos.xyz / half_size);
|
||||
float k1 = length(local_pos.xyz / (half_size * half_size));
|
||||
sdf = k0 * (k0 - 1.0) / k1;
|
||||
} else if (params.shape == 1) {
|
||||
// Cone
|
||||
// https://iquilezles.org/www/articles/distfunctions/distfunctions.htm
|
||||
|
||||
// Compute the cone angle automatically to fit within the volume's extents.
|
||||
float inv_height = 1.0 / max(0.001, params.extents.y);
|
||||
float radius = 1.0 / max(0.001, (min(params.extents.x, params.extents.z) * 0.5));
|
||||
// Compute the cone angle automatically to fit within the volume's size.
|
||||
float inv_height = 1.0 / max(0.001, half_size.y);
|
||||
float radius = 1.0 / max(0.001, (min(half_size.x, half_size.z) * 0.5));
|
||||
float hypotenuse = sqrt(radius * radius + inv_height * inv_height);
|
||||
float rsin = radius / hypotenuse;
|
||||
float rcos = inv_height / hypotenuse;
|
||||
vec2 c = vec2(rsin, rcos);
|
||||
|
||||
float q = length(local_pos.xz);
|
||||
sdf = max(dot(c, vec2(q, local_pos.y - params.extents.y)), -params.extents.y - local_pos.y);
|
||||
sdf = max(dot(c, vec2(q, local_pos.y - half_size.y)), -half_size.y - local_pos.y);
|
||||
} else if (params.shape == 2) {
|
||||
// Cylinder
|
||||
// https://iquilezles.org/www/articles/distfunctions/distfunctions.htm
|
||||
vec2 d = abs(vec2(length(local_pos.xz), local_pos.y)) - vec2(min(params.extents.x, params.extents.z), params.extents.y);
|
||||
vec2 d = abs(vec2(length(local_pos.xz), local_pos.y)) - vec2(min(half_size.x, half_size.z), half_size.y);
|
||||
sdf = min(max(d.x, d.y), 0.0) + length(max(d, 0.0));
|
||||
} else if (params.shape == 3) {
|
||||
// Box
|
||||
// https://iquilezles.org/www/articles/distfunctions/distfunctions.htm
|
||||
vec3 q = abs(local_pos.xyz) - params.extents;
|
||||
vec3 q = abs(local_pos.xyz) - half_size;
|
||||
sdf = length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0);
|
||||
}
|
||||
|
||||
|
|
@ -222,7 +223,7 @@ void main() {
|
|||
#ifndef SDF_USED
|
||||
cull_mask = 1.0 - smoothstep(-0.1, 0.0, sdf);
|
||||
#endif
|
||||
uvw = clamp((local_pos.xyz + params.extents) / (2.0 * params.extents), 0.0, 1.0);
|
||||
uvw = clamp((local_pos.xyz + half_size) / params.size, 0.0, 1.0);
|
||||
}
|
||||
|
||||
if (cull_mask > 0.0) {
|
||||
|
|
|
|||
|
|
@ -1066,14 +1066,14 @@ void LightStorage::reflection_probe_set_max_distance(RID p_probe, float p_distan
|
|||
reflection_probe->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE);
|
||||
}
|
||||
|
||||
void LightStorage::reflection_probe_set_extents(RID p_probe, const Vector3 &p_extents) {
|
||||
void LightStorage::reflection_probe_set_size(RID p_probe, const Vector3 &p_size) {
|
||||
ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe);
|
||||
ERR_FAIL_COND(!reflection_probe);
|
||||
|
||||
if (reflection_probe->extents == p_extents) {
|
||||
if (reflection_probe->size == p_size) {
|
||||
return;
|
||||
}
|
||||
reflection_probe->extents = p_extents;
|
||||
reflection_probe->size = p_size;
|
||||
reflection_probe->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE);
|
||||
}
|
||||
|
||||
|
|
@ -1145,8 +1145,8 @@ AABB LightStorage::reflection_probe_get_aabb(RID p_probe) const {
|
|||
ERR_FAIL_COND_V(!reflection_probe, AABB());
|
||||
|
||||
AABB aabb;
|
||||
aabb.position = -reflection_probe->extents;
|
||||
aabb.size = reflection_probe->extents * 2.0;
|
||||
aabb.position = -reflection_probe->size / 2;
|
||||
aabb.size = reflection_probe->size;
|
||||
|
||||
return aabb;
|
||||
}
|
||||
|
|
@ -1165,11 +1165,11 @@ uint32_t LightStorage::reflection_probe_get_cull_mask(RID p_probe) const {
|
|||
return reflection_probe->cull_mask;
|
||||
}
|
||||
|
||||
Vector3 LightStorage::reflection_probe_get_extents(RID p_probe) const {
|
||||
Vector3 LightStorage::reflection_probe_get_size(RID p_probe) const {
|
||||
const ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe);
|
||||
ERR_FAIL_COND_V(!reflection_probe, Vector3());
|
||||
|
||||
return reflection_probe->extents;
|
||||
return reflection_probe->size;
|
||||
}
|
||||
|
||||
Vector3 LightStorage::reflection_probe_get_origin_offset(RID p_probe) const {
|
||||
|
|
@ -1674,7 +1674,7 @@ void LightStorage::update_reflection_probe_buffer(RenderDataRD *p_render_data, c
|
|||
|
||||
ReflectionData &reflection_ubo = reflections[i];
|
||||
|
||||
Vector3 extents = probe->extents;
|
||||
Vector3 extents = probe->size / 2;
|
||||
|
||||
rpi->cull_mask = probe->cull_mask;
|
||||
|
||||
|
|
|
|||
|
|
@ -226,7 +226,7 @@ private:
|
|||
Color ambient_color;
|
||||
float ambient_color_energy = 1.0;
|
||||
float max_distance = 0;
|
||||
Vector3 extents = Vector3(10, 10, 10);
|
||||
Vector3 size = Vector3(20, 20, 20);
|
||||
Vector3 origin_offset;
|
||||
bool interior = false;
|
||||
bool box_projection = false;
|
||||
|
|
@ -791,7 +791,7 @@ public:
|
|||
virtual void reflection_probe_set_ambient_color(RID p_probe, const Color &p_color) override;
|
||||
virtual void reflection_probe_set_ambient_energy(RID p_probe, float p_energy) override;
|
||||
virtual void reflection_probe_set_max_distance(RID p_probe, float p_distance) override;
|
||||
virtual void reflection_probe_set_extents(RID p_probe, const Vector3 &p_extents) override;
|
||||
virtual void reflection_probe_set_size(RID p_probe, const Vector3 &p_size) override;
|
||||
virtual void reflection_probe_set_origin_offset(RID p_probe, const Vector3 &p_offset) override;
|
||||
virtual void reflection_probe_set_as_interior(RID p_probe, bool p_enable) override;
|
||||
virtual void reflection_probe_set_enable_box_projection(RID p_probe, bool p_enable) override;
|
||||
|
|
@ -805,7 +805,7 @@ public:
|
|||
virtual AABB reflection_probe_get_aabb(RID p_probe) const override;
|
||||
virtual RS::ReflectionProbeUpdateMode reflection_probe_get_update_mode(RID p_probe) const override;
|
||||
virtual uint32_t reflection_probe_get_cull_mask(RID p_probe) const override;
|
||||
virtual Vector3 reflection_probe_get_extents(RID p_probe) const override;
|
||||
virtual Vector3 reflection_probe_get_size(RID p_probe) const override;
|
||||
virtual Vector3 reflection_probe_get_origin_offset(RID p_probe) const override;
|
||||
virtual float reflection_probe_get_origin_max_distance(RID p_probe) const override;
|
||||
virtual float reflection_probe_get_mesh_lod_threshold(RID p_probe) const override;
|
||||
|
|
|
|||
|
|
@ -1853,10 +1853,10 @@ void TextureStorage::decal_free(RID p_rid) {
|
|||
decal_owner.free(p_rid);
|
||||
}
|
||||
|
||||
void TextureStorage::decal_set_extents(RID p_decal, const Vector3 &p_extents) {
|
||||
void TextureStorage::decal_set_size(RID p_decal, const Vector3 &p_size) {
|
||||
Decal *decal = decal_owner.get_or_null(p_decal);
|
||||
ERR_FAIL_COND(!decal);
|
||||
decal->extents = p_extents;
|
||||
decal->size = p_size;
|
||||
decal->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_AABB);
|
||||
}
|
||||
|
||||
|
|
@ -1949,7 +1949,7 @@ AABB TextureStorage::decal_get_aabb(RID p_decal) const {
|
|||
Decal *decal = decal_owner.get_or_null(p_decal);
|
||||
ERR_FAIL_COND_V(!decal, AABB());
|
||||
|
||||
return AABB(-decal->extents, decal->extents * 2.0);
|
||||
return AABB(-decal->size / 2, decal->size);
|
||||
}
|
||||
|
||||
Dependency *TextureStorage::decal_get_dependency(RID p_decal) {
|
||||
|
|
@ -2312,7 +2312,7 @@ void TextureStorage::update_decal_buffer(const PagedArray<RID> &p_decals, const
|
|||
|
||||
DecalData &dd = decals[i];
|
||||
|
||||
Vector3 decal_extents = decal->extents;
|
||||
Vector3 decal_extents = decal->size / 2;
|
||||
|
||||
Transform3D scale_xform;
|
||||
scale_xform.basis.scale(decal_extents);
|
||||
|
|
|
|||
|
|
@ -235,7 +235,7 @@ private:
|
|||
} decal_atlas;
|
||||
|
||||
struct Decal {
|
||||
Vector3 extents = Vector3(1, 1, 1);
|
||||
Vector3 size = Vector3(2, 2, 2);
|
||||
RID textures[RS::DECAL_TEXTURE_MAX];
|
||||
float emission_energy = 1.0;
|
||||
float albedo_mix = 1.0;
|
||||
|
|
@ -561,7 +561,7 @@ public:
|
|||
virtual void decal_initialize(RID p_decal) override;
|
||||
virtual void decal_free(RID p_rid) override;
|
||||
|
||||
virtual void decal_set_extents(RID p_decal, const Vector3 &p_extents) override;
|
||||
virtual void decal_set_size(RID p_decal, const Vector3 &p_size) override;
|
||||
virtual void decal_set_texture(RID p_decal, RS::DecalTexture p_type, RID p_texture) override;
|
||||
virtual void decal_set_emission_energy(RID p_decal, float p_energy) override;
|
||||
virtual void decal_set_albedo_mix(RID p_decal, float p_mix) override;
|
||||
|
|
@ -577,9 +577,9 @@ public:
|
|||
virtual void texture_add_to_decal_atlas(RID p_texture, bool p_panorama_to_dp = false) override;
|
||||
virtual void texture_remove_from_decal_atlas(RID p_texture, bool p_panorama_to_dp = false) override;
|
||||
|
||||
_FORCE_INLINE_ Vector3 decal_get_extents(RID p_decal) {
|
||||
_FORCE_INLINE_ Vector3 decal_get_size(RID p_decal) {
|
||||
const Decal *decal = decal_owner.get_or_null(p_decal);
|
||||
return decal->extents;
|
||||
return decal->size;
|
||||
}
|
||||
|
||||
_FORCE_INLINE_ RID decal_get_texture(RID p_decal, RS::DecalTexture p_texture) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue