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. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs