[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