diff options
author | Benoit Bolsee <benoit.bolsee@online.be> | 2009-11-16 02:58:56 +0300 |
---|---|---|
committer | Benoit Bolsee <benoit.bolsee@online.be> | 2009-11-16 02:58:56 +0300 |
commit | b45ab480e07931406785c8fc877e7cee849c8998 (patch) | |
tree | 88dbf52d49d1a3c26a5f4683517cfd3d7d7adcbf /source/gameengine/Rasterizer | |
parent | 349fa813eaf413cd2f472e545e7ce2cb6b087b1c (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.cpp | 41 | ||||
-rw-r--r-- | source/gameengine/Rasterizer/RAS_BucketManager.h | 15 | ||||
-rw-r--r-- | source/gameengine/Rasterizer/RAS_IPolygonMaterial.h | 4 | ||||
-rw-r--r-- | source/gameengine/Rasterizer/RAS_MeshObject.cpp | 4 | ||||
-rw-r--r-- | source/gameengine/Rasterizer/RAS_MeshObject.h | 2 |
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(); |