[Bf-blender-cvs] [e02b9c8] master: BGE: Adding support for the Cast Only material option.

Mitchell Stokes noreply at git.blender.org
Thu Mar 20 07:58:57 CET 2014


Commit: e02b9c8a45266993e5cefb71d55234128aca208c
Author: Mitchell Stokes
Date:   Sun Jan 26 19:28:26 2014 -0800
https://developer.blender.org/rBe02b9c8a45266993e5cefb71d55234128aca208c

BGE: Adding support for the Cast Only material option.

Note: This does not add support for the option in the viewport.

===================================================================

M	source/gameengine/Converter/BL_BlenderDataConversion.cpp
M	source/gameengine/Ketsji/BL_Material.h
M	source/gameengine/Ketsji/KX_BlenderMaterial.cpp
M	source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
M	source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
M	source/gameengine/Rasterizer/RAS_MaterialBucket.cpp

===================================================================

diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index 0ec5441..9eba103 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 be66e2e..83f9b60 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 efaaed7..68a7121 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 47e5231..03f6e56 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 2db71c3..14223fc 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 0c71552..4b5fc65 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;




More information about the Bf-blender-cvs mailing list