summaryrefslogtreecommitdiffstats
path: root/scene/3d/light.h
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2016-11-09 23:55:06 -0300
committerJuan Linietsky <reduzio@gmail.com>2016-11-09 23:55:06 -0300
commitcacf9ebb7fd8df8845daca9da2fe55456cc179aa (patch)
tree5881cb42ace5001916e9d1843f5a7acbc35332a6 /scene/3d/light.h
parent6b2a27bbe5fa112365fc88b9b4678a61293bcb53 (diff)
downloadredot-engine-cacf9ebb7fd8df8845daca9da2fe55456cc179aa.tar.gz
all light types and shadows are working, pending a lot of clean-up
Diffstat (limited to 'scene/3d/light.h')
-rw-r--r--scene/3d/light.h71
1 files changed, 54 insertions, 17 deletions
diff --git a/scene/3d/light.h b/scene/3d/light.h
index 7da2d8e7ca..da28542817 100644
--- a/scene/3d/light.h
+++ b/scene/3d/light.h
@@ -45,22 +45,21 @@ class Light : public VisualInstance {
public:
enum Param {
- PARAM_ENERGY,
- PARAM_SPECULAR,
- PARAM_RANGE,
- PARAM_ATTENUATION,
- PARAM_SPOT_ANGLE,
- PARAM_SPOT_ATTENUATION,
- PARAM_SHADOW_MAX_DISTANCE,
- PARAM_SHADOW_DARKNESS,
- PARAM_SHADOW_SPLIT_1_OFFSET,
- PARAM_SHADOW_SPLIT_2_OFFSET,
- PARAM_SHADOW_SPLIT_3_OFFSET,
- PARAM_SHADOW_SPLIT_4_OFFSET,
- PARAM_SHADOW_NORMAL_BIAS,
- PARAM_SHADOW_BIAS,
- PARAM_SHADOW_BIAS_SPLIT_SCALE,
- PARAM_MAX
+ PARAM_ENERGY = VS::LIGHT_PARAM_ENERGY,
+ PARAM_SPECULAR = VS::LIGHT_PARAM_SPECULAR,
+ PARAM_RANGE = VS::LIGHT_PARAM_RANGE,
+ PARAM_ATTENUATION = VS::LIGHT_PARAM_ATTENUATION,
+ PARAM_SPOT_ANGLE = VS::LIGHT_PARAM_SPOT_ANGLE,
+ PARAM_SPOT_ATTENUATION = VS::LIGHT_PARAM_SPOT_ATTENUATION,
+ PARAM_SHADOW_MAX_DISTANCE = VS::LIGHT_PARAM_SHADOW_MAX_DISTANCE,
+ PARAM_SHADOW_DARKNESS = VS::LIGHT_PARAM_SHADOW_DARKNESS,
+ PARAM_SHADOW_SPLIT_1_OFFSET = VS::LIGHT_PARAM_SHADOW_SPLIT_1_OFFSET,
+ PARAM_SHADOW_SPLIT_2_OFFSET = VS::LIGHT_PARAM_SHADOW_SPLIT_2_OFFSET,
+ PARAM_SHADOW_SPLIT_3_OFFSET = VS::LIGHT_PARAM_SHADOW_SPLIT_3_OFFSET,
+ PARAM_SHADOW_NORMAL_BIAS = VS::LIGHT_PARAM_SHADOW_NORMAL_BIAS,
+ PARAM_SHADOW_BIAS = VS::LIGHT_PARAM_SHADOW_BIAS,
+ PARAM_SHADOW_BIAS_SPLIT_SCALE = VS::LIGHT_PARAM_SHADOW_BIAS_SPLIT_SCALE,
+ PARAM_MAX = VS::LIGHT_PARAM_MAX
};
private:
@@ -126,31 +125,69 @@ class DirectionalLight : public Light {
public:
+ enum ShadowMode {
+ SHADOW_ORTHOGONAL,
+ SHADOW_PARALLEL_2_SPLITS,
+ SHADOW_PARALLEL_4_SPLITS
+ };
private:
+ bool blend_splits;
+ ShadowMode shadow_mode;
protected:
static void _bind_methods();
public:
+ void set_shadow_mode(ShadowMode p_mode);
+ ShadowMode get_shadow_mode() const;
+
+ void set_blend_splits(bool p_enable);
+ bool is_blend_splits_enabled() const;
DirectionalLight();
};
+VARIANT_ENUM_CAST(DirectionalLight::ShadowMode)
class OmniLight : public Light {
OBJ_TYPE( OmniLight, Light );
+public:
+ // omni light
+ enum ShadowMode {
+ SHADOW_DUAL_PARABOLOID,
+ SHADOW_CUBE,
+ };
+
+ // omni light
+ enum ShadowDetail {
+ SHADOW_DETAIL_VERTICAL,
+ SHADOW_DETAIL_HORIZONTAL
+ };
+
+private:
+
+ ShadowMode shadow_mode;
+ ShadowDetail shadow_detail;
protected:
static void _bind_methods();
public:
+ void set_shadow_mode(ShadowMode p_mode);
+ ShadowMode get_shadow_mode() const;
- OmniLight() : Light( VisualServer::LIGHT_OMNI ) { }
+ void set_shadow_detail(ShadowDetail p_detail);
+ ShadowDetail get_shadow_detail() const;
+
+ OmniLight();
};
+VARIANT_ENUM_CAST(OmniLight::ShadowMode)
+VARIANT_ENUM_CAST(OmniLight::ShadowDetail)
+
class SpotLight : public Light {
OBJ_TYPE( SpotLight, Light );