[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19779] trunk/blender/source/gameengine/ Rasterizer: BGE: restore a feature that was lost in 2.48: sharing of display lists between duplicated objects.

Benoit Bolsee benoit.bolsee at online.be
Sat Apr 18 11:14:52 CEST 2009


Revision: 19779
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19779
Author:   ben2610
Date:     2009-04-18 11:14:51 +0200 (Sat, 18 Apr 2009)

Log Message:
-----------
BGE: restore a feature that was lost in 2.48: sharing of display lists between duplicated objects.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.h
    trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp	2009-04-18 08:40:14 UTC (rev 19778)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp	2009-04-18 09:14:51 UTC (rev 19779)
@@ -60,7 +60,7 @@
 
 RAS_MeshSlot::~RAS_MeshSlot()
 {
-	vector<RAS_DisplayArray*>::iterator it;
+	RAS_DisplayArrayList::iterator it;
 
 #ifdef USE_SPLIT
 	Split(true);
@@ -83,7 +83,7 @@
 
 RAS_MeshSlot::RAS_MeshSlot(const RAS_MeshSlot& slot)
 {
-	vector<RAS_DisplayArray*>::iterator it;
+	RAS_DisplayArrayList::iterator it;
 
 	m_clientObj = NULL;
 	m_pDeformer = NULL;
@@ -205,7 +205,7 @@
 
 void RAS_MeshSlot::SetDisplayArray(int numverts)
 {
-	vector<RAS_DisplayArray*>::iterator it;
+	RAS_DisplayArrayList::iterator it;
 	RAS_DisplayArray *darray = NULL;
 	
 	for(it=m_displayArrays.begin(); it!=m_displayArrays.end(); it++) {
@@ -297,7 +297,7 @@
 
 bool RAS_MeshSlot::Join(RAS_MeshSlot *target, MT_Scalar distance)
 {
-	vector<RAS_DisplayArray*>::iterator it;
+	RAS_DisplayArrayList::iterator it;
 	iterator mit;
 	size_t i;
 
@@ -362,7 +362,7 @@
 {
 	list<RAS_MeshSlot*>::iterator jit;
 	RAS_MeshSlot *target = m_joinSlot;
-	vector<RAS_DisplayArray*>::iterator it, jt;
+	RAS_DisplayArrayList::iterator it, jt;
 	iterator mit;
 	size_t i, found0 = 0, found1 = 0;
 

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.h
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.h	2009-04-18 08:40:14 UTC (rev 19778)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.h	2009-04-18 09:14:51 UTC (rev 19779)
@@ -86,9 +86,11 @@
 };
 
 /* Entry of a RAS_MeshObject into RAS_MaterialBucket */
+typedef std::vector<RAS_DisplayArray*>	RAS_DisplayArrayList;
 
 class RAS_MeshSlot
 {
+	friend class RAS_ListRasterizer;
 private:
 	//  indices into display arrays
 	int							m_startarray;
@@ -97,7 +99,7 @@
 	int							m_endindex;
 	int							m_startvertex;
 	int							m_endvertex;
-	vector<RAS_DisplayArray*>	m_displayArrays;
+	RAS_DisplayArrayList		m_displayArrays;
 
 	// for construction only
 	RAS_DisplayArray*			m_currentArray;

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp	2009-04-18 08:40:14 UTC (rev 19778)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp	2009-04-18 09:14:51 UTC (rev 19779)
@@ -136,10 +136,10 @@
 	*/
 	RAS_ListSlot* localSlot = (RAS_ListSlot*)ms.m_DisplayList;
 	if(!localSlot) {
-		RAS_Lists::iterator it = mLists.find(&ms);
+		RAS_Lists::iterator it = mLists.find(ms.m_displayArrays);
 		if(it == mLists.end()) {
 			localSlot = new RAS_ListSlot(this);
-			mLists.insert(std::pair<RAS_MeshSlot*, RAS_ListSlot*>(&ms, localSlot));
+			mLists.insert(std::pair<RAS_DisplayArrayList, RAS_ListSlot*>(ms.m_displayArrays, localSlot));
 		} else {
 			localSlot = static_cast<RAS_ListSlot*>(it->second->AddRef());
 		}

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h	2009-04-18 08:40:14 UTC (rev 19778)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h	2009-04-18 09:14:51 UTC (rev 19779)
@@ -35,7 +35,7 @@
 	LIST_REGEN		=64
 };
 
-typedef std::map<class RAS_MeshSlot*, RAS_ListSlot*> RAS_Lists;
+typedef std::map<RAS_DisplayArrayList, RAS_ListSlot*> RAS_Lists;
 
 class RAS_ListRasterizer : public RAS_VAOpenGLRasterizer
 {





More information about the Bf-blender-cvs mailing list