[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53514] branches/ge_harmony: Exposing control of the multiple render targets used for the main render pass and the prepass to the UI .

Daniel Stokes kupomail at gmail.com
Thu Jan 3 01:20:26 CET 2013


Revision: 53514
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53514
Author:   kupoman
Date:     2013-01-03 00:20:15 +0000 (Thu, 03 Jan 2013)
Log Message:
-----------
Exposing control of the multiple render targets used for the main render pass and the prepass to the UI.

Modified Paths:
--------------
    branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py
    branches/ge_harmony/source/blender/blenkernel/intern/scene.c
    branches/ge_harmony/source/blender/blenloader/intern/readfile.c
    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_OpenGLRasterizer.cpp
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h

Modified: branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py
===================================================================
--- branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py	2013-01-02 23:10:14 UTC (rev 53513)
+++ branches/ge_harmony/release/scripts/startup/bl_ui/properties_game.py	2013-01-03 00:20:15 UTC (rev 53514)
@@ -366,7 +366,43 @@
                 col = split.column()
 
             layout.prop(gs, "dome_text")
+
+
+class RENDER_PT_game_render_targets(RenderButtonsPanel, Panel):
+    bl_label = "Render Targets"
+    COMPAT_ENGINES = {'BLENDER_GAME'}
+    
+    def draw(self, context):
+        layout = self.layout
+        gs = context.scene.game_settings
+        
+        col = layout.column()
+        col.label("Prepass:")
+        col.prop(gs, "prepass_resolution", text="Resolution")
+        col.prop(gs, "prepass_targets", text="Targets")
+        for i in range(gs.prepass_targets):
+            col = layout.column()
+            row = col.row(align=True)
+            row.label("Target %d:"%i)
+            row.prop(gs, "prepass_components_%d" % i, text="")
+            row.prop(gs, "prepass_format_%d" % i, text="")
+            if gs.render_technique == "INFERRED" and i in (0, 1):
+                col.enabled = False
             
+        col = layout.column()
+        col.label()
+        col.label("Render:")
+        col.prop(gs, "render_targets", text="Targets")
+        for i in range(gs.render_targets):
+            col = layout.column()
+            row = col.row(align=True)
+            row.label("Target %d:"%i)
+            row.prop(gs, "render_components_%d" % i, text="")
+            row.prop(gs, "render_format_%d" % i, text="")
+            if i == 0:
+                col.enabled = False
+
+
 def display_shader_settings(shader, layout, type="GLOBAL"):
     col = layout.column()
     

Modified: branches/ge_harmony/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/ge_harmony/source/blender/blenkernel/intern/scene.c	2013-01-02 23:10:14 UTC (rev 53513)
+++ branches/ge_harmony/source/blender/blenkernel/intern/scene.c	2013-01-03 00:20:15 UTC (rev 53514)
@@ -593,6 +593,10 @@
 
 	sce->gm.exitkey = 218; // Blender key code for ESC
 
+	sce->gm.r.prepassresolution = 100.0;
+	sce->gm.r.rendercomponents[0] = SCE_GAMERENDER_RGB;
+	sce->gm.r.renderformats[0] = SCE_GAMERENDER_8;
+
 	sce->gm.postfilters.first = sce->gm.postfilters.last = NULL;
 	sce->gm.actpostfilter = 0;
 

Modified: branches/ge_harmony/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/ge_harmony/source/blender/blenloader/intern/readfile.c	2013-01-02 23:10:14 UTC (rev 53513)
+++ branches/ge_harmony/source/blender/blenloader/intern/readfile.c	2013-01-03 00:20:15 UTC (rev 53514)
@@ -8494,6 +8494,14 @@
 		for (scene = main->scene.first; scene; scene = scene->id.next) {
 			if (scene->r.bake_samples == 0)
 				scene->r.bake_samples = 256;
+
+			/* If the prepass resolution has not been set,
+			then the render format needs to be set as well */
+			if (scene->gm.r.prepassresolution == 0.0) {
+				scene->gm.r.prepassresolution = 100.0;
+				scene->gm.r.rendercomponents[0] = SCE_GAMERENDER_RGB;
+				scene->gm.r.renderformats[0] = SCE_GAMERENDER_8;
+			}
 		}
 	}
 	/* WATCH IT!!!: pointers from libdata have not been converted yet here! */

Modified: branches/ge_harmony/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/ge_harmony/source/blender/makesdna/DNA_scene_types.h	2013-01-02 23:10:14 UTC (rev 53513)
+++ branches/ge_harmony/source/blender/makesdna/DNA_scene_types.h	2013-01-03 00:20:15 UTC (rev 53514)
@@ -604,13 +604,40 @@
 } RecastData;
 
 typedef struct GameRenderData {
-	int technique, pad;
+	float prepassresolution;
+	int prepasstargets;
+	int prepassformats[4];
+	int prepasscomponents[4];
+	int rendertargets;
+	int renderformats[4];
+	int rendercomponents[4];
+	int technique;
 } GameRenderData;
 
 /* These should match with RAS_IRasterizer::Technique */
 #define SCE_GAMERENDER_FORWARD	0
 #define SCE_GAMERENDER_INFERRED	1
 
+/* MRT Components */
+#define SCE_GAMERENDER_R	0
+#define SCE_GAMERENDER_RG	1
+#define SCE_GAMERENDER_RGB	2
+#define SCE_GAMERENDER_RGBA	3
+
+/* MRT Formats */
+#define SCE_GAMERENDER_8	0
+#define SCE_GAMERENDER_16	1
+#define SCE_GAMERENDER_16F	2
+#define SCE_GAMERENDER_32F	3
+#define SCE_GAMERENDER_8I	4
+#define SCE_GAMERENDER_16I	5
+#define SCE_GAMERENDER_32I	6
+#define SCE_GAMERENDER_8UI	7
+#define SCE_GAMERENDER_16UI	8
+#define SCE_GAMERENDER_32UI	9
+
+#define SCE_GAMERENDER_MAX_MRT	4
+
 typedef struct GameData {
 
 	/*  standalone player */

Modified: branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c	2013-01-02 23:10:14 UTC (rev 53513)
+++ branches/ge_harmony/source/blender/makesrna/intern/rna_scene.c	2013-01-03 00:20:15 UTC (rev 53514)
@@ -1346,6 +1346,23 @@
 		gm->exitkey = value;
 }
 
+static void rna_GameSettings_mrt_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
+{
+	Scene *sce = ptr->id.data;
+
+	if (sce->gm.r.technique == SCE_GAMERENDER_INFERRED) {
+		if (sce->gm.r.prepasstargets < 2)
+			sce->gm.r.prepasstargets = 2;
+		sce->gm.r.prepassformats[0] = SCE_GAMERENDER_16;
+		sce->gm.r.prepassformats[1] = SCE_GAMERENDER_16;
+		sce->gm.r.prepasscomponents[0] = SCE_GAMERENDER_RGBA;
+		sce->gm.r.prepasscomponents[1] = SCE_GAMERENDER_RGBA;
+	}
+
+	sce->gm.r.renderformats[0] = SCE_GAMERENDER_8;
+	sce->gm.r.rendercomponents[0] = SCE_GAMERENDER_RGB;
+}
+
 static PointerRNA rna_GameSettings_active_postfilter_get(PointerRNA *ptr)
 {
 	GameData *gm = (GameData *)ptr->data;
@@ -2531,6 +2548,28 @@
 		{0, NULL, 0, NULL, NULL}
 	};
 
+	static EnumPropertyItem target_components_items[] = {
+		{SCE_GAMERENDER_R, "R", 0, "R", "1 component"},
+		{SCE_GAMERENDER_RG, "RG", 0, "RG", "2 components"},
+		{SCE_GAMERENDER_RGB, "RGB", 0, "RGB", "3 components"},
+		{SCE_GAMERENDER_RGBA, "RGBA", 0, "RGBA", "4 components"},
+		{0, NULL, 0, NULL, NULL}
+	};
+
+	static EnumPropertyItem target_format_items[] = {
+		{SCE_GAMERENDER_8, "8", 0, "8", "8bit unsigned normalized integral format"},
+		{SCE_GAMERENDER_16, "16", 0, "16", "16bit unsigned normalized integral format"},
+		{SCE_GAMERENDER_16F, "16F", 0, "16F", "16bit floating point format (half float)"},
+		{SCE_GAMERENDER_32F, "32F", 0, "32F", "32bit floating point format"},
+		{SCE_GAMERENDER_8I, "8I", 0, "8I", "8bit signed integral format"},
+		{SCE_GAMERENDER_16I, "16I", 0, "16I", "16bit signed integral format"},
+		{SCE_GAMERENDER_16I, "32I", 0, "32I", "32bit signed integral format"},
+		{SCE_GAMERENDER_8UI, "8UI", 0, "8UI", "8bit unsigned integral format"},
+		{SCE_GAMERENDER_16UI, "16UI", 0, "16UI", "16bit unsigned integral format"},
+		{SCE_GAMERENDER_32UI, "32UI", 0, "32UI", "32bit unsigned integral format"},
+		{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");
@@ -2878,8 +2917,122 @@
 	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, "rna_GameSettings_mrt_update");
+
+	prop = RNA_def_property(srna, "prepass_resolution", PROP_FLOAT, PROP_PERCENTAGE);
+	RNA_def_property_float_sdna(prop, NULL, "r.prepassresolution");
+	RNA_def_property_range(prop, 10.0, 100.0);
+	RNA_def_property_ui_text(prop, "Prepass Resolution", "Percentage of resolution to use for the prepass");
 	RNA_def_property_update(prop, NC_SCENE, NULL);
 
+	prop = RNA_def_property(srna, "prepass_format_0", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "r.prepassformats[0]");
+	RNA_def_property_enum_items(prop, target_format_items);
+	RNA_def_property_ui_text(prop, "Prepass Target 0", "Format to use for the prepass render target");
+	RNA_def_property_update(prop, NC_SCENE, NULL);
+
+	prop = RNA_def_property(srna, "prepass_format_1", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "r.prepassformats[1]");
+	RNA_def_property_enum_items(prop, target_format_items);
+	RNA_def_property_ui_text(prop, "Prepass Target 1", "Format to use for the prepass render target");
+	RNA_def_property_update(prop, NC_SCENE, NULL);
+
+	prop = RNA_def_property(srna, "prepass_format_2", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "r.prepassformats[2]");
+	RNA_def_property_enum_items(prop, target_format_items);
+	RNA_def_property_ui_text(prop, "Prepass Target 2", "Format to use for the prepass render target");
+	RNA_def_property_update(prop, NC_SCENE, NULL);
+
+	prop = RNA_def_property(srna, "prepass_format_3", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "r.prepassformats[3]");
+	RNA_def_property_enum_items(prop, target_format_items);
+	RNA_def_property_ui_text(prop, "Prepass Target 3", "Format to use for the prepass render target");
+	RNA_def_property_update(prop, NC_SCENE, NULL);
+
+	prop = RNA_def_property(srna, "render_format_0", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "r.renderformats[0]");
+	RNA_def_property_enum_items(prop, target_format_items);
+	RNA_def_property_ui_text(prop, "Render Target 0", "Format to use for the render target");
+	RNA_def_property_update(prop, NC_SCENE, NULL);
+
+	prop = RNA_def_property(srna, "render_format_1", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "r.renderformats[1]");
+	RNA_def_property_enum_items(prop, target_format_items);
+	RNA_def_property_ui_text(prop, "Render Target 1", "Format to use for the render target");
+	RNA_def_property_update(prop, NC_SCENE, NULL);
+
+	prop = RNA_def_property(srna, "render_format_2", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "r.renderformats[2]");
+	RNA_def_property_enum_items(prop, target_format_items);
+	RNA_def_property_ui_text(prop, "Render Target 2", "Format to use for the render target");
+	RNA_def_property_update(prop, NC_SCENE, NULL);
+
+	prop = RNA_def_property(srna, "render_format_3", PROP_ENUM, PROP_NONE);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list