Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlysse Martin <you.le@live.fr>2016-01-17 20:41:37 +0300
committerThomas Szepe <HG1_public@gmx.net>2016-01-17 20:47:14 +0300
commitc4c2bd1350a52e18f973bba7e52e929f94ff6496 (patch)
treecb0bba24307411a8a601373806b781d49d2343c3 /source/gameengine/Rasterizer
parenta5c419f4ccb19b0c01f3cbf5929f8a43bc503eff (diff)
BGE: Allow access to light shadow settings with python
This patch adds a new API which allow us to access light shadow settings from python. The new API can be used to write custom GLSL materials with shadows. Reviewers: brecht, kupoman, agoose77, panzergame, campbellbarton, moguri, hg1 Reviewed By: agoose77, panzergame, campbellbarton, moguri, hg1 Projects: #game_engine Differential Revision: https://developer.blender.org/D1690
Diffstat (limited to 'source/gameengine/Rasterizer')
-rw-r--r--source/gameengine/Rasterizer/RAS_ILightObject.h10
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.cpp20
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.h2
3 files changed, 32 insertions, 0 deletions
diff --git a/source/gameengine/Rasterizer/RAS_ILightObject.h b/source/gameengine/Rasterizer/RAS_ILightObject.h
index f087f3bbb70..59475200a73 100644
--- a/source/gameengine/Rasterizer/RAS_ILightObject.h
+++ b/source/gameengine/Rasterizer/RAS_ILightObject.h
@@ -38,6 +38,7 @@ class KX_Camera;
class KX_Scene;
class MT_Transform;
+class MT_Matrix4x4;
struct Image;
@@ -56,6 +57,13 @@ public:
float m_energy;
float m_distance;
+ float m_shadowclipstart;
+ float m_shadowfrustumsize;
+ float m_shadowclipend;
+ float m_shadowbias;
+ float m_shadowbleedbias;
+ short m_shadowmaptype;
+ float m_shadowcolor[3];
float m_color[3];
@@ -74,6 +82,8 @@ public:
virtual RAS_ILightObject* Clone() = 0;
virtual bool HasShadowBuffer() = 0;
+ virtual int GetShadowBindCode() = 0;
+ virtual MT_Matrix4x4 GetShadowMatrix() = 0;
virtual int GetShadowLayer() = 0;
virtual void BindShadowBuffer(RAS_ICanvas *canvas, KX_Camera *cam, MT_Transform& camtrans) = 0;
virtual void UnbindShadowBuffer() = 0;
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.cpp
index 8319b75331f..beb2d67f9f5 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.cpp
@@ -177,6 +177,26 @@ bool RAS_OpenGLLight::HasShadowBuffer()
return false;
}
+int RAS_OpenGLLight::GetShadowBindCode()
+{
+ GPULamp *lamp;
+
+ if ((lamp = GetGPULamp()))
+ return GPU_lamp_shadow_bind_code(lamp);
+ return -1;
+}
+
+MT_Matrix4x4 RAS_OpenGLLight::GetShadowMatrix()
+{
+ GPULamp *lamp;
+
+ if ((lamp = GetGPULamp()))
+ return MT_Matrix4x4(GPU_lamp_dynpersmat(lamp));
+ MT_Matrix4x4 mat;
+ mat.setIdentity();
+ return mat;
+}
+
int RAS_OpenGLLight::GetShadowLayer()
{
GPULamp *lamp;
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.h b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.h
index 0c4e5bf41c4..a520b18c434 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLLight.h
@@ -46,6 +46,8 @@ public:
RAS_OpenGLLight* Clone() { return new RAS_OpenGLLight(*this); }
bool HasShadowBuffer();
+ int GetShadowBindCode();
+ MT_Matrix4x4 GetShadowMatrix();
int GetShadowLayer();
void BindShadowBuffer(RAS_ICanvas *canvas, KX_Camera *cam, MT_Transform& camtrans);
void UnbindShadowBuffer();