Revision: 42620
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42620
Author:   moguri
Date:     2011-12-14 01:02:19 +0000 (Wed, 14 Dec 2011)
Log Message:
-----------
VSM updates:
  * Bleed bias and bias are now settable in the UI
  * The algorithm (simple versus variance) is now settable in the UI
  * The builtin shaders are now being properly freed

Modified Paths:
--------------
    branches/ge_harmony/release/scripts/startup/bl_ui/properties_data_lamp.py
    branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.c
    branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c
    branches/ge_harmony/source/blender/gpu/intern/gpu_material.c
    branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl
    branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl.c
    branches/ge_harmony/source/blender/makesdna/DNA_lamp_types.h
    branches/ge_harmony/source/blender/makesrna/intern/rna_lamp.c

Modified: 
branches/ge_harmony/release/scripts/startup/bl_ui/properties_data_lamp.py
===================================================================
--- branches/ge_harmony/release/scripts/startup/bl_ui/properties_data_lamp.py   
2011-12-14 00:43:42 UTC (rev 42619)
+++ branches/ge_harmony/release/scripts/startup/bl_ui/properties_data_lamp.py   
2011-12-14 01:02:19 UTC (rev 42620)
@@ -218,10 +218,14 @@
         col.prop(lamp, "use_only_shadow")
     
         col = layout.column()
+        col.label("Algorithm:")
+        col.prop(lamp, "shadow_map_type", text="", toggle=True)
         col.label("Quality:")
         col = layout.column(align=True)
         col.prop(lamp, "shadow_buffer_size", text="Size")
         col.prop(lamp, "shadow_buffer_bias", text="Bias")
+        col.prop(lamp, "shadow_buffer_bleed_bias", text="Bleed Bias")
+               
         
         row = layout.row()
         row.label("Clipping:")

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.c 2011-12-14 
00:43:42 UTC (rev 42619)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.c 2011-12-14 
01:02:19 UTC (rev 42620)
@@ -248,6 +248,9 @@
                BLI_ghash_free(FUNCTION_HASH, NULL, (GHashValFreeFP)MEM_freeN);
                FUNCTION_HASH = NULL;
        }
+
+       GPU_shader_free_builtin_shader(GPU_SHADER_VSM_STORE);
+       GPU_shader_free_builtin_shader(GPU_SHADER_SEP_GAUSSIAN_BLUR);
        /*if(FUNCTION_PROTOTYPES) {
                MEM_freeN(FUNCTION_PROTOTYPES);
                FUNCTION_PROTOTYPES = NULL;

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c      
2011-12-14 00:43:42 UTC (rev 42619)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c      
2011-12-14 01:02:19 UTC (rev 42620)
@@ -1279,8 +1279,10 @@
        {
        case GPU_SHADER_VSM_STORE:
                s = &GG.shaders.vsm_store;
+               break;
        case GPU_SHADER_SEP_GAUSSIAN_BLUR:
                s = &GG.shaders.sep_gaussian_blur;
+               break;
        default:
                s = NULL;
        }

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_material.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_material.c        
2011-12-14 00:43:42 UTC (rev 42619)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_material.c        
2011-12-14 01:02:19 UTC (rev 42620)
@@ -711,19 +711,19 @@
                if(!(mat->scene->gm.flag & GAME_GLSL_NO_SHADOWS)) {
                        mat->dynproperty |= DYN_LAMP_PERSMAT;
                        
-#if 0
-                       GPU_link(mat, "test_shadowbuf",
-                               GPU_builtin(GPU_VIEW_POSITION),
-                               GPU_dynamic_texture(lamp->tex, 
GPU_DYNAMIC_SAMPLER_2DSHADOW, lamp->ob),
-                               GPU_dynamic_uniform((float*)lamp->dynpersmat, 
GPU_DYNAMIC_LAMP_DYNPERSMAT, lamp->ob),
-                               GPU_uniform(&lamp->bias), inp, &shadfac);
-#else
-                       GPU_link(mat, "test_shadowbuf_vsm",
-                               GPU_builtin(GPU_VIEW_POSITION),
-                               GPU_dynamic_texture(lamp->tex, 
GPU_DYNAMIC_SAMPLER_2DSHADOW, lamp->ob),
-                               GPU_dynamic_uniform((float*)lamp->dynpersmat, 
GPU_DYNAMIC_LAMP_DYNPERSMAT, lamp->ob),
-                               GPU_uniform(&lamp->bias), inp, &shadfac);
-#endif
+                       if(lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE) {
+                               GPU_link(mat, "test_shadowbuf_vsm",
+                                       GPU_builtin(GPU_VIEW_POSITION),
+                                       GPU_dynamic_texture(lamp->tex, 
GPU_DYNAMIC_SAMPLER_2DSHADOW, lamp->ob),
+                                       
GPU_dynamic_uniform((float*)lamp->dynpersmat, GPU_DYNAMIC_LAMP_DYNPERSMAT, 
lamp->ob),
+                                       GPU_uniform(&lamp->bias), 
GPU_uniform(&lamp->la->bleedbias), inp, &shadfac);
+                       } else {
+                               GPU_link(mat, "test_shadowbuf",
+                                       GPU_builtin(GPU_VIEW_POSITION),
+                                       GPU_dynamic_texture(lamp->tex, 
GPU_DYNAMIC_SAMPLER_2DSHADOW, lamp->ob),
+                                       
GPU_dynamic_uniform((float*)lamp->dynpersmat, GPU_DYNAMIC_LAMP_DYNPERSMAT, 
lamp->ob),
+                                       GPU_uniform(&lamp->bias), inp, 
&shadfac);
+                       }
                        
                        if(lamp->mode & LA_ONLYSHADOW) {
                                GPU_link(mat, "shade_only_shadow", i, shadfac,
@@ -1651,7 +1651,10 @@
                }
 
                /* Shadow color map */
-               lamp->tex = GPU_texture_create_shadow_map(lamp->size, NULL);
+               if(lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE)
+                       lamp->tex = GPU_texture_create_shadow_map(lamp->size, 
NULL);
+               else
+                       lamp->tex = GPU_texture_create_depth(lamp->size, 
lamp->size, NULL);
                if(!lamp->tex) {
                        gpu_lamp_shadow_free(lamp);
                        return lamp;
@@ -1662,34 +1665,36 @@
                        return lamp;
                }
 
-               /* Shadow depth map */
-               lamp->depthtex = GPU_texture_create_depth(lamp->size, 
lamp->size, NULL);
-               if(!lamp->depthtex) {
-                       gpu_lamp_shadow_free(lamp);
-                       return lamp;
-               }
+               if(lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE) {
+                       /* Shadow depth map */
+                       lamp->depthtex = GPU_texture_create_depth(lamp->size, 
lamp->size, NULL);
+                       if(!lamp->depthtex) {
+                               gpu_lamp_shadow_free(lamp);
+                               return lamp;
+                       }
                
-               if(!GPU_framebuffer_texture_attach(lamp->fb, lamp->depthtex, 
NULL)) {
-                       gpu_lamp_shadow_free(lamp);
-                       return lamp;
-               }
+                       if(!GPU_framebuffer_texture_attach(lamp->fb, 
lamp->depthtex, NULL)) {
+                               gpu_lamp_shadow_free(lamp);
+                               return lamp;
+                       }
 
-               /* FBO and texture for blurring */
-               lamp->blurfb = GPU_framebuffer_create();
-               if(!lamp->blurfb) {
-                       gpu_lamp_shadow_free(lamp);
-                       return lamp;
-               }
+                       /* FBO and texture for blurring */
+                       lamp->blurfb = GPU_framebuffer_create();
+                       if(!lamp->blurfb) {
+                               gpu_lamp_shadow_free(lamp);
+                               return lamp;
+                       }
 
-               lamp->blurtex = GPU_texture_create_shadow_map(lamp->size*0.5, 
NULL);
-               if(!lamp->blurtex) {
-                       gpu_lamp_shadow_free(lamp);
-                       return lamp;
-               }
+                       lamp->blurtex = 
GPU_texture_create_shadow_map(lamp->size*0.5, NULL);
+                       if(!lamp->blurtex) {
+                               gpu_lamp_shadow_free(lamp);
+                               return lamp;
+                       }
                
-               if(!GPU_framebuffer_texture_attach(lamp->blurfb, lamp->blurtex, 
NULL)) {
-                       gpu_lamp_shadow_free(lamp);
-                       return lamp;
+                       if(!GPU_framebuffer_texture_attach(lamp->blurfb, 
lamp->blurtex, NULL)) {
+                               gpu_lamp_shadow_free(lamp);
+                               return lamp;
+                       }
                }
 
 
@@ -1770,7 +1775,8 @@
        glDisable(GL_SCISSOR_TEST);
        GPU_framebuffer_texture_bind(lamp->fb, lamp->tex,
                GPU_texture_opengl_width(lamp->tex), 
GPU_texture_opengl_height(lamp->tex));
-       GPU_shader_bind(GPU_shader_get_builtin_shader(GPU_SHADER_VSM_STORE));
+       if(lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE)
+               
GPU_shader_bind(GPU_shader_get_builtin_shader(GPU_SHADER_VSM_STORE));
 
        /* set matrices */
        copy_m4_m4(viewmat, lamp->viewmat);
@@ -1780,8 +1786,11 @@
 
 void GPU_lamp_shadow_buffer_unbind(GPULamp *lamp)
 {
-       GPU_shader_unbind(GPU_shader_get_builtin_shader(GPU_SHADER_VSM_STORE));
-       GPU_framebuffer_blur(lamp->fb, lamp->tex, lamp->blurfb, lamp->blurtex);
+       if(lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE) {
+               
GPU_shader_unbind(GPU_shader_get_builtin_shader(GPU_SHADER_VSM_STORE));
+               GPU_framebuffer_blur(lamp->fb, lamp->tex, lamp->blurfb, 
lamp->blurtex);
+       }
+
        GPU_framebuffer_texture_unbind(lamp->fb, lamp->tex);
        GPU_framebuffer_restore();
        glEnable(GL_SCISSOR_TEST);

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl      
2011-12-14 00:43:42 UTC (rev 42619)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl      
2011-12-14 01:02:19 UTC (rev 42620)
@@ -1789,7 +1789,7 @@
        }
 }
 
-void test_shadowbuf_vsm(vec3 rco, sampler2D shadowmap, mat4 shadowpersmat, 
float shadowbias, float inp, out float result)
+void test_shadowbuf_vsm(vec3 rco, sampler2D shadowmap, mat4 shadowpersmat, 
float shadowbias, float bleedbias, float inp, out float result)
 {
        if(inp <= 0.0) {
                result = 0.0;
@@ -1804,15 +1804,13 @@
                        p = 1.0;
 
                float variance = moments.y - (moments.x*moments.x);
-               variance = max(variance, 0.1/10.0);
+               variance = max(variance, shadowbias/10.0);
 
                float d = moments.x - dist;
                float p_max = variance / (variance + d*d);
 
                // Now reduce light-bleeding by removing the [0, x] tail and 
linearly rescaling (x, 1]
-               // XXX this x value should be user settable
-               float x = shadowbias*20.0;
-               p_max = clamp((p_max-x)/(1.0-x), 0, 1);
+               p_max = clamp((p_max-bleedbias)/(1.0-bleedbias), 0, 1);
 
                result = max(p, p_max);
        }

Modified: 
branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl.c    
2011-12-14 00:43:42 UTC (rev 42619)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl.c    
2011-12-14 01:02:19 UTC (rev 42620)
@@ -1,1318 +1,1317 @@
 /* DataToC output of file <gpu_shader_material_glsl> */
 
-int datatoc_gpu_shader_material_glsl_size= 50029;
+int datatoc_gpu_shader_material_glsl_size= 49992;
 char datatoc_gpu_shader_material_glsl[]= {
- 13, 10,102,108,111, 97,116, 32,101,120,112, 95, 98,
-108,101,110,100,101,114, 40,102,108,111, 97,116, 32,102, 41, 13, 10,123, 13, 
10,  9,114,101,116,117,114,110, 32,112,111,119, 40,
- 50, 46, 55, 49, 56, 50, 56, 49, 56, 50, 56, 52, 54, 44, 32,102, 41, 59, 13, 
10,125, 13, 10, 13, 10,118,111,105,100, 32,114,103,
- 98, 95,116,111, 95,104,115,118, 40,118,101, 99, 52, 32,114,103, 98, 44, 
32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,
-111,108, 41, 13, 10,123, 13, 10,  9,102,108,111, 97,116, 32, 99,109, 97,120, 
44, 32, 99,109,105,110, 44, 32,104, 44, 32,115, 44,
- 32,118, 44, 32, 99,100,101,108,116, 97, 59, 13, 10,  9,118,101, 99, 51, 32, 
99, 59, 13, 10, 13, 10,  9, 99,109, 97,120, 32, 61,
- 32,109, 97,120, 40,114,103, 98, 91, 48, 93, 44, 32,109, 97,120, 40,114,103, 
98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41,
- 41, 59, 13, 10,  9, 99,109,105,110, 32, 61, 32,109,105,110, 40,114,103, 98, 
91, 48, 93, 44, 32,109,105,110, 40,114,103, 98, 91,
- 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 13, 10,  9, 
99,100,101,108,116, 97, 32, 61, 32, 99,109, 97,120, 45, 99,109,
-105,110, 59, 13, 10, 13, 10,  9,118, 32, 61, 32, 99,109, 97,120, 59, 13, 10,  
9,105,102, 32, 40, 99,109, 97,120, 33, 61, 48, 46,
- 48, 41, 13, 10,  9,  9,115, 32, 61, 32, 99,100,101,108,116, 97, 47, 99,109, 
97,120, 59, 13, 10,  9,101,108,115,101, 32,123, 13,
- 10,  9,  9,115, 32, 61, 32, 48, 46, 48, 59, 13, 10,  9,  9,104, 32, 61, 32, 
48, 46, 48, 59, 13, 10,  9,125, 13, 10, 13, 10,  9,

@@ 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