Revision: 37938
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37938
Author:   kupoman
Date:     2011-06-29 05:24:56 +0000 (Wed, 29 Jun 2011)
Log Message:
-----------
This commit rearranges the rasterizer to use a strategy design pattern. The 
concrete strategies are various storage methods. Currently these are immediate 
mode, and vertex arrays. This will make it cleaner to add in the VBO support 
(rather than having it mixed in with the vertex array rasterizer).

In the process of changing the ListRasterizer to accommodate the changes to 
OpenGLRasterizer, a check for ATI cards no longer gets acted upon. This check 
may not have been necessary and would cause slow downs on ATI cards. Some 
testing will reveal if something needs to be added back in.

Modified Paths:
--------------
    
branches/soc-2011-cucumber/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    
branches/soc-2011-cucumber/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
    
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt
    
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
    
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
    
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
    
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h

Added Paths:
-----------
    
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_IStorage.h
    
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageIM.cpp
    
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageIM.h
    
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageVA.cpp
    
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageVA.h
    
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageVBO.cpp
    
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_StorageVBO.h

Removed Paths:
-------------
    
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
    
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.h

Modified: 
branches/soc-2011-cucumber/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- 
branches/soc-2011-cucumber/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
        2011-06-29 05:07:12 UTC (rev 37937)
+++ 
branches/soc-2011-cucumber/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
        2011-06-29 05:24:56 UTC (rev 37938)
@@ -59,7 +59,6 @@
 
 #include "RAS_GLExtensionManager.h"
 #include "RAS_OpenGLRasterizer.h"
-#include "RAS_VAOpenGLRasterizer.h"
 #include "RAS_ListRasterizer.h"
 
 #include "NG_LoopBackNetworkDeviceInterface.h"
@@ -205,9 +204,9 @@
                                rasterizer = new RAS_ListRasterizer(canvas);
                }
                else if (GLEW_VERSION_1_1 && !novertexarrays)
-                       rasterizer = new RAS_VAOpenGLRasterizer(canvas, false);
+                       rasterizer = new RAS_OpenGLRasterizer(canvas, RAS_VA);
                else
-                       rasterizer = new RAS_OpenGLRasterizer(canvas);
+                       rasterizer = new RAS_OpenGLRasterizer(canvas, 
RAS_IMMEDIATE);
                
                // create the inputdevices
                KX_BlenderKeyboardDevice* keyboarddevice = new 
KX_BlenderKeyboardDevice();

Modified: 
branches/soc-2011-cucumber/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
===================================================================
--- 
branches/soc-2011-cucumber/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
   2011-06-29 05:07:12 UTC (rev 37937)
+++ 
branches/soc-2011-cucumber/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
   2011-06-29 05:24:56 UTC (rev 37938)
@@ -78,7 +78,6 @@
 #include "SCA_IActuator.h"
 #include "RAS_MeshObject.h"
 #include "RAS_OpenGLRasterizer.h"
-#include "RAS_VAOpenGLRasterizer.h"
 #include "RAS_ListRasterizer.h"
 #include "RAS_GLExtensionManager.h"
 #include "KX_PythonInit.h"
@@ -574,9 +573,9 @@
                                m_rasterizer = new RAS_ListRasterizer(m_canvas);
                }
                else if (GLEW_VERSION_1_1)
-                       m_rasterizer = new RAS_VAOpenGLRasterizer(m_canvas);
+                       m_rasterizer = new RAS_OpenGLRasterizer(m_canvas, 
RAS_VA);
                else
-                       m_rasterizer = new RAS_OpenGLRasterizer(m_canvas);
+                       m_rasterizer = new RAS_OpenGLRasterizer(m_canvas, 
RAS_IMMEDIATE);
 
                /* Stereo parameters - Eye Separation from the UI - stereomode 
from the command-line/UI */
                m_rasterizer->SetStereoMode((RAS_IRasterizer::StereoMode) 
stereoMode);

Modified: 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt
===================================================================
--- 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt
 2011-06-29 05:07:12 UTC (rev 37937)
+++ 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt
 2011-06-29 05:24:56 UTC (rev 37938)
@@ -47,12 +47,17 @@
        RAS_GLExtensionManager.cpp
        RAS_ListRasterizer.cpp
        RAS_OpenGLRasterizer.cpp
-       RAS_VAOpenGLRasterizer.cpp
+    RAS_StorageIM.cpp
+    RAS_StorageVA.cpp
+    RAS_StorageVBO.cpp
 
        RAS_GLExtensionManager.h
+    RAS_IStorage.h
        RAS_ListRasterizer.h
        RAS_OpenGLRasterizer.h
-       RAS_VAOpenGLRasterizer.h
+    RAS_StorageIM.h
+    RAS_StorageVA.h
+    RAS_StorageVBO.h
 )
 
 add_definitions(-DGLEW_STATIC)

Added: 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_IStorage.h
===================================================================
--- 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_IStorage.h
                         (rev 0)
+++ 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_IStorage.h
 2011-06-29 05:24:56 UTC (rev 37938)
@@ -0,0 +1,62 @@
+/*
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __KX_STORAGE
+#define __KX_STORAGE
+
+#include "RAS_MaterialBucket.h"
+
+enum RAS_STORAGE_TYPE  {
+       RAS_IMMEDIATE,
+       RAS_VA
+};
+
+class RAS_IStorage
+{
+
+public:
+       virtual ~RAS_IStorage() {};
+
+       virtual bool    Init()=0;
+       virtual void    Exit()=0;
+
+       virtual void    IndexPrimitives(RAS_MeshSlot& ms)=0;
+       virtual void    IndexPrimitivesMulti(class RAS_MeshSlot& ms)=0;
+
+       virtual void    SetDrawingMode(int drawingmode)=0;
+
+
+#ifdef WITH_CXX_GUARDEDALLOC
+public:
+       void *operator new(size_t num_bytes) { return MEM_mallocN(num_bytes, 
"GE:RAS_IStorage"); }
+       void operator delete( void *mem ) { MEM_freeN(mem); }
+#endif
+};
+
+#endif //__KX_STORAGE
\ No newline at end of file

Modified: 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
===================================================================
--- 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
 2011-06-29 05:07:12 UTC (rev 37937)
+++ 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
 2011-06-29 05:24:56 UTC (rev 37938)
@@ -107,8 +107,7 @@
 
 
 RAS_ListRasterizer::RAS_ListRasterizer(RAS_ICanvas* canvas, bool 
useVertexArrays, bool lock)
-:      RAS_VAOpenGLRasterizer(canvas, lock),
-       mUseVertexArrays(useVertexArrays),
+:      RAS_OpenGLRasterizer(canvas, (useVertexArrays) ? RAS_VA : 
RAS_IMMEDIATE),
        mATI(false)
 {
        if (!strcmp((const char*)glGetString(GL_VENDOR), "ATI Technologies 
Inc."))
@@ -238,11 +237,8 @@
                        return;
                }
        }
-       // derived mesh cannot use vertex array
-       if (mUseVertexArrays && !ms.m_pDerivedMesh)
-               RAS_VAOpenGLRasterizer::IndexPrimitives(ms);
-       else
-               RAS_OpenGLRasterizer::IndexPrimitives(ms);
+       
+       RAS_OpenGLRasterizer::IndexPrimitives(ms);
 
        if(ms.m_bDisplayList) {
                localSlot->EndList();
@@ -267,13 +263,7 @@
                }
        }
 
-       // workaround: note how we do not use vertex arrays for making display
-       // lists, since glVertexAttribPointerARB doesn't seem to work correct
-       // in display lists on ATI? either a bug in the driver or in Blender ..
-       if (mUseVertexArrays && !mATI && !ms.m_pDerivedMesh)
-               RAS_VAOpenGLRasterizer::IndexPrimitivesMulti(ms);
-       else
-               RAS_OpenGLRasterizer::IndexPrimitivesMulti(ms);
+       RAS_OpenGLRasterizer::IndexPrimitivesMulti(ms);
 
        if(ms.m_bDisplayList) {
                localSlot->EndList();
@@ -283,29 +273,17 @@
 
 bool RAS_ListRasterizer::Init(void)
 {
-       if (mUseVertexArrays) {
-               return RAS_VAOpenGLRasterizer::Init();
-       } else {
-               return RAS_OpenGLRasterizer::Init();
-       }
+       return RAS_OpenGLRasterizer::Init();
 }
 
 void RAS_ListRasterizer::SetDrawingMode(int drawingmode)
 {
-       if (mUseVertexArrays) {
-               RAS_VAOpenGLRasterizer::SetDrawingMode(drawingmode);
-       } else {
-               RAS_OpenGLRasterizer::SetDrawingMode(drawingmode);
-       }
+       RAS_OpenGLRasterizer::SetDrawingMode(drawingmode);
 }
 
 void RAS_ListRasterizer::Exit()
 {
-       if (mUseVertexArrays) {
-               RAS_VAOpenGLRasterizer::Exit();
-       } else {
-               RAS_OpenGLRasterizer::Exit();
-       }
+       RAS_OpenGLRasterizer::Exit();
 }
 
 // eof

Modified: 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
===================================================================
--- 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
   2011-06-29 05:07:12 UTC (rev 37937)
+++ 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
   2011-06-29 05:24:56 UTC (rev 37938)
@@ -7,7 +7,7 @@
 #define __RAS_LISTRASTERIZER_H__
 
 #include "RAS_MaterialBucket.h"
-#include "RAS_VAOpenGLRasterizer.h"
+#include "RAS_OpenGLRasterizer.h"
 #include <vector>
 #include <map>
 
@@ -49,7 +49,7 @@
 typedef std::vector<RAS_ListSlot*>                                       
RAS_ListSlots;        // indexed by material slot number
 typedef std::map<DerivedMesh*, RAS_ListSlots*>           RAS_DerivedMeshLists;
 
-class RAS_ListRasterizer : public RAS_VAOpenGLRasterizer
+class RAS_ListRasterizer : public RAS_OpenGLRasterizer
 {
        bool mUseVertexArrays;
        bool mATI;

Modified: 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
===================================================================
--- 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
       2011-06-29 05:07:12 UTC (rev 37937)
+++ 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
       2011-06-29 05:24:56 UTC (rev 37938)
@@ -44,6 +44,10 @@
 #include "MT_CmMatrix4x4.h"
 #include "RAS_IRenderTools.h" // rendering text
 
+#include "RAS_StorageIM.h"
+#include "RAS_StorageVA.h"
+#include "RAS_StorageVBO.h"
+
 #include "GPU_draw.h"
 #include "GPU_material.h"
 #include "GPU_extensions.h"
@@ -68,7 +72,7 @@
  */
 static GLuint hinterlace_mask[33];
 
-RAS_OpenGLRasterizer::RAS_OpenGLRasterizer(RAS_ICanvas* canvas)
+RAS_OpenGLRasterizer::RAS_OpenGLRasterizer(RAS_ICanvas* canvas, int storage)
        :RAS_IRasterizer(canvas),
        m_2DCanvas(canvas),
        m_fogenabled(false),
@@ -99,16 +103,27 @@
                hinterlace_mask[i] = (i&1)*0xFFFFFFFF;
        }
        hinterlace_mask[32] = 0;
+       if (storage == RAS_VA)
+       {
+               m_storage = new RAS_StorageVA(&m_texco_num, m_texco, 
&m_attrib_num, m_attrib);
+               m_failsafe_storage = new RAS_StorageIM(&m_texco_num, m_texco, 
&m_attrib_num, m_attrib);
+       }
+       else
+       {
+               m_storage = m_failsafe_storage = new 
RAS_StorageIM(&m_texco_num, m_texco, &m_attrib_num, m_attrib);
+       }
 }
 
 
 
 RAS_OpenGLRasterizer::~RAS_OpenGLRasterizer()
 {
+       delete m_storage;
 }
 
 bool RAS_OpenGLRasterizer::Init()
 {
+       bool storage_init;
        GPU_state_init();
 
 
@@ -136,7 +151,9 @@
 
        glShadeModel(GL_SMOOTH);
 
-       return true;
+       storage_init = m_storage->Init();
+
+       return true && storage_init;
 }
 
 
@@ -257,6 +274,8 @@
 void RAS_OpenGLRasterizer::Exit()
 {
 
+       m_storage->Exit();
+
        glEnable(GL_CULL_FACE);
        glEnable(GL_DEPTH_TEST);
        glClearDepth(1.0); 

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to