[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50135] branches/ge_harmony: Adding a UI setting to switch between Forward Rendering and the Light Prepass rendering (currently labeled Inferred Lighting as that is what it will eventually be) .

Daniel Stokes kupomail at gmail.com
Wed Aug 22 23:20:00 CEST 2012


Revision: 50135
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50135
Author:   kupoman
Date:     2012-08-22 21:19:59 +0000 (Wed, 22 Aug 2012)
Log Message:
-----------
Adding a UI setting to switch between Forward Rendering and the Light Prepass rendering (currently labeled Inferred Lighting as that is what it will eventually be). The option is under the shading options in the Render panel.

Modified Paths:
--------------
    branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py
    branches/ge_harmony/source/blender/makesdna/DNA_scene_types.h
    branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c
    branches/ge_harmony/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    branches/ge_harmony/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.h

Modified: branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py
===================================================================
--- branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py	2012-08-22 19:01:09 UTC (rev 50134)
+++ branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py	2012-08-22 21:19:59 UTC (rev 50135)
@@ -442,6 +442,9 @@
         layout.prop(gs, "material_mode", expand=True)
 
         if gs.material_mode == 'GLSL':
+            col = layout.column()
+            col.prop(gs, "render_technique", text="Technique")
+
             split = layout.split()
 
             col = split.column()

Modified: branches/ge_harmony/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/ge_harmony/source/blender/makesdna/DNA_scene_types.h	2012-08-22 19:01:09 UTC (rev 50134)
+++ branches/ge_harmony/source/blender/makesdna/DNA_scene_types.h	2012-08-22 21:19:59 UTC (rev 50135)
@@ -590,6 +590,14 @@
 	short pad1, pad2;
 } RecastData;
 
+typedef struct GameRenderData {
+	int technique, pad;
+} GameRenderData;
+
+/* These should match with RAS_IRasterizer::Technique */
+#define SCE_GAMERENDER_FORWARD	0
+#define SCE_GAMERENDER_INFERRED	1
+
 typedef struct GameData {
 
 	/*  standalone player */
@@ -631,6 +639,8 @@
 	ListBase postfilters;
 	int actgshader, shaderpad;
 	ListBase gshaders;
+
+	GameRenderData r;
 } GameData;
 
 #define STEREO_NOSTEREO		1

Modified: branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c	2012-08-22 19:01:09 UTC (rev 50134)
+++ branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c	2012-08-22 21:19:59 UTC (rev 50135)
@@ -2486,6 +2486,12 @@
 		{0, NULL, 0, NULL, NULL}
 	};
 
+	static EnumPropertyItem render_technique_items[] = {
+		{SCE_GAMERENDER_FORWARD, "FORWARD", 0, "Forward Rendring", "Slow with a lot of lights, most compatible"},
+		{SCE_GAMERENDER_INFERRED, "INFERRED", 0,  "Inferred Lighting", "Handles multiple dynamic lights well, maintains some compatibility with Blender materials"},
+		{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");
@@ -2821,6 +2827,14 @@
 	prop = RNA_def_property(srna, "show_obstacle_simulation", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "flag", GAME_SHOW_OBSTACLE_SIMULATION);
 	RNA_def_property_ui_text(prop, "Visualization", "Enable debug visualization for obstacle simulation");
+
+	/* Render Settings */
+	prop = RNA_def_property(srna, "render_technique", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "r.technique");
+	RNA_def_property_enum_items(prop, render_technique_items);
+	RNA_def_property_ui_text(prop, "Render Technique", "Method used to render the scene");
+	RNA_def_property_update(prop, NC_SCENE, NULL);
+
 	
 	/* Filter Settings */
 	prop = RNA_def_property(srna, "post_filters", PROP_COLLECTION, PROP_NONE);

Modified: branches/ge_harmony/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2012-08-22 19:01:09 UTC (rev 50134)
+++ branches/ge_harmony/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2012-08-22 21:19:59 UTC (rev 50135)
@@ -200,16 +200,17 @@
 		RAS_IRenderTools* rendertools = new KX_BlenderRenderTools();
 		RAS_IRasterizer* rasterizer = NULL;
 		
+		RAS_IRasterizer::Technique technique = (RAS_IRasterizer::Technique)startscene->gm.r.technique;
 		if (displaylists) {
 			if (GLEW_VERSION_1_1 && !novertexarrays)
-				rasterizer = new RAS_ListRasterizer(canvas, true, true);
+				rasterizer = new RAS_ListRasterizer(canvas, technique,  true, true);
 			else
-				rasterizer = new RAS_ListRasterizer(canvas);
+				rasterizer = new RAS_ListRasterizer(canvas, technique);
 		}
 		else if (GLEW_VERSION_1_1 && !novertexarrays)
-			rasterizer = new RAS_VAOpenGLRasterizer(canvas, false);
+			rasterizer = new RAS_VAOpenGLRasterizer(canvas, technique, false);
 		else
-			rasterizer = new RAS_OpenGLRasterizer(canvas);
+			rasterizer = new RAS_OpenGLRasterizer(canvas, technique);
 		
 		// create the inputdevices
 		KX_BlenderKeyboardDevice* keyboarddevice = new KX_BlenderKeyboardDevice();

Modified: branches/ge_harmony/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/GamePlayer/ghost/GPG_Application.cpp	2012-08-22 19:01:09 UTC (rev 50134)
+++ branches/ge_harmony/source/gameengine/GamePlayer/ghost/GPG_Application.cpp	2012-08-22 21:19:59 UTC (rev 50135)
@@ -578,17 +578,18 @@
 		m_rendertools = new GPC_RenderTools();
 		if (!m_rendertools)
 			goto initFailed;
-		
+
+		RAS_IRasterizer::Technique technique = (RAS_IRasterizer::Technique)gm->r.technique;
 		if (useLists) {
 			if (GLEW_VERSION_1_1)
-				m_rasterizer = new RAS_ListRasterizer(m_canvas, true);
+				m_rasterizer = new RAS_ListRasterizer(m_canvas, technique, true);
 			else
-				m_rasterizer = new RAS_ListRasterizer(m_canvas);
+				m_rasterizer = new RAS_ListRasterizer(m_canvas, technique);
 		}
 		else if (GLEW_VERSION_1_1)
-			m_rasterizer = new RAS_VAOpenGLRasterizer(m_canvas);
+			m_rasterizer = new RAS_VAOpenGLRasterizer(m_canvas, technique);
 		else
-			m_rasterizer = new RAS_OpenGLRasterizer(m_canvas);
+			m_rasterizer = new RAS_OpenGLRasterizer(m_canvas, technique);
 
 		/* Stereo parameters - Eye Separation from the UI - stereomode from the command-line/UI */
 		m_rasterizer->SetStereoMode((RAS_IRasterizer::StereoMode) stereoMode);

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h	2012-08-22 19:01:09 UTC (rev 50134)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h	2012-08-22 21:19:59 UTC (rev 50135)
@@ -100,7 +100,15 @@
 	};
 
 	/**
+	 * Rendering Techniques (match with DNA_scene_types)
 	 */
+	enum Technique {
+			KX_TECH_FORWARD,
+			KX_TECH_INFERRED
+	};
+
+	/**
+	 */
 	enum {
 		RAS_RENDER_3DPOLYGON_TEXT = 64,	/* GEMAT_TEXT */
 		KX_BACKCULL = 16,		/* GEMAT_BACKCULL */

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp	2012-08-22 19:01:09 UTC (rev 50134)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp	2012-08-22 21:19:59 UTC (rev 50135)
@@ -106,8 +106,8 @@
 
 
 
-RAS_ListRasterizer::RAS_ListRasterizer(RAS_ICanvas* canvas, bool useVertexArrays, bool lock)
-:	RAS_VAOpenGLRasterizer(canvas, lock),
+RAS_ListRasterizer::RAS_ListRasterizer(RAS_ICanvas* canvas, RAS_IRasterizer::Technique tech, bool useVertexArrays, bool lock)
+:	RAS_VAOpenGLRasterizer(canvas, tech, lock),
 	mUseVertexArrays(useVertexArrays),
 	mATI(false)
 {

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h	2012-08-22 19:01:09 UTC (rev 50134)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h	2012-08-22 21:19:59 UTC (rev 50135)
@@ -61,7 +61,7 @@
 
 public:
 	void RemoveListSlot(RAS_ListSlot* list);
-	RAS_ListRasterizer(RAS_ICanvas* canvas, bool useVertexArrays=false, bool lock=false);
+	RAS_ListRasterizer(RAS_ICanvas* canvas, RAS_IRasterizer::Technique tech, bool useVertexArrays=false, bool lock=false);
 	virtual ~RAS_ListRasterizer();
 
 	virtual void	IndexPrimitives(class RAS_MeshSlot& ms);

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2012-08-22 19:01:09 UTC (rev 50134)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2012-08-22 21:19:59 UTC (rev 50135)
@@ -71,7 +71,7 @@
  */
 static GLuint hinterlace_mask[33];
 
-RAS_OpenGLRasterizer::RAS_OpenGLRasterizer(RAS_ICanvas* canvas)
+RAS_OpenGLRasterizer::RAS_OpenGLRasterizer(RAS_ICanvas* canvas, RAS_IRasterizer::Technique tech)
 	:RAS_IRasterizer(canvas),
 	m_2DCanvas(canvas),
 	m_fogenabled(false),
@@ -92,7 +92,8 @@
 	m_last_frontface(true),
 	m_materialCachingInfo(0),
 	m_width(0),
-	m_height(0)
+	m_height(0),
+	m_technique(tech)
 {
 	m_viewmatrix.setIdentity();
 	m_viewinvmatrix.setIdentity();
@@ -118,8 +119,11 @@
 	m_target_enabled[3] = false;
 
 	// Light Map (Handle this here to sneak in before material conversion)
-	m_light_target = GPU_texture_create_2D(0, 0, NULL, NULL);
-	GPU_material_set_light_map(m_light_target);
+	if (m_technique == KX_TECH_INFERRED)
+	{
+		m_light_target = GPU_texture_create_2D(0, 0, NULL, NULL);
+		GPU_material_set_light_map(m_light_target);
+	}
 }
 
 
@@ -128,8 +132,12 @@
 {
 	// Restore the previous AF value
 	GPU_set_anisotropic(m_prevafvalue);
-	GPU_texture_free(m_light_target);
-	GPU_material_set_light_map(NULL);
+
+	if (m_technique == KX_TECH_INFERRED)
+	{
+		GPU_texture_free(m_light_target);
+		GPU_material_set_light_map(NULL);
+	}
 }
 
 bool RAS_OpenGLRasterizer::Init()
@@ -165,12 +173,14 @@
 	glGenFramebuffersEXT(1, &m_fbo);
 	glGenTextures(1, &m_depth_target);
 	glGenTextures(RAS_MAX_MRT, m_color_target);
-	glGenTextures(2, m_prepass_target);
 
-	m_light_shader = GPU_shader_get_builtin_shader(GPU_SHADER_LIGHT);
+	if (m_technique == KX_TECH_INFERRED)
+	{
+		glGenTextures(2, m_prepass_target);
+		m_light_shader = GPU_shader_get_builtin_shader(GPU_SHADER_LIGHT);
+		init_sphere();
+	}
 
-	init_sphere();
-
 	return true;
 }
 
@@ -339,12 +349,15 @@
 		glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SINGLE_COLOR);
 
 	glDeleteTextures(RAS_MAX_MRT, m_color_target);
-	glDeleteTextures(2, m_prepass_target);
 	glDeleteTextures(1, &m_depth_target);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list