Revision: 37943
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37943
Author:   kupoman
Date:     2011-06-29 09:36:23 +0000 (Wed, 29 Jun 2011)
Log Message:
-----------
Added a UI option to set the storage type (useful for debugging/testing for 
older hardware). Default is an auto select. This also simplifies the code to 
instantiate the rasterizer.

Modified Paths:
--------------
    branches/soc-2011-cucumber/release/scripts/startup/bl_ui/properties_game.py
    branches/soc-2011-cucumber/source/blender/makesdna/DNA_scene_types.h
    branches/soc-2011-cucumber/source/blender/makesrna/intern/rna_scene.c
    
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/RAS_IStorage.h
    
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

Modified: 
branches/soc-2011-cucumber/release/scripts/startup/bl_ui/properties_game.py
===================================================================
--- branches/soc-2011-cucumber/release/scripts/startup/bl_ui/properties_game.py 
2011-06-29 07:20:29 UTC (rev 37942)
+++ branches/soc-2011-cucumber/release/scripts/startup/bl_ui/properties_game.py 
2011-06-29 09:36:23 UTC (rev 37943)
@@ -390,6 +390,9 @@
         row.prop(gs, "use_display_lists")
         
         row = layout.row()
+        row.prop(gs, "raster_storage")
+        
+        row = layout.row()
         row.label("Exit Key")
         row.prop(gs, "exit_key", text="", event=True)
 

Modified: branches/soc-2011-cucumber/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/soc-2011-cucumber/source/blender/makesdna/DNA_scene_types.h        
2011-06-29 07:20:29 UTC (rev 37942)
+++ branches/soc-2011-cucumber/source/blender/makesdna/DNA_scene_types.h        
2011-06-29 09:36:23 UTC (rev 37943)
@@ -434,10 +434,11 @@
         * bit 3: (gameengine): Activity culling is enabled.
         * bit 5: (gameengine) : enable Bullet DBVT tree for view frustrum 
culling
        */
-       short mode, flag, matmode, pad[1];
+       short mode, flag, matmode;
        short occlusionRes;             /* resolution of occlusion Z buffer in 
pixel */
        short physicsEngine;
        short ticrate, maxlogicstep, physubstep, maxphystep;
+       short raster_storage;
        short exitkey;
 
        /* Dynamic Lights */
@@ -479,6 +480,12 @@
 #define WOPHY_ODE              4
 #define WOPHY_BULLET   5
 
+/* Render storage */
+#define RAS_STORE_AUTO         0
+#define RAS_STORE_IMMEDIATE    1
+#define RAS_STORE_VA           2
+#define RAS_STORE_VBO          3
+
 /* GameData.flag */
 #define GAME_ENABLE_ALL_FRAMES                         (1 << 1)
 #define GAME_SHOW_DEBUG_PROPS                          (1 << 2)

Modified: branches/soc-2011-cucumber/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- branches/soc-2011-cucumber/source/blender/makesrna/intern/rna_scene.c       
2011-06-29 07:20:29 UTC (rev 37942)
+++ branches/soc-2011-cucumber/source/blender/makesrna/intern/rna_scene.c       
2011-06-29 09:36:23 UTC (rev 37943)
@@ -1686,6 +1686,13 @@
                {GAME_MAT_GLSL, "GLSL", 0, "GLSL", "OpenGL shading language 
shaders"},
                {0, NULL, 0, NULL, NULL}};
 
+       static EnumPropertyItem storage_items[] ={
+               {RAS_STORE_AUTO, "AUTO", 0, "Auto Select", "Chooses the best 
supported mode"},
+               {RAS_STORE_IMMEDIATE, "IMMEDIATE", 0, "Immediate Mode", 
"Slowest performance, requires OpenGL (any version)"},
+               {RAS_STORE_VA, "VERTEX_ARRAY", 0, "Vertex Arrays", "Moderate 
performance, requires at least OpenGL 1.1"},
+               {RAS_STORE_VBO, "VERTEX_BUFFER_OBJECT", 0, "Vertex Buffer 
Objects", "Best performance, requires at least OpenGL 1.4"},
+               {0, NULL, 0, NULL, NULL}};
+
        srna= RNA_def_struct(brna, "SceneGameData", NULL);
        RNA_def_struct_sdna(srna, "GameData");
        RNA_def_struct_nested(brna, srna, "Scene");
@@ -1715,6 +1722,12 @@
        RNA_def_property_enum_funcs(prop, NULL, 
"rna_GameSettings_exit_key_set", NULL);
        RNA_def_property_ui_text(prop, "Exit Key",  "Sets the key that exits 
the Game Engine");
        RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "raster_storage", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "raster_storage");
+       RNA_def_property_enum_items(prop, storage_items);
+       RNA_def_property_ui_text(prop, "Storage",  "Sets the storage mode used 
by the rasterizer");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
        
        // Do we need it here ? (since we already have it in World
        prop= RNA_def_property(srna, "frequency", PROP_INT, PROP_NONE);

Modified: 
branches/soc-2011-cucumber/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- 
branches/soc-2011-cucumber/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
        2011-06-29 07:20:29 UTC (rev 37942)
+++ 
branches/soc-2011-cucumber/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
        2011-06-29 09:36:23 UTC (rev 37943)
@@ -197,20 +197,10 @@
                RAS_IRenderTools* rendertools = new KX_BlenderRenderTools();
                RAS_IRasterizer* rasterizer = NULL;
                
-               if(displaylists) {
-                       if (GLEW_ARB_vertex_buffer_object)
-                               rasterizer = new RAS_ListRasterizer(canvas, 
true, RAS_VBO);
-                       else if (GLEW_VERSION_1_1 && !novertexarrays)
-                               rasterizer = new RAS_ListRasterizer(canvas, 
true, RAS_VA);
-                       else
-                               rasterizer = new RAS_ListRasterizer(canvas, 
RAS_IMMEDIATE);
-               }
-               if (GLEW_ARB_vertex_buffer_object)
-                       rasterizer = new RAS_OpenGLRasterizer(canvas, RAS_VBO);
-               else if (GLEW_VERSION_1_1 && !novertexarrays)
-                       rasterizer = new RAS_OpenGLRasterizer(canvas, RAS_VA);
+               if(displaylists)
+                       rasterizer = new RAS_ListRasterizer(canvas, true, 
startscene->gm.raster_storage);
                else
-                       rasterizer = new RAS_OpenGLRasterizer(canvas, 
RAS_IMMEDIATE);
+                       rasterizer = new RAS_OpenGLRasterizer(canvas, 
startscene->gm.raster_storage);
                
                // 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 07:20:29 UTC (rev 37942)
+++ 
branches/soc-2011-cucumber/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
   2011-06-29 09:36:23 UTC (rev 37943)
@@ -566,20 +566,10 @@
                if (!m_rendertools)
                        goto initFailed;
                
-               if(useLists) {
-                       if (GLEW_ARB_vertex_buffer_object)
-                               m_rasterizer = new RAS_ListRasterizer(m_canvas, 
RAS_VBO);
-                       else if(GLEW_VERSION_1_1)
-                               m_rasterizer = new RAS_ListRasterizer(m_canvas, 
RAS_VA);
-                       else
-                               m_rasterizer = new RAS_ListRasterizer(m_canvas, 
RAS_IMMEDIATE);
-               }
-               else if (GLEW_ARB_vertex_buffer_object)
-                       m_rasterizer = new RAS_OpenGLRasterizer(m_canvas, 
RAS_VBO);
-               else if (GLEW_VERSION_1_1)
-                       m_rasterizer = new RAS_OpenGLRasterizer(m_canvas, 
RAS_VA);
+               if(useLists)
+                       m_rasterizer = new RAS_ListRasterizer(m_canvas, false, 
gm->raster_storage);
                else
-                       m_rasterizer = new RAS_OpenGLRasterizer(m_canvas, 
RAS_IMMEDIATE);
+                       m_rasterizer = new RAS_OpenGLRasterizer(m_canvas, 
gm->raster_storage);
 
                /* 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/RAS_IStorage.h
===================================================================
--- 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_IStorage.h
 2011-06-29 07:20:29 UTC (rev 37942)
+++ 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_IStorage.h
 2011-06-29 09:36:23 UTC (rev 37943)
@@ -33,6 +33,7 @@
 #include "RAS_MaterialBucket.h"
 
 enum RAS_STORAGE_TYPE  {
+       RAS_AUTO_STORAGE,
        RAS_IMMEDIATE,
        RAS_VA,
        RAS_VBO

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 07:20:29 UTC (rev 37942)
+++ 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
   2011-06-29 09:36:23 UTC (rev 37943)
@@ -61,7 +61,7 @@
 
 public:
        void RemoveListSlot(RAS_ListSlot* list);
-       RAS_ListRasterizer(RAS_ICanvas* canvas, bool lock=false, int 
storage=RAS_IMMEDIATE);
+       RAS_ListRasterizer(RAS_ICanvas* canvas, bool lock=false, int 
storage=RAS_AUTO_STORAGE);
        virtual ~RAS_ListRasterizer();
 
        virtual void    IndexPrimitives(class RAS_MeshSlot& ms);

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 07:20:29 UTC (rev 37942)
+++ 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
       2011-06-29 09:36:23 UTC (rev 37943)
@@ -104,19 +104,23 @@
                hinterlace_mask[i] = (i&1)*0xFFFFFFFF;
        }
        hinterlace_mask[32] = 0;
-       if (m_storage_type == RAS_VBO)
+
+       if (m_storage_type == RAS_VBO || m_storage_type == RAS_AUTO_STORAGE && 
GLEW_ARB_vertex_buffer_object)
        {
                m_storage = new RAS_StorageVBO(this, &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);
+               m_storage_type = RAS_VBO;
        }
-       if (m_storage_type == RAS_VA)
+       else if (m_storage_type == RAS_VA || m_storage_type == RAS_AUTO_STORAGE 
&& GLEW_VERSION_1_1)
        {
                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);
+               m_storage_type = RAS_VA;
        }
        else
        {
                m_storage = m_failsafe_storage = new 
RAS_StorageIM(&m_texco_num, m_texco, &m_attrib_num, m_attrib);
+               m_storage_type = RAS_IMMEDIATE;
        }
 }
 

Modified: 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
===================================================================
--- 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
 2011-06-29 07:20:29 UTC (rev 37942)
+++ 
branches/soc-2011-cucumber/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
 2011-06-29 09:36:23 UTC (rev 37943)
@@ -118,7 +118,7 @@
 
 public:
        double GetTime();
-       RAS_OpenGLRasterizer(RAS_ICanvas* canv, int storage=RAS_IMMEDIATE);
+       RAS_OpenGLRasterizer(RAS_ICanvas* canv, int storage=RAS_AUTO_STORAGE);
        virtual ~RAS_OpenGLRasterizer();
 
        /*enum DrawType

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to