ability to change shadow color in light2d
This commit is contained in:
parent
48f1d02da4
commit
52308aba68
|
@ -9536,6 +9536,7 @@ void RasterizerGLES2::canvas_render_items(CanvasItem *p_item_list,int p_z,const
|
|||
canvas_shader.set_uniform(CanvasShaderGLES2::SHADOW_TEXTURE,max_texture_units-3);
|
||||
canvas_shader.set_uniform(CanvasShaderGLES2::SHADOW_MATRIX,light->shadow_matrix_cache);
|
||||
canvas_shader.set_uniform(CanvasShaderGLES2::SHADOW_ESM_MULTIPLIER,light->shadow_esm_mult);
|
||||
canvas_shader.set_uniform(CanvasShaderGLES2::LIGHT_SHADOW_COLOR,light->shadow_color);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -152,6 +152,7 @@ uniform vec4 modulate;
|
|||
|
||||
uniform sampler2D light_texture;
|
||||
uniform vec4 light_color;
|
||||
uniform vec4 light_shadow_color;
|
||||
uniform float light_height;
|
||||
varying vec4 light_uv_interp;
|
||||
|
||||
|
@ -379,7 +380,8 @@ LIGHT_SHADER_CODE
|
|||
#if defined(USE_LIGHT_SHADOW_COLOR)
|
||||
color=mix(shadow_color,color,shadow_attenuation);
|
||||
#else
|
||||
color*=shadow_attenuation;
|
||||
//color*=shadow_attenuation;
|
||||
color=mix(light_shadow_color,color,shadow_attenuation);
|
||||
#endif
|
||||
//use shadows
|
||||
#endif
|
||||
|
|
|
@ -237,6 +237,16 @@ float Light2D::get_shadow_esm_multiplier() const{
|
|||
return shadow_esm_multiplier;
|
||||
}
|
||||
|
||||
void Light2D::set_shadow_color( const Color& p_shadow_color) {
|
||||
shadow_color=p_shadow_color;
|
||||
VS::get_singleton()->canvas_light_set_shadow_color(canvas_light,shadow_color);
|
||||
}
|
||||
|
||||
Color Light2D::get_shadow_color() const {
|
||||
return shadow_color;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Light2D::_notification(int p_what) {
|
||||
|
||||
|
@ -313,6 +323,10 @@ void Light2D::_bind_methods() {
|
|||
ObjectTypeDB::bind_method(_MD("set_shadow_esm_multiplier","multiplier"),&Light2D::set_shadow_esm_multiplier);
|
||||
ObjectTypeDB::bind_method(_MD("get_shadow_esm_multiplier"),&Light2D::get_shadow_esm_multiplier);
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("set_shadow_color","shadow_color"),&Light2D::set_shadow_color);
|
||||
ObjectTypeDB::bind_method(_MD("get_shadow_color"),&Light2D::get_shadow_color);
|
||||
|
||||
|
||||
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"enabled"),_SCS("set_enabled"),_SCS("is_enabled"));
|
||||
ADD_PROPERTY( PropertyInfo(Variant::OBJECT,"texture",PROPERTY_HINT_RESOURCE_TYPE,"Texture"),_SCS("set_texture"),_SCS("get_texture"));
|
||||
ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"offset"),_SCS("set_texture_offset"),_SCS("get_texture_offset"));
|
||||
|
@ -327,6 +341,7 @@ void Light2D::_bind_methods() {
|
|||
ADD_PROPERTY( PropertyInfo(Variant::INT,"range/layer_max",PROPERTY_HINT_RANGE,"-512,512,1"),_SCS("set_layer_range_max"),_SCS("get_layer_range_max"));
|
||||
ADD_PROPERTY( PropertyInfo(Variant::INT,"range/item_mask",PROPERTY_HINT_ALL_FLAGS),_SCS("set_item_mask"),_SCS("get_item_mask"));
|
||||
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"shadow/enabled"),_SCS("set_shadow_enabled"),_SCS("is_shadow_enabled"));
|
||||
ADD_PROPERTY( PropertyInfo(Variant::COLOR,"shadow/color"),_SCS("set_shadow_color"),_SCS("get_shadow_color"));
|
||||
ADD_PROPERTY( PropertyInfo(Variant::INT,"shadow/buffer_size",PROPERTY_HINT_RANGE,"32,16384,1"),_SCS("set_shadow_buffer_size"),_SCS("get_shadow_buffer_size"));
|
||||
ADD_PROPERTY( PropertyInfo(Variant::REAL,"shadow/esm_multiplier",PROPERTY_HINT_RANGE,"1,4096,0.1"),_SCS("set_shadow_esm_multiplier"),_SCS("get_shadow_esm_multiplier"));
|
||||
ADD_PROPERTY( PropertyInfo(Variant::INT,"shadow/item_mask",PROPERTY_HINT_ALL_FLAGS),_SCS("set_item_shadow_mask"),_SCS("get_item_shadow_mask"));
|
||||
|
@ -356,6 +371,7 @@ Light2D::Light2D() {
|
|||
shadow_buffer_size=2048;
|
||||
shadow_esm_multiplier=80;
|
||||
energy=1.0;
|
||||
shadow_color=Color(0,0,0,0);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ private:
|
|||
bool enabled;
|
||||
bool shadow;
|
||||
Color color;
|
||||
Color shadow_color;
|
||||
float height;
|
||||
float _scale;
|
||||
float energy;
|
||||
|
@ -95,6 +96,10 @@ public:
|
|||
void set_shadow_esm_multiplier( float p_multiplier);
|
||||
float get_shadow_esm_multiplier() const;
|
||||
|
||||
void set_shadow_color( const Color& p_shadow_color);
|
||||
Color get_shadow_color() const;
|
||||
|
||||
|
||||
virtual Rect2 get_item_rect() const;
|
||||
|
||||
Light2D();
|
||||
|
|
|
@ -592,6 +592,7 @@ public:
|
|||
RID shadow_buffer;
|
||||
int shadow_buffer_size;
|
||||
float shadow_esm_mult;
|
||||
Color shadow_color;
|
||||
|
||||
|
||||
void *texture_cache; // implementation dependent
|
||||
|
@ -610,6 +611,7 @@ public:
|
|||
CanvasLight() {
|
||||
enabled=true;
|
||||
color=Color(1,1,1);
|
||||
shadow_color=Color(0,0,0,0);
|
||||
height=0;
|
||||
z_min=-1024;
|
||||
z_max=1024;
|
||||
|
|
|
@ -4071,6 +4071,15 @@ void VisualServerRaster::canvas_light_set_shadow_esm_multiplier(RID p_light, flo
|
|||
|
||||
}
|
||||
|
||||
void VisualServerRaster::canvas_light_set_shadow_color(RID p_light, const Color& p_color) {
|
||||
|
||||
Rasterizer::CanvasLight *clight = canvas_light_owner.get(p_light);
|
||||
ERR_FAIL_COND(!clight);
|
||||
clight->shadow_color=p_color;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/****** CANVAS LIGHT OCCLUDER ******/
|
||||
|
||||
RID VisualServerRaster::canvas_light_occluder_create() {
|
||||
|
|
|
@ -1180,6 +1180,8 @@ public:
|
|||
virtual void canvas_light_set_shadow_enabled(RID p_light, bool p_enabled);
|
||||
virtual void canvas_light_set_shadow_buffer_size(RID p_light, int p_size);
|
||||
virtual void canvas_light_set_shadow_esm_multiplier(RID p_light, float p_multiplier);
|
||||
virtual void canvas_light_set_shadow_color(RID p_light, const Color& p_color);
|
||||
|
||||
|
||||
|
||||
virtual RID canvas_light_occluder_create();
|
||||
|
|
|
@ -626,6 +626,8 @@ public:
|
|||
FUNC2(canvas_light_set_shadow_enabled,RID,bool);
|
||||
FUNC2(canvas_light_set_shadow_buffer_size,RID,int);
|
||||
FUNC2(canvas_light_set_shadow_esm_multiplier,RID,float);
|
||||
FUNC2(canvas_light_set_shadow_color,RID,const Color&);
|
||||
|
||||
|
||||
|
||||
/* CANVAS OCCLUDER */
|
||||
|
|
|
@ -1032,6 +1032,7 @@ public:
|
|||
virtual void canvas_light_set_shadow_enabled(RID p_light, bool p_enabled)=0;
|
||||
virtual void canvas_light_set_shadow_buffer_size(RID p_light, int p_size)=0;
|
||||
virtual void canvas_light_set_shadow_esm_multiplier(RID p_light, float p_multiplier)=0;
|
||||
virtual void canvas_light_set_shadow_color(RID p_light, const Color& p_color)=0;
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue