diff options
Diffstat (limited to 'scene/3d/light.cpp')
-rw-r--r-- | scene/3d/light.cpp | 53 |
1 files changed, 35 insertions, 18 deletions
diff --git a/scene/3d/light.cpp b/scene/3d/light.cpp index 977f1f81a7..f4b5cc5731 100644 --- a/scene/3d/light.cpp +++ b/scene/3d/light.cpp @@ -29,6 +29,7 @@ /*************************************************************************/ #include "light.h" +#include "engine.h" #include "project_settings.h" #include "scene/resources/surface_tool.h" @@ -106,6 +107,16 @@ Color Light::get_shadow_color() const { return shadow_color; } +void Light::set_shadow_reverse_cull_face(bool p_enable) { + reverse_cull = p_enable; + VS::get_singleton()->light_set_reverse_cull_face_mode(light, reverse_cull); +} + +bool Light::get_shadow_reverse_cull_face() const { + + return reverse_cull; +} + Rect3 Light::get_aabb() const { if (type == VisualServer::LIGHT_DIRECTIONAL) { @@ -140,7 +151,7 @@ void Light::_update_visibility() { #ifdef TOOLS_ENABLED if (editor_only) { - if (!get_tree()->is_editor_hint()) { + if (!Engine::get_singleton()->is_editor_hint()) { editor_ok = false; } else { editor_ok = (get_tree()->get_edited_scene_root() && (this == get_tree()->get_edited_scene_root() || get_owner() == get_tree()->get_edited_scene_root())); @@ -202,6 +213,9 @@ void Light::_bind_methods() { ClassDB::bind_method(D_METHOD("set_color", "color"), &Light::set_color); ClassDB::bind_method(D_METHOD("get_color"), &Light::get_color); + ClassDB::bind_method(D_METHOD("set_shadow_reverse_cull_face", "enable"), &Light::set_shadow_reverse_cull_face); + ClassDB::bind_method(D_METHOD("get_shadow_reverse_cull_face"), &Light::get_shadow_reverse_cull_face); + ClassDB::bind_method(D_METHOD("set_shadow_color", "shadow_color"), &Light::set_shadow_color); ClassDB::bind_method(D_METHOD("get_shadow_color"), &Light::get_shadow_color); @@ -217,25 +231,26 @@ void Light::_bind_methods() { ADD_PROPERTYI(PropertyInfo(Variant::REAL, "shadow_bias", PROPERTY_HINT_RANGE, "-16,16,0.01"), "set_param", "get_param", PARAM_SHADOW_BIAS); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "shadow_contact", PROPERTY_HINT_RANGE, "0,16,0.01"), "set_param", "get_param", PARAM_CONTACT_SHADOW_SIZE); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "shadow_max_distance", PROPERTY_HINT_RANGE, "0,65536,0.1"), "set_param", "get_param", PARAM_SHADOW_MAX_DISTANCE); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shadow_reverse_cull_face"), "set_shadow_reverse_cull_face", "get_shadow_reverse_cull_face"); ADD_GROUP("Editor", ""); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editor_only"), "set_editor_only", "is_editor_only"); ADD_GROUP("", ""); - BIND_CONSTANT(PARAM_ENERGY); - BIND_CONSTANT(PARAM_SPECULAR); - BIND_CONSTANT(PARAM_RANGE); - BIND_CONSTANT(PARAM_ATTENUATION); - BIND_CONSTANT(PARAM_SPOT_ANGLE); - BIND_CONSTANT(PARAM_SPOT_ATTENUATION); - BIND_CONSTANT(PARAM_CONTACT_SHADOW_SIZE); - BIND_CONSTANT(PARAM_SHADOW_MAX_DISTANCE); - BIND_CONSTANT(PARAM_SHADOW_SPLIT_1_OFFSET); - BIND_CONSTANT(PARAM_SHADOW_SPLIT_2_OFFSET); - BIND_CONSTANT(PARAM_SHADOW_SPLIT_3_OFFSET); - BIND_CONSTANT(PARAM_SHADOW_NORMAL_BIAS); - BIND_CONSTANT(PARAM_SHADOW_BIAS); + BIND_ENUM_CONSTANT(PARAM_ENERGY); + BIND_ENUM_CONSTANT(PARAM_SPECULAR); + BIND_ENUM_CONSTANT(PARAM_RANGE); + BIND_ENUM_CONSTANT(PARAM_ATTENUATION); + BIND_ENUM_CONSTANT(PARAM_SPOT_ANGLE); + BIND_ENUM_CONSTANT(PARAM_SPOT_ATTENUATION); + BIND_ENUM_CONSTANT(PARAM_CONTACT_SHADOW_SIZE); + BIND_ENUM_CONSTANT(PARAM_SHADOW_MAX_DISTANCE); + BIND_ENUM_CONSTANT(PARAM_SHADOW_SPLIT_1_OFFSET); + BIND_ENUM_CONSTANT(PARAM_SHADOW_SPLIT_2_OFFSET); + BIND_ENUM_CONSTANT(PARAM_SHADOW_SPLIT_3_OFFSET); + BIND_ENUM_CONSTANT(PARAM_SHADOW_NORMAL_BIAS); + BIND_ENUM_CONSTANT(PARAM_SHADOW_BIAS); - BIND_CONSTANT(PARAM_MAX); + BIND_ENUM_CONSTANT(PARAM_MAX); } Light::Light(VisualServer::LightType p_type) { @@ -244,6 +259,8 @@ Light::Light(VisualServer::LightType p_type) { light = VisualServer::get_singleton()->light_create(p_type); VS::get_singleton()->instance_set_base(get_instance(), light); + reverse_cull = false; + editor_only = false; set_color(Color(1, 1, 1, 1)); set_shadow(false); @@ -318,9 +335,9 @@ void DirectionalLight::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "directional_shadow_blend_splits"), "set_blend_splits", "is_blend_splits_enabled"); ADD_PROPERTYI(PropertyInfo(Variant::REAL, "directional_shadow_normal_bias", PROPERTY_HINT_RANGE, "0,16,0.01"), "set_param", "get_param", PARAM_SHADOW_NORMAL_BIAS); - BIND_CONSTANT(SHADOW_ORTHOGONAL); - BIND_CONSTANT(SHADOW_PARALLEL_2_SPLITS); - BIND_CONSTANT(SHADOW_PARALLEL_4_SPLITS); + BIND_ENUM_CONSTANT(SHADOW_ORTHOGONAL); + BIND_ENUM_CONSTANT(SHADOW_PARALLEL_2_SPLITS); + BIND_ENUM_CONSTANT(SHADOW_PARALLEL_4_SPLITS); } DirectionalLight::DirectionalLight() |