|
@@ -28,10 +28,10 @@
|
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|
/**************************************************************************/
|
|
/**************************************************************************/
|
|
|
|
|
|
-#include "core/config/project_settings.h"
|
|
|
|
-
|
|
|
|
#include "light_3d.h"
|
|
#include "light_3d.h"
|
|
|
|
|
|
|
|
+#include "core/config/project_settings.h"
|
|
|
|
+
|
|
void Light3D::set_param(Param p_param, real_t p_value) {
|
|
void Light3D::set_param(Param p_param, real_t p_value) {
|
|
ERR_FAIL_INDEX(p_param, PARAM_MAX);
|
|
ERR_FAIL_INDEX(p_param, PARAM_MAX);
|
|
param[p_param] = p_value;
|
|
param[p_param] = p_value;
|
|
@@ -200,6 +200,20 @@ Light3D::BakeMode Light3D::get_bake_mode() const {
|
|
void Light3D::set_projector(const Ref<Texture2D> &p_texture) {
|
|
void Light3D::set_projector(const Ref<Texture2D> &p_texture) {
|
|
projector = p_texture;
|
|
projector = p_texture;
|
|
RID tex_id = projector.is_valid() ? projector->get_rid() : RID();
|
|
RID tex_id = projector.is_valid() ? projector->get_rid() : RID();
|
|
|
|
+
|
|
|
|
+#ifdef DEBUG_ENABLED
|
|
|
|
+ if (
|
|
|
|
+ p_texture->is_class("AnimatedTexture") ||
|
|
|
|
+ p_texture->is_class("AtlasTexture") ||
|
|
|
|
+ p_texture->is_class("CameraTexture") ||
|
|
|
|
+ p_texture->is_class("CanvasTexture") ||
|
|
|
|
+ p_texture->is_class("MeshTexture") ||
|
|
|
|
+ p_texture->is_class("Texture2DRD") ||
|
|
|
|
+ p_texture->is_class("ViewportTexture")) {
|
|
|
|
+ WARN_PRINT(vformat("%s cannot be used as a Light3D projector texture (%s). As a workaround, assign the value returned by %s's `get_image()` instead.", p_texture->get_class(), get_path(), p_texture->get_class()));
|
|
|
|
+ }
|
|
|
|
+#endif
|
|
|
|
+
|
|
RS::get_singleton()->light_set_projector(light, tex_id);
|
|
RS::get_singleton()->light_set_projector(light, tex_id);
|
|
update_configuration_warnings();
|
|
update_configuration_warnings();
|
|
}
|
|
}
|
|
@@ -384,7 +398,8 @@ void Light3D::_bind_methods() {
|
|
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_energy", PROPERTY_HINT_RANGE, "0,16,0.001,or_greater"), "set_param", "get_param", PARAM_ENERGY);
|
|
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_energy", PROPERTY_HINT_RANGE, "0,16,0.001,or_greater"), "set_param", "get_param", PARAM_ENERGY);
|
|
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_indirect_energy", PROPERTY_HINT_RANGE, "0,16,0.001,or_greater"), "set_param", "get_param", PARAM_INDIRECT_ENERGY);
|
|
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_indirect_energy", PROPERTY_HINT_RANGE, "0,16,0.001,or_greater"), "set_param", "get_param", PARAM_INDIRECT_ENERGY);
|
|
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_volumetric_fog_energy", PROPERTY_HINT_RANGE, "0,16,0.001,or_greater"), "set_param", "get_param", PARAM_VOLUMETRIC_FOG_ENERGY);
|
|
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_volumetric_fog_energy", PROPERTY_HINT_RANGE, "0,16,0.001,or_greater"), "set_param", "get_param", PARAM_VOLUMETRIC_FOG_ENERGY);
|
|
- ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "light_projector", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_projector", "get_projector");
|
|
|
|
|
|
+ // Only allow texture types that display correctly.
|
|
|
|
+ ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "light_projector", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D,-AnimatedTexture,-AtlasTexture,-CameraTexture,-CanvasTexture,-MeshTexture,-Texture2DRD,-ViewportTexture"), "set_projector", "get_projector");
|
|
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_size", PROPERTY_HINT_RANGE, "0,1,0.001,or_greater,suffix:m"), "set_param", "get_param", PARAM_SIZE);
|
|
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_size", PROPERTY_HINT_RANGE, "0,1,0.001,or_greater,suffix:m"), "set_param", "get_param", PARAM_SIZE);
|
|
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_angular_distance", PROPERTY_HINT_RANGE, "0,90,0.01,degrees"), "set_param", "get_param", PARAM_SIZE);
|
|
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_angular_distance", PROPERTY_HINT_RANGE, "0,90,0.01,degrees"), "set_param", "get_param", PARAM_SIZE);
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "light_negative"), "set_negative", "is_negative");
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "light_negative"), "set_negative", "is_negative");
|