[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