[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37943] branches/soc-2011-cucumber: Added a UI option to set the storage type (useful for debugging/ testing for older hardware).
Daniel Stokes
kupomail at gmail.com
Wed Jun 29 11:36:23 CEST 2011
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
More information about the Bf-blender-cvs
mailing list