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:
authorBenoit Bolsee <benoit.bolsee@online.be>2009-11-16 02:58:56 +0300
committerBenoit Bolsee <benoit.bolsee@online.be>2009-11-16 02:58:56 +0300
commitb45ab480e07931406785c8fc877e7cee849c8998 (patch)
tree88dbf52d49d1a3c26a5f4683517cfd3d7d7adcbf /source/gameengine/Rasterizer
parent349fa813eaf413cd2f472e545e7ce2cb6b087b1c (diff)
BGE: dynamic loading patch commited. API and demo files available here: https://projects.blender.org/tracker/?func=detail&aid=19492&group_id=9&atid=127
Diffstat (limited to 'source/gameengine/Rasterizer')
-rw-r--r--source/gameengine/Rasterizer/RAS_BucketManager.cpp41
-rw-r--r--source/gameengine/Rasterizer/RAS_BucketManager.h15
-rw-r--r--source/gameengine/Rasterizer/RAS_IPolygonMaterial.h4
-rw-r--r--source/gameengine/Rasterizer/RAS_MeshObject.cpp4
-rw-r--r--source/gameengine/Rasterizer/RAS_MeshObject.h2
5 files changed, 65 insertions, 1 deletions
diff --git a/source/gameengine/Rasterizer/RAS_BucketManager.cpp b/source/gameengine/Rasterizer/RAS_BucketManager.cpp
index 8b3c4990a7a..f5750b39998 100644
--- a/source/gameengine/Rasterizer/RAS_BucketManager.cpp
+++ b/source/gameengine/Rasterizer/RAS_BucketManager.cpp
@@ -317,3 +317,44 @@ void RAS_BucketManager::ReleaseMaterials(RAS_IPolyMaterial * mat)
}
}
+/* frees the bucket, only used when freeing scenes */
+void RAS_BucketManager::RemoveMaterial(RAS_IPolyMaterial * mat)
+{
+ BucketList::iterator bit, bitp;
+ list<RAS_MeshSlot>::iterator mit;
+ int i;
+
+
+ for(i=0; i<m_SolidBuckets.size(); i++) {
+ RAS_MaterialBucket *bucket = m_SolidBuckets[i];
+ if (mat == bucket->GetPolyMaterial()) {
+ m_SolidBuckets.erase(m_SolidBuckets.begin()+i);
+ delete bucket;
+ i--;
+ }
+ }
+
+ for(int i=0; i<m_AlphaBuckets.size(); i++) {
+ RAS_MaterialBucket *bucket = m_AlphaBuckets[i];
+ if (mat == bucket->GetPolyMaterial()) {
+ m_AlphaBuckets.erase(m_AlphaBuckets.begin()+i);
+ delete bucket;
+ i--;
+ }
+ }
+}
+
+//#include <stdio.h>
+
+void RAS_BucketManager::MergeBucketManager(RAS_BucketManager *other)
+{
+ /* concatinate lists */
+ // printf("BEFORE %d %d\n", GetSolidBuckets().size(), GetAlphaBuckets().size());
+ GetSolidBuckets().insert( GetSolidBuckets().end(), other->GetSolidBuckets().begin(), other->GetSolidBuckets().end() );
+ other->GetSolidBuckets().clear();
+
+ GetAlphaBuckets().insert( GetAlphaBuckets().end(), other->GetAlphaBuckets().begin(), other->GetAlphaBuckets().end() );
+ other->GetAlphaBuckets().clear();
+ //printf("AFTER %d %d\n", GetSolidBuckets().size(), GetAlphaBuckets().size());
+}
+
diff --git a/source/gameengine/Rasterizer/RAS_BucketManager.h b/source/gameengine/Rasterizer/RAS_BucketManager.h
index dcac41ab6e9..75b5e12a05b 100644
--- a/source/gameengine/Rasterizer/RAS_BucketManager.h
+++ b/source/gameengine/Rasterizer/RAS_BucketManager.h
@@ -60,6 +60,21 @@ public:
void ReleaseDisplayLists(RAS_IPolyMaterial * material = NULL);
void ReleaseMaterials(RAS_IPolyMaterial * material = NULL);
+ void RemoveMaterial(RAS_IPolyMaterial * mat); // freeing scenes only
+
+ /* for merging */
+ void MergeBucketManager(RAS_BucketManager *other);
+ BucketList & GetSolidBuckets() {return m_SolidBuckets;};
+ BucketList & GetAlphaBuckets() {return m_AlphaBuckets;};
+
+ /*void PrintStats(int verbose_level) {
+ printf("\nMappings...\n");
+ printf("\t m_SolidBuckets: %d\n", m_SolidBuckets.size());
+ printf("\t\t m_SolidBuckets: %d\n", m_SolidBuckets.size());
+ printf("\t m_AlphaBuckets: %d\n", m_AlphaBuckets.size());
+ }*/
+
+
private:
void OrderBuckets(const MT_Transform& cameratrans, BucketList& buckets, vector<sortedmeshslot>& slots, bool alpha);
diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
index af909dfa731..a387d96c383 100644
--- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
+++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
@@ -46,6 +46,7 @@ class RAS_IRasterizer;
struct MTFace;
struct Material;
struct Scene;
+class SCA_IScene;
enum MaterialProps
{
@@ -164,6 +165,9 @@ public:
virtual void GetMaterialRGBAColor(unsigned char *rgba) const;
virtual bool UsesLighting(RAS_IRasterizer *rasty) const;
virtual bool UsesObjectColor() const;
+
+ virtual void Replace_IScene(SCA_IScene *val) {}; /* overridden by KX_BlenderMaterial */
+
/*
* PreCalculate texture gen
*/
diff --git a/source/gameengine/Rasterizer/RAS_MeshObject.cpp b/source/gameengine/Rasterizer/RAS_MeshObject.cpp
index 0995d5acdd5..ffc18e5612f 100644
--- a/source/gameengine/Rasterizer/RAS_MeshObject.cpp
+++ b/source/gameengine/Rasterizer/RAS_MeshObject.cpp
@@ -104,6 +104,10 @@ RAS_MeshObject::~RAS_MeshObject()
for(it=m_Polygons.begin(); it!=m_Polygons.end(); it++)
delete (*it);
+
+ m_sharedvertex_map.clear();
+ m_Polygons.clear();
+ m_materials.clear();
}
bool RAS_MeshObject::MeshModified()
diff --git a/source/gameengine/Rasterizer/RAS_MeshObject.h b/source/gameengine/Rasterizer/RAS_MeshObject.h
index 1738423c4f3..c9ca8152a7e 100644
--- a/source/gameengine/Rasterizer/RAS_MeshObject.h
+++ b/source/gameengine/Rasterizer/RAS_MeshObject.h
@@ -80,7 +80,7 @@ public:
virtual ~RAS_MeshObject();
- bool IsDeformed() { return m_bDeformed; }
+ bool IsDeformed() { return (m_bDeformed && m_mesh); }
/* materials */
int NumMaterials();