[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