[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