[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39683] trunk/blender/source: Committing patch #25675 "Make "Cast Buffer Shadows" option work in viewport and BGE" by me.

Mitchell Stokes mogurijin at gmail.com
Wed Aug 24 22:28:55 CEST 2011


Revision: 39683
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39683
Author:   moguri
Date:     2011-08-24 20:28:54 +0000 (Wed, 24 Aug 2011)
Log Message:
-----------
Committing patch #25675 "Make "Cast Buffer Shadows" option work in viewport and BGE" by me.

Description from the tracker:
"It's really handy to be able to prevent an object/material from casting a shadow. So, I made use of the Cast Buffer Shadows option in the material settings, and made it work in the viewport and the BGE."

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/drawobject.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/makesdna/DNA_view3d_types.h
    trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
    trunk/blender/source/gameengine/Ketsji/BL_Material.h
    trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
    trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2011-08-24 19:31:14 UTC (rev 39682)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2011-08-24 20:28:54 UTC (rev 39683)
@@ -2843,8 +2843,20 @@
 	Object *ob= base->object;
 	Object *obedit= scene->obedit;
 	Mesh *me= ob->data;
+	Material *ma=NULL;
 	EditMesh *em= me->edit_mesh;
-	int do_alpha_pass= 0, drawlinked= 0, retval= 0, glsl, check_alpha;
+	int do_alpha_pass= 0, drawlinked= 0, retval= 0, glsl, check_alpha, i;
+
+	/* If we are drawing shadows and any of the materials don't cast a shadow, then don't draw the object */
+	if (v3d->flag2 & V3D_RENDER_SHADOW)
+	{
+		for(i=0; i<ob->totcol; ++i)
+		{
+			ma = give_current_material(ob, i);
+			if (ma && !(ma->mode & MA_SHADBUF))
+				return 1;
+		}
+	}
 	
 	if(obedit && ob!=obedit && ob->data==obedit->data) {
 		if(ob_get_key(ob) || ob_get_key(obedit));

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2011-08-24 19:31:14 UTC (rev 39682)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2011-08-24 20:28:54 UTC (rev 39683)
@@ -2155,7 +2155,7 @@
 		v3d->drawtype = OB_SOLID;
 		v3d->lay &= GPU_lamp_shadow_layer(shadow->lamp);
 		v3d->flag2 &= ~V3D_SOLID_TEX;
-		v3d->flag2 |= V3D_RENDER_OVERRIDE;
+		v3d->flag2 |= V3D_RENDER_OVERRIDE | V3D_RENDER_SHADOW;
 		
 		GPU_lamp_shadow_buffer_bind(shadow->lamp, viewmat, &winsize, winmat);
 

Modified: trunk/blender/source/blender/makesdna/DNA_view3d_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_view3d_types.h	2011-08-24 19:31:14 UTC (rev 39682)
+++ trunk/blender/source/blender/makesdna/DNA_view3d_types.h	2011-08-24 20:28:54 UTC (rev 39683)
@@ -247,6 +247,7 @@
 #define V3D_SOLID_TEX			8
 #define V3D_DISPGP				16
 #define V3D_LOCK_CAMERA			32
+#define V3D_RENDER_SHADOW		64 /* This is a runtime only flag that's used to tell draw_mesh_object() that we're doing a shadow pass instead of a regular draw */
 
 /* View3D->around */
 #define V3D_CENTER		 0

Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2011-08-24 19:31:14 UTC (rev 39682)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2011-08-24 20:28:54 UTC (rev 39683)
@@ -350,6 +350,8 @@
 
 		// use lighting?
 		material->ras_mode |= ( mat->mode & MA_SHLESS )?0:USE_LIGHT;
+		// cast shadows?
+		material->ras_mode |= ( mat->mode & MA_SHADBUF )?CAST_SHADOW:0;
 		MTex *mttmp = 0;
 		numchan = getNumTexChannels(mat);
 		int valid_index = 0;

Modified: trunk/blender/source/gameengine/Ketsji/BL_Material.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/BL_Material.h	2011-08-24 19:31:14 UTC (rev 39682)
+++ trunk/blender/source/gameengine/Ketsji/BL_Material.h	2011-08-24 20:28:54 UTC (rev 39683)
@@ -157,7 +157,8 @@
 	ALPHA=8,
 	// TRIANGLE=16,
 	USE_LIGHT=32,
-	WIRE=64
+	WIRE=64,
+	CAST_SHADOW=128
 };
 
 // -------------------------------------

Modified: trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp	2011-08-24 19:31:14 UTC (rev 39682)
+++ trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp	2011-08-24 20:28:54 UTC (rev 39683)
@@ -85,6 +85,7 @@
 	m_flag |= (mMaterial->IdMode>=ONETEX)? RAS_MULTITEX: 0;
 	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;
 
 	// figure max
 	int enabled = mMaterial->num_enabled;

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp	2011-08-24 19:31:14 UTC (rev 39682)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp	2011-08-24 20:28:54 UTC (rev 39683)
@@ -246,6 +246,11 @@
 	return dolights;
 }
 
+bool RAS_IPolyMaterial::CastsShadows() const
+{
+	return (m_flag & RAS_CASTSHADOW) != 0;
+}
+
 bool RAS_IPolyMaterial::UsesObjectColor() const
 {
 	return !(m_flag & RAS_BLENDERGLSL);

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h	2011-08-24 19:31:14 UTC (rev 39682)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h	2011-08-24 20:28:54 UTC (rev 39683)
@@ -62,7 +62,8 @@
 	RAS_AUTOGEN		=128,
 	RAS_NORMAL		=256,
 	RAS_DEFMULTI	=512,
-	RAS_BLENDERGLSL =1024
+	RAS_BLENDERGLSL =1024,
+	RAS_CASTSHADOW	=2048
 };
 
 /**
@@ -169,6 +170,7 @@
 	virtual void		GetMaterialRGBAColor(unsigned char *rgba) const;
 	virtual bool		UsesLighting(RAS_IRasterizer *rasty) const;
 	virtual bool		UsesObjectColor() const;
+	virtual bool		CastsShadows() const;
 
 	virtual void		Replace_IScene(SCA_IScene *val) {}; /* overridden by KX_BlenderMaterial */
 

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp	2011-08-24 19:31:14 UTC (rev 39682)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp	2011-08-24 20:28:54 UTC (rev 39683)
@@ -586,6 +586,9 @@
 	RAS_IRenderTools *rendertools)
 {
 	bool uselights;
+	
+	if(rasty->GetDrawingMode() == RAS_IRasterizer::KX_SHADOW && !m_material->CastsShadows())
+		return false;
 
 	if(!rasty->SetMaterial(*m_material))
 		return false;




More information about the Bf-blender-cvs mailing list