diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-08-27 23:12:08 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-08-27 23:12:08 +0400 |
commit | 1aa359ab7bda681539a87bb6da5f1397b337e6eb (patch) | |
tree | ab30d3c4bab7460f3fec453ccd9d8d9dae6ff921 | |
parent | 3a5b40d8f554f527a195c6c71e7d63617919d99d (diff) |
Apricot Branch: bugfix for crash in shadow buffer rendering
combined with the shadow option for texfaces.
-rw-r--r-- | source/gameengine/Converter/BL_ArmatureObject.cpp | 1 | ||||
-rw-r--r-- | source/gameengine/Ketsji/BL_BlenderShader.cpp | 21 | ||||
-rw-r--r-- | source/gameengine/Ketsji/BL_BlenderShader.h | 1 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_KetsjiEngine.cpp | 2 |
4 files changed, 12 insertions, 13 deletions
diff --git a/source/gameengine/Converter/BL_ArmatureObject.cpp b/source/gameengine/Converter/BL_ArmatureObject.cpp index 701857acb68..340ed2b1644 100644 --- a/source/gameengine/Converter/BL_ArmatureObject.cpp +++ b/source/gameengine/Converter/BL_ArmatureObject.cpp @@ -63,6 +63,7 @@ BL_ArmatureObject::BL_ArmatureObject( /* we make a copy of blender object's pose, and then always swap it with * the original pose before calling into blender functions, to deal with * replica's or other objects using the same blender object */ + m_pose = NULL; copy_pose(&m_pose, m_objArma->pose, 1 /* copy_constraint_channels_hack */); } diff --git a/source/gameengine/Ketsji/BL_BlenderShader.cpp b/source/gameengine/Ketsji/BL_BlenderShader.cpp index ea96b9b3574..566cff000c3 100644 --- a/source/gameengine/Ketsji/BL_BlenderShader.cpp +++ b/source/gameengine/Ketsji/BL_BlenderShader.cpp @@ -20,16 +20,13 @@ BL_BlenderShader::BL_BlenderShader(KX_Scene *scene, struct Material *ma, int lig : mScene(scene), mMat(ma), - mGPUMat(NULL), mLightLayer(lightlayer) { mBlenderScene = scene->GetBlenderScene(); //GetSceneForName(scene->GetName()); mBlendMode = GPU_BLEND_SOLID; - if(mMat) { + if(mMat) GPU_material_from_blender(mBlenderScene, mMat); - mGPUMat = mMat->gpumaterial; - } } BL_BlenderShader::~BL_BlenderShader() @@ -55,9 +52,9 @@ void BL_BlenderShader::SetProg(bool enable, double time) { if(VerifyShader()) { if(enable) - GPU_material_bind(mGPUMat, mLightLayer, time); + GPU_material_bind(mMat->gpumaterial, mLightLayer, time); else - GPU_material_unbind(mGPUMat); + GPU_material_unbind(mMat->gpumaterial); } } @@ -69,7 +66,7 @@ int BL_BlenderShader::GetAttribNum() if(!VerifyShader()) return enabled; - GPU_material_vertex_attributes(mGPUMat, &attribs); + GPU_material_vertex_attributes(mMat->gpumaterial, &attribs); for(i = 0; i < attribs.totlayer; i++) if(attribs.layer[i].glindex+1 > enabled) @@ -92,7 +89,7 @@ void BL_BlenderShader::SetAttribs(RAS_IRasterizer* ras, const BL_Material *mat) return; if(ras->GetDrawingMode() == RAS_IRasterizer::KX_TEXTURED) { - GPU_material_vertex_attributes(mGPUMat, &attribs); + GPU_material_vertex_attributes(mMat->gpumaterial, &attribs); attrib_num = GetAttribNum(); ras->SetTexCoordNum(0); @@ -132,7 +129,7 @@ void BL_BlenderShader::Update(const RAS_MeshSlot & ms, RAS_IRasterizer* rasty ) VerifyShader(); - if(!mGPUMat || !GPU_material_bound(mGPUMat)) + if(!mMat->gpumaterial || !GPU_material_bound(mMat->gpumaterial)) return; MT_Matrix4x4 model; @@ -150,9 +147,9 @@ void BL_BlenderShader::Update(const RAS_MeshSlot & ms, RAS_IRasterizer* rasty ) else obcol[0]= obcol[1]= obcol[2]= obcol[3]= 1.0f; - GPU_material_bind_uniforms(mGPUMat, obmat, viewmat, viewinvmat, obcol); + GPU_material_bind_uniforms(mMat->gpumaterial, obmat, viewmat, viewinvmat, obcol); - mBlendMode = GPU_material_blend_mode(mGPUMat, obcol); + mBlendMode = GPU_material_blend_mode(mMat->gpumaterial, obcol); } int BL_BlenderShader::GetBlendMode() @@ -163,7 +160,7 @@ int BL_BlenderShader::GetBlendMode() bool BL_BlenderShader::Equals(BL_BlenderShader *blshader) { /* to avoid unneeded state switches */ - return (blshader && mGPUMat == blshader->mGPUMat && mLightLayer == blshader->mLightLayer); + return (blshader && mMat == blshader->mMat && mLightLayer == blshader->mLightLayer); } // eof diff --git a/source/gameengine/Ketsji/BL_BlenderShader.h b/source/gameengine/Ketsji/BL_BlenderShader.h index d2bbb8db3f8..5c1f59f94ad 100644 --- a/source/gameengine/Ketsji/BL_BlenderShader.h +++ b/source/gameengine/Ketsji/BL_BlenderShader.h @@ -30,7 +30,6 @@ private: KX_Scene *mScene; struct Scene *mBlenderScene; struct Material *mMat; - GPUMaterial *mGPUMat; int mLightLayer; int mBlendMode; diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp index 1e59eade0cc..cf98bb72601 100644 --- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp +++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp @@ -905,6 +905,8 @@ void KX_KetsjiEngine::RenderShadowBuffers(KX_Scene *scene) CListValue *objectlist = scene->GetObjectList(); int i, drawmode; + m_rendertools->SetAuxilaryClientInfo(scene); + for(i=0; i<objectlist->GetCount(); i++) { KX_GameObject *gameobj = (KX_GameObject*)objectlist->GetValue(i); |