[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12503] branches/game_engine/source/ gameengine: Patch [#7743] Enable display lists when vertex arrays are enabled, by Ovidiu Sabou.

Hamed Zaghaghi hamed.zaghaghi at gmail.com
Tue Nov 6 19:39:16 CET 2007


Revision: 12503
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12503
Author:   zaghaghi
Date:     2007-11-06 19:39:16 +0100 (Tue, 06 Nov 2007)

Log Message:
-----------
Patch [#7743] Enable display lists when vertex arrays are enabled, by Ovidiu Sabou.
this patch enable GE two use both vertex array and display lists. and speed up the engine a little, by the way thanks ovidiu.

Modified Paths:
--------------
    branches/game_engine/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    branches/game_engine/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
    branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
    branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h

Modified: branches/game_engine/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- branches/game_engine/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2007-11-06 14:27:06 UTC (rev 12502)
+++ branches/game_engine/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2007-11-06 18:39:16 UTC (rev 12503)
@@ -176,9 +176,13 @@
 		
 		bool lock_arrays = (displaylists && useVertexArrays);
 
-		if(displaylists && !useVertexArrays)
-			rasterizer = new RAS_ListRasterizer(canvas);
-		else if (useVertexArrays && bgl::QueryVersion(1, 1))
+		if(displaylists){
+			if (useVertexArrays) {
+				rasterizer = new RAS_ListRasterizer(canvas, true, lock_arrays);
+			} else {
+				rasterizer = new RAS_ListRasterizer(canvas);
+			}
+		} else if (useVertexArrays && bgl::QueryVersion(1, 1))
 			rasterizer = new RAS_VAOpenGLRasterizer(canvas, lock_arrays);
 		else
 			rasterizer = new RAS_OpenGLRasterizer(canvas);
@@ -663,4 +667,4 @@
 
 	} while (exitrequested == KX_EXIT_REQUEST_RESTART_GAME || exitrequested == KX_EXIT_REQUEST_START_OTHER_GAME);
 	if (bfd) BLO_blendfiledata_free(bfd);
-}
\ No newline at end of file
+}

Modified: branches/game_engine/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
===================================================================
--- branches/game_engine/source/gameengine/GamePlayer/ghost/GPG_Application.cpp	2007-11-06 14:27:06 UTC (rev 12502)
+++ branches/game_engine/source/gameengine/GamePlayer/ghost/GPG_Application.cpp	2007-11-06 18:39:16 UTC (rev 12503)
@@ -533,7 +533,11 @@
 			goto initFailed;
 		
 		if(useLists)
-			m_rasterizer = new RAS_ListRasterizer(m_canvas);
+			if (useVertexArrays) {
+				m_rasterizer = new RAS_ListRasterizer(m_canvas, true);
+			} else {
+				m_rasterizer = new RAS_ListRasterizer(m_canvas);
+			}
 		else if (useVertexArrays && bgl::QueryVersion(1, 1))
 			m_rasterizer = new RAS_VAOpenGLRasterizer(m_canvas);
 		else

Modified: branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
===================================================================
--- branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp	2007-11-06 14:27:06 UTC (rev 12502)
+++ branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp	2007-11-06 18:39:16 UTC (rev 12503)
@@ -96,8 +96,9 @@
 
 
 
-RAS_ListRasterizer::RAS_ListRasterizer(RAS_ICanvas* canvas)
-:	RAS_OpenGLRasterizer(canvas)
+RAS_ListRasterizer::RAS_ListRasterizer(RAS_ICanvas* canvas, bool useVertexArrays, bool lock)
+:	RAS_VAOpenGLRasterizer(canvas, lock),
+	mUseVertexArrays(useVertexArrays)
 {
 	// --
 }
@@ -159,14 +160,23 @@
 		if(localSlot->End()) 
 			return;
 	}
+	
+	if (mUseVertexArrays) {
+		RAS_VAOpenGLRasterizer::IndexPrimitives(
+				vertexarrays, indexarrays,
+				mode, polymat,
+				rendertools, useObjectColor,
+				rgbacolor,slot
+		);
+	} else {
+		RAS_OpenGLRasterizer::IndexPrimitives(
+				vertexarrays, indexarrays,
+				mode, polymat,
+				rendertools, useObjectColor,
+				rgbacolor,slot
+		);
+	}
 
-	RAS_OpenGLRasterizer::IndexPrimitives(
-			vertexarrays, indexarrays,
-			mode, polymat,
-			rendertools, useObjectColor,
-			rgbacolor,slot
-	);
-
 	if(!useObjectColor) {
 		localSlot->EndList();
 		*slot = localSlot;
@@ -195,16 +205,53 @@
 			return;
 	}
 
-	RAS_OpenGLRasterizer::IndexPrimitivesMulti(
-			vertexarrays, indexarrays,
-			mode, polymat,
-			rendertools, useObjectColor,
-			rgbacolor,slot
-	);
+	if (mUseVertexArrays) {
+		RAS_VAOpenGLRasterizer::IndexPrimitivesMulti(
+				vertexarrays, indexarrays,
+				mode, polymat,
+				rendertools, useObjectColor,
+				rgbacolor,slot
+		);
+	} else {
+		RAS_OpenGLRasterizer::IndexPrimitivesMulti(
+				vertexarrays, indexarrays,
+				mode, polymat,
+				rendertools, useObjectColor,
+				rgbacolor,slot
+		);
+	}
+
 	if(!useObjectColor) {
 		localSlot->EndList();
 		*slot = localSlot;
 	}
 }
 
+bool RAS_ListRasterizer::Init(void)
+{
+	if (mUseVertexArrays) {
+		return RAS_VAOpenGLRasterizer::Init();
+	} else {
+		return RAS_OpenGLRasterizer::Init();
+	}
+}
+
+void RAS_ListRasterizer::SetDrawingMode(int drawingmode)
+{
+	if (mUseVertexArrays) {
+		RAS_VAOpenGLRasterizer::SetDrawingMode(drawingmode);
+	} else {
+		RAS_OpenGLRasterizer::SetDrawingMode(drawingmode);
+	}
+}
+
+void RAS_ListRasterizer::Exit()
+{
+	if (mUseVertexArrays) {
+		RAS_VAOpenGLRasterizer::Exit();
+	} else {
+		RAS_OpenGLRasterizer::Exit();
+	}
+}
+
 // eof

Modified: branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
===================================================================
--- branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h	2007-11-06 14:27:06 UTC (rev 12502)
+++ branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h	2007-11-06 18:39:16 UTC (rev 12503)
@@ -2,7 +2,7 @@
 #define __RAS_LISTRASTERIZER_H__
 
 #include "RAS_MaterialBucket.h"
-#include "RAS_OpenGLRasterizer.h"
+#include "RAS_VAOpenGLRasterizer.h"
 #include <vector>
 
 class RAS_ListSlot : public KX_ListSlot
@@ -33,15 +33,16 @@
 
 typedef std::map<const vecVertexArray, RAS_ListSlot*> RAS_Lists;
 
-class RAS_ListRasterizer : public RAS_OpenGLRasterizer
+class RAS_ListRasterizer : public RAS_VAOpenGLRasterizer
 {
+	bool mUseVertexArrays;
 	RAS_Lists mLists;
 
 	RAS_ListSlot* FindOrAdd(const vecVertexArray& vertexarrays, KX_ListSlot** slot);
 	void ReleaseAlloc();
 
 public:
-	RAS_ListRasterizer(RAS_ICanvas* canvas);
+	RAS_ListRasterizer(RAS_ICanvas* canvas, bool useVertexArrays=false, bool lock=false);
 	virtual ~RAS_ListRasterizer();
 
 	virtual void IndexPrimitives(
@@ -66,6 +67,11 @@
 			class KX_ListSlot** slot
 	);
 
+	virtual bool	Init();
+	virtual void	Exit();
+
+	virtual void	SetDrawingMode(int drawingmode);
+
 	virtual bool	QueryLists(){return true;}
 };
 





More information about the Bf-blender-cvs mailing list