[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16302] branches/apricot/source/gameengine : Apricot Branch: bugfix, setting manual glsl shaders did not release
Brecht Van Lommel
brechtvanlommel at pandora.be
Fri Aug 29 16:13:26 CEST 2008
Revision: 16302
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16302
Author: blendix
Date: 2008-08-29 16:13:26 +0200 (Fri, 29 Aug 2008)
Log Message:
-----------
Apricot Branch: bugfix, setting manual glsl shaders did not release
displaylists, resulted in missing texture coordinates sometimes.
Modified Paths:
--------------
branches/apricot/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.cpp
branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.h
Modified: branches/apricot/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
===================================================================
--- branches/apricot/source/gameengine/Ketsji/KX_BlenderMaterial.cpp 2008-08-29 13:23:33 UTC (rev 16301)
+++ branches/apricot/source/gameengine/Ketsji/KX_BlenderMaterial.cpp 2008-08-29 14:13:26 UTC (rev 16302)
@@ -19,6 +19,7 @@
#include "MT_Vector4.h"
#include "MT_Matrix4x4.h"
+#include "RAS_BucketManager.h"
#include "RAS_MeshObject.h"
#include "RAS_IRasterizer.h"
#include "RAS_OpenGLRasterizer/RAS_GLExtensionManager.h"
@@ -818,6 +819,7 @@
if(mShader && !mShader->GetError()) {
m_flag &= ~RAS_BLENDERGLSL;
mMaterial->SetSharedMaterial(true);
+ mScene->GetBucketManager()->ReleaseDisplayLists(this);
Py_INCREF(mShader);
return mShader;
}else
Modified: branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.cpp
===================================================================
--- branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.cpp 2008-08-29 13:23:33 UTC (rev 16301)
+++ branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.cpp 2008-08-29 14:13:26 UTC (rev 16302)
@@ -249,25 +249,29 @@
(*bit)->Optimize(distance);
}
-void RAS_BucketManager::ReleaseDisplayLists()
+void RAS_BucketManager::ReleaseDisplayLists(RAS_IPolyMaterial *mat)
{
BucketList::iterator bit;
list<RAS_MeshSlot>::iterator mit;
for (bit = m_SolidBuckets.begin(); bit != m_SolidBuckets.end(); ++bit) {
- for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit) {
- if(mit->m_DisplayList) {
- mit->m_DisplayList->Release();
- mit->m_DisplayList = NULL;
+ if (mat == NULL || (mat == (*bit)->GetPolyMaterial())) {
+ for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit) {
+ if(mit->m_DisplayList) {
+ mit->m_DisplayList->Release();
+ mit->m_DisplayList = NULL;
+ }
}
}
}
for (bit = m_AlphaBuckets.begin(); bit != m_AlphaBuckets.end(); ++bit) {
- for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit) {
- if(mit->m_DisplayList) {
- mit->m_DisplayList->Release();
- mit->m_DisplayList = NULL;
+ if (mat == NULL || (mat == (*bit)->GetPolyMaterial())) {
+ for (mit = (*bit)->msBegin(); mit != (*bit)->msEnd(); ++mit) {
+ if(mit->m_DisplayList) {
+ mit->m_DisplayList->Release();
+ mit->m_DisplayList = NULL;
+ }
}
}
}
Modified: branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.h
===================================================================
--- branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.h 2008-08-29 13:23:33 UTC (rev 16301)
+++ branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.h 2008-08-29 14:13:26 UTC (rev 16302)
@@ -57,7 +57,7 @@
RAS_MaterialBucket* FindBucket(RAS_IPolyMaterial * material, bool &bucketCreated);
void OptimizeBuckets(MT_Scalar distance);
- void ReleaseDisplayLists();
+ void ReleaseDisplayLists(RAS_IPolyMaterial * material = NULL);
private:
void OrderBuckets(const MT_Transform& cameratrans, BucketList& buckets, vector<sortedmeshslot>& slots, bool alpha);
More information about the Bf-blender-cvs
mailing list