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
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2008-08-27 23:12:08 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2008-08-27 23:12:08 +0400
commit1aa359ab7bda681539a87bb6da5f1397b337e6eb (patch)
treeab30d3c4bab7460f3fec453ccd9d8d9dae6ff921
parent3a5b40d8f554f527a195c6c71e7d63617919d99d (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.cpp1
-rw-r--r--source/gameengine/Ketsji/BL_BlenderShader.cpp21
-rw-r--r--source/gameengine/Ketsji/BL_BlenderShader.h1
-rw-r--r--source/gameengine/Ketsji/KX_KetsjiEngine.cpp2
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);