Skip to content

Commit 7591552

Browse files
added queue_update function
1 parent c0c1c68 commit 7591552

File tree

13 files changed

+44
-1
lines changed

13 files changed

+44
-1
lines changed

doc/classes/ReflectionProbe.xml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@
1313
<tutorials>
1414
<link title="Reflection probes">$DOCS_URL/tutorials/3d/global_illumination/reflection_probes.html</link>
1515
</tutorials>
16+
<methods>
17+
<method name="queue_update">
18+
<return type="void" />
19+
<description>
20+
Queues an update for the reflection probe.
21+
</description>
22+
</method>
23+
</methods>
1624
<members>
1725
<member name="ambient_color" type="Color" setter="set_ambient_color" getter="get_ambient_color" default="Color(0, 0, 0, 1)">
1826
The custom ambient color to use within the [ReflectionProbe]'s box defined by its [member size]. Only effective if [member ambient_mode] is [constant AMBIENT_COLOR].
@@ -67,7 +75,7 @@
6775
</members>
6876
<constants>
6977
<constant name="UPDATE_ONCE" value="0" enum="UpdateMode">
70-
Update the probe once on the next frame (recommended for most objects). The corresponding radiance map will be generated over the following six frames. This takes more time to update than [constant UPDATE_ALWAYS], but it has a lower performance cost and can result in higher-quality reflections. The ReflectionProbe is updated when its transform changes, but not when nearby geometry changes. You can force a [ReflectionProbe] update by moving the [ReflectionProbe] slightly in any direction.
78+
Update the probe once on the next frame (recommended for most objects). The corresponding radiance map will be generated over the following six frames. This takes more time to update than [constant UPDATE_ALWAYS], but it has a lower performance cost and can result in higher-quality reflections. The ReflectionProbe is updated when its transform changes, but not when nearby geometry changes. You can force a [ReflectionProbe] update by calling [method queue_update] on it.
7179
</constant>
7280
<constant name="UPDATE_ALWAYS" value="1" enum="UpdateMode">
7381
Update the probe every frame. This provides better results for fast-moving dynamic objects (such as cars). However, it has a significant performance cost. Due to the cost, it's recommended to only use one ReflectionProbe with [constant UPDATE_ALWAYS] at most per scene. For all other use cases, use [constant UPDATE_ONCE].

doc/classes/RenderingServer.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3270,6 +3270,13 @@
32703270
[b]Note:[/b] The equivalent node is [ReflectionProbe].
32713271
</description>
32723272
</method>
3273+
<method name="reflection_probe_queue_update">
3274+
<return type="void" />
3275+
<param index="0" name="probe" type="RID" />
3276+
<description>
3277+
Queues the given reflection probe for an update. Equivalent to [method ReflectionProbe.queue_update].
3278+
</description>
3279+
</method>
32733280
<method name="reflection_probe_set_ambient_color">
32743281
<return type="void" />
32753282
<param index="0" name="probe" type="RID" />

drivers/gles3/storage/light_storage.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,13 @@ void LightStorage::reflection_probe_free(RID p_rid) {
462462
reflection_probe_owner.free(p_rid);
463463
}
464464

465+
void LightStorage::reflection_probe_queue_update(RID p_probe) {
466+
ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe);
467+
ERR_FAIL_NULL(reflection_probe);
468+
469+
reflection_probe->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE);
470+
}
471+
465472
void LightStorage::reflection_probe_set_update_mode(RID p_probe, RS::ReflectionProbeUpdateMode p_mode) {
466473
ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe);
467474
ERR_FAIL_NULL(reflection_probe);

drivers/gles3/storage/light_storage.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,7 @@ class LightStorage : public RendererLightStorage {
637637
virtual void reflection_probe_initialize(RID p_rid) override;
638638
virtual void reflection_probe_free(RID p_rid) override;
639639

640+
virtual void reflection_probe_queue_update(RID p_probe) override;
640641
virtual void reflection_probe_set_update_mode(RID p_probe, RS::ReflectionProbeUpdateMode p_mode) override;
641642
virtual void reflection_probe_set_intensity(RID p_probe, float p_intensity) override;
642643
virtual void reflection_probe_set_blend_distance(RID p_probe, float p_blend_distance) override;

scene/3d/reflection_probe.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,10 @@ AABB ReflectionProbe::get_aabb() const {
200200
return aabb;
201201
}
202202

203+
void ReflectionProbe::queue_update() {
204+
RS::get_singleton()->reflection_probe_queue_update(probe);
205+
}
206+
203207
void ReflectionProbe::_validate_property(PropertyInfo &p_property) const {
204208
if (!Engine::get_singleton()->is_editor_hint()) {
205209
return;
@@ -256,6 +260,7 @@ void ReflectionProbe::_bind_methods() {
256260

257261
ClassDB::bind_method(D_METHOD("set_update_mode", "mode"), &ReflectionProbe::set_update_mode);
258262
ClassDB::bind_method(D_METHOD("get_update_mode"), &ReflectionProbe::get_update_mode);
263+
ClassDB::bind_method(D_METHOD("queue_update"), &ReflectionProbe::queue_update);
259264

260265
ADD_PROPERTY(PropertyInfo(Variant::INT, "update_mode", PROPERTY_HINT_ENUM, "Once (Fast),Always (Slow)"), "set_update_mode", "get_update_mode");
261266
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "intensity", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_intensity", "get_intensity");

scene/3d/reflection_probe.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ class ReflectionProbe : public VisualInstance3D {
125125

126126
virtual AABB get_aabb() const override;
127127

128+
void queue_update();
129+
128130
ReflectionProbe();
129131
~ReflectionProbe();
130132
};

servers/rendering/dummy/storage/light_storage.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ class LightStorage : public RendererLightStorage {
121121
virtual void reflection_probe_initialize(RID p_rid) override {}
122122
virtual void reflection_probe_free(RID p_rid) override {}
123123

124+
virtual void reflection_probe_queue_update(RID p_probe) override {}
124125
virtual void reflection_probe_set_update_mode(RID p_probe, RS::ReflectionProbeUpdateMode p_mode) override {}
125126
virtual void reflection_probe_set_intensity(RID p_probe, float p_intensity) override {}
126127
virtual void reflection_probe_set_blend_distance(RID p_probe, float p_blend_distance) override {}

servers/rendering/renderer_rd/storage_rd/light_storage.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,6 +1065,13 @@ void LightStorage::reflection_probe_free(RID p_rid) {
10651065
reflection_probe_owner.free(p_rid);
10661066
}
10671067

1068+
void LightStorage::reflection_probe_queue_update(RID p_probe) {
1069+
ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe);
1070+
ERR_FAIL_NULL(reflection_probe);
1071+
1072+
reflection_probe->dependency.changed_notify(Dependency::DEPENDENCY_CHANGED_REFLECTION_PROBE);
1073+
}
1074+
10681075
void LightStorage::reflection_probe_set_update_mode(RID p_probe, RS::ReflectionProbeUpdateMode p_mode) {
10691076
ReflectionProbe *reflection_probe = reflection_probe_owner.get_or_null(p_probe);
10701077
ERR_FAIL_NULL(reflection_probe);

servers/rendering/renderer_rd/storage_rd/light_storage.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -835,6 +835,7 @@ class LightStorage : public RendererLightStorage {
835835
virtual void reflection_probe_initialize(RID p_reflection_probe) override;
836836
virtual void reflection_probe_free(RID p_rid) override;
837837

838+
virtual void reflection_probe_queue_update(RID p_probe) override;
838839
virtual void reflection_probe_set_update_mode(RID p_probe, RS::ReflectionProbeUpdateMode p_mode) override;
839840
virtual void reflection_probe_set_intensity(RID p_probe, float p_intensity) override;
840841
virtual void reflection_probe_set_blend_distance(RID p_probe, float p_blend_distance) override;

servers/rendering/rendering_server.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2655,6 +2655,7 @@ void RenderingServer::_bind_methods() {
26552655
ClassDB::bind_method(D_METHOD("reflection_probe_set_update_mode", "probe", "mode"), &RenderingServer::reflection_probe_set_update_mode);
26562656
ClassDB::bind_method(D_METHOD("reflection_probe_set_intensity", "probe", "intensity"), &RenderingServer::reflection_probe_set_intensity);
26572657
ClassDB::bind_method(D_METHOD("reflection_probe_set_blend_distance", "probe", "blend_distance"), &RenderingServer::reflection_probe_set_blend_distance);
2658+
ClassDB::bind_method(D_METHOD("reflection_probe_queue_update", "probe"), &RenderingServer::reflection_probe_queue_update);
26582659
ClassDB::bind_method(D_METHOD("reflection_probe_set_ambient_mode", "probe", "mode"), &RenderingServer::reflection_probe_set_ambient_mode);
26592660
ClassDB::bind_method(D_METHOD("reflection_probe_set_ambient_color", "probe", "color"), &RenderingServer::reflection_probe_set_ambient_color);
26602661
ClassDB::bind_method(D_METHOD("reflection_probe_set_ambient_energy", "probe", "energy"), &RenderingServer::reflection_probe_set_ambient_energy);

0 commit comments

Comments
 (0)