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
path: root/source
diff options
context:
space:
mode:
authorMitchell Stokes <mogurijin@gmail.com>2014-01-27 07:28:26 +0400
committerMitchell Stokes <mogurijin@gmail.com>2014-03-20 10:57:49 +0400
commite02b9c8a45266993e5cefb71d55234128aca208c (patch)
treed9d29a0b6a0ee81b879c9665ce74f6370829257e /source
parent9d4b54b44fccabffeebd45c86f8e344e67327ad3 (diff)
BGE: Adding support for the Cast Only material option.
Note: This does not add support for the option in the viewport.
Diffstat (limited to 'source')
-rw-r--r--source/gameengine/Converter/BL_BlenderDataConversion.cpp4
-rw-r--r--source/gameengine/Ketsji/BL_Material.h3
-rw-r--r--source/gameengine/Ketsji/KX_BlenderMaterial.cpp1
-rw-r--r--source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp5
-rw-r--r--source/gameengine/Rasterizer/RAS_IPolygonMaterial.h4
-rw-r--r--source/gameengine/Rasterizer/RAS_MaterialBucket.cpp3
6 files changed, 18 insertions, 2 deletions
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index 0ec54412485..9eba103e7c0 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -611,6 +611,10 @@ static bool ConvertMaterial(
// cast shadows?
material->ras_mode |= ( mat->mode & MA_SHADBUF )?CAST_SHADOW:0;
+
+ // only shadows?
+ material->ras_mode |= ( mat->mode & MA_ONLYCAST )?ONLY_SHADOW:0;
+
MTex *mttmp = 0;
int valid_index = 0;
diff --git a/source/gameengine/Ketsji/BL_Material.h b/source/gameengine/Ketsji/BL_Material.h
index be66e2ec84d..83f9b601e0d 100644
--- a/source/gameengine/Ketsji/BL_Material.h
+++ b/source/gameengine/Ketsji/BL_Material.h
@@ -144,7 +144,8 @@ enum BL_ras_mode
WIRE=64,
CAST_SHADOW=128,
TEX=256,
- TWOSIDED=512
+ TWOSIDED=512,
+ ONLY_SHADOW=1024,
};
// -------------------------------------
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
index efaaed7b567..68a71218b8c 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
@@ -110,6 +110,7 @@ void KX_BlenderMaterial::Initialize(
m_flag |= ((mMaterial->ras_mode & USE_LIGHT)!=0)? RAS_MULTILIGHT: 0;
m_flag |= (mMaterial->glslmat)? RAS_BLENDERGLSL: 0;
m_flag |= ((mMaterial->ras_mode & CAST_SHADOW)!=0)? RAS_CASTSHADOW: 0;
+ m_flag |= ((mMaterial->ras_mode & ONLY_SHADOW)!=0)? RAS_ONLYSHADOW: 0;
// test the sum of the various modes for equality
// so we can ether accept or reject this material
diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
index 47e52318b33..03f6e567771 100644
--- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
+++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
@@ -282,6 +282,11 @@ bool RAS_IPolyMaterial::CastsShadows() const
return (m_flag & RAS_CASTSHADOW) != 0;
}
+bool RAS_IPolyMaterial::OnlyShadow() const
+{
+ return (m_flag & RAS_ONLYSHADOW) != 0;
+}
+
bool RAS_IPolyMaterial::UsesObjectColor() const
{
return !(m_flag & RAS_BLENDERGLSL);
diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
index 2db71c3a2fe..14223fc59bd 100644
--- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
+++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
@@ -61,7 +61,8 @@ enum MaterialProps
RAS_NORMAL =256,
RAS_DEFMULTI =512,
RAS_BLENDERGLSL =1024,
- RAS_CASTSHADOW =2048
+ RAS_CASTSHADOW =2048,
+ RAS_ONLYSHADOW =4096,
};
/**
@@ -174,6 +175,7 @@ public:
virtual bool UsesLighting(RAS_IRasterizer *rasty) const;
virtual bool UsesObjectColor() const;
virtual bool CastsShadows() const;
+ virtual bool OnlyShadow() const;
virtual void Replace_IScene(SCA_IScene *val) {} /* overridden by KX_BlenderMaterial */
diff --git a/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp b/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
index 0c715524218..4b5fc6510e0 100644
--- a/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
+++ b/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
@@ -587,6 +587,9 @@ bool RAS_MaterialBucket::ActivateMaterial(const MT_Transform& cameratrans, RAS_I
if (rasty->GetDrawingMode() == RAS_IRasterizer::KX_SHADOW && !m_material->CastsShadows())
return false;
+ if (rasty->GetDrawingMode() != RAS_IRasterizer::KX_SHADOW && m_material->OnlyShadow())
+ return false;
+
if (!rasty->SetMaterial(*m_material))
return false;