[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