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

Reply via email to