Revision: 44794
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44794
Author:   moguri
Date:     2012-03-10 19:57:56 +0000 (Sat, 10 Mar 2012)
Log Message:
-----------
gpu_material cleanup:
  * light_cookie -> light_texture
  * Light textures now change the lamp color for better integration with other 
features

Modified Paths:
--------------
    branches/ge_harmony/source/blender/gpu/GPU_material.h
    branches/ge_harmony/source/blender/gpu/intern/gpu_material.c
    branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_material.glsl
    branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_material.glsl.c

Modified: branches/ge_harmony/source/blender/gpu/GPU_material.h
===================================================================
--- branches/ge_harmony/source/blender/gpu/GPU_material.h       2012-03-10 
19:55:28 UTC (rev 44793)
+++ branches/ge_harmony/source/blender/gpu/GPU_material.h       2012-03-10 
19:57:56 UTC (rev 44794)
@@ -227,6 +227,7 @@
 void GPU_lamp_free(struct Object *ob);
 
 int GPU_lamp_has_shadow_buffer(GPULamp *lamp);
+void GPU_lamp_update_buffer_mats(GPULamp *lamp);
 void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int 
*winsize, float winmat[][4]);
 void GPU_lamp_shadow_buffer_unbind(GPULamp *lamp);
 

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_material.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_material.c        
2012-03-10 19:55:28 UTC (rev 44793)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_material.c        
2012-03-10 19:57:56 UTC (rev 44794)
@@ -140,7 +140,7 @@
        ListBase materials;
 };
 
-/* Forward declaration so shade_light_cookies() can use this, while still 
keeping the code somewhat organized */
+/* Forward declaration so shade_light_textures() can use this, while still 
keeping the code somewhat organized */
 static void texture_rgb_blend(GPUMaterial *mat, GPUNodeLink *tex, GPUNodeLink 
*out, GPUNodeLink *fact, GPUNodeLink *facg, int blendtype, GPUNodeLink **in);
 
 /* Functions */
@@ -330,7 +330,11 @@
                        if(material->dynproperty & DYN_LAMP_IMAT)
                                mult_m4_m4m4(lamp->dynimat, lamp->imat, 
viewinv);
                        if(material->dynproperty & DYN_LAMP_PERSMAT)
+                       {
+                               if (!GPU_lamp_has_shadow_buffer(lamp)) /* The 
lamp matrices are already updated if we're using shadow buffers */
+                                       GPU_lamp_update_buffer_mats(lamp);
                                mult_m4_m4m4(lamp->dynpersmat, lamp->persmat, 
viewinv);
+                       }
                }
 
                GPU_pass_update_uniforms(material->pass);
@@ -622,23 +626,25 @@
        BLI_addtail(list, link);
 }
 
-static void shade_light_cookies(GPUMaterial *mat, GPULamp *lamp, GPUNodeLink 
**rgb)
+static void shade_light_textures(GPUMaterial *mat, GPULamp *lamp, GPUNodeLink 
**rgb)
 {
+       GPUNodeLink *tex_rgb;
+       MTex *mtex = NULL;
        int i;
        float one = 1.f;
-       GPUNodeLink *cookie_rgb;
-       MTex *mtex = NULL;
 
        for (i=0; i<MAX_MTEX; ++i) {
                mtex = lamp->la->mtex[i];
 
                if (mtex && mtex->tex->type & TEX_IMAGE && mtex->tex->ima) {
-                       GPU_link(mat, "shade_light_cookie",
+                       mat->dynproperty |= DYN_LAMP_PERSMAT;
+
+                       GPU_link(mat, "shade_light_texture",
                                GPU_builtin(GPU_VIEW_POSITION),
                                GPU_image(mtex->tex->ima, &mtex->tex->iuser),
                                GPU_dynamic_uniform((float*)lamp->dynpersmat, 
GPU_DYNAMIC_LAMP_DYNPERSMAT, lamp->ob),
-                               &cookie_rgb);
-                       texture_rgb_blend(mat, cookie_rgb, *rgb, 
GPU_uniform(&one), GPU_uniform(&mtex->colfac), mtex->blendtype, rgb); 
+                               &tex_rgb);
+                       texture_rgb_blend(mat, tex_rgb, *rgb, 
GPU_uniform(&one), GPU_uniform(&mtex->colfac), mtex->blendtype, rgb); 
                }
        }
 }
@@ -648,7 +654,7 @@
        Material *ma= shi->mat;
        GPUMaterial *mat= shi->gpumat;
        GPUNodeLink *lv, *dist, *visifac, *is, *inp, *i, *vn, *view;
-       GPUNodeLink *outcol, *specfac, *t, *shadfac= NULL;
+       GPUNodeLink *outcol, *specfac, *t, *shadfac= NULL, *lcol;
        float one = 1.0f;
 
        if((lamp->mode & LA_ONLYSHADOW) && !(ma->mode & MA_SHADOW))
@@ -699,6 +705,9 @@
        
        i = is;
        GPU_link(mat, "shade_visifac", i, visifac, shi->refl, &i);
+       
+       GPU_link(mat, "shade_mul_value", i, GPU_dynamic_uniform(lamp->dyncol, 
GPU_DYNAMIC_LAMP_DYNCOL, lamp->ob), &lcol);
+       shade_light_textures(mat, lamp, &lcol);
 
 
        /*if(ma->mode & MA_TANGENT_VN)
@@ -732,7 +741,6 @@
                                if(!(lamp->mode & LA_NO_DIFF)) {
                                        GPU_link(mat, "mix_mult", shadfac, 
shr->diff,
                                                
GPU_uniform(lamp->shadow_color), &shr->diff);
-                                       shade_light_cookies(mat, lamp, 
&shr->diff);
                                }
 
                                if(!(lamp->mode & LA_NO_SPEC))
@@ -756,11 +764,10 @@
        if(GPU_link_changed(shi->refl) || ma->ref != 0.0f) {
                if(!(lamp->mode & LA_NO_DIFF)) {
                        GPUNodeLink *rgb;
-                       GPU_link(mat, "shade_mul_value", i, 
GPU_dynamic_uniform(lamp->dyncol, GPU_DYNAMIC_LAMP_DYNCOL, lamp->ob), &rgb);
+                       GPU_link(mat, "shade_mul_value", i, lcol, &rgb);
                        GPU_link(mat, "mtex_value_invert", shadfac, &shadfac);
                        GPU_link(mat, "mix_mult",  shadfac, rgb, 
GPU_uniform(lamp->shadow_color), &rgb);
                        GPU_link(mat, "mtex_value_invert", shadfac, &shadfac);
-                       shade_light_cookies(mat, lamp, &rgb);
             add_to_diffuse(mat, ma, shi, is, rgb, &shr->diff);
                }
        }
@@ -770,7 +777,7 @@
           (GPU_link_changed(shi->spec) || ma->spec != 0.0f)) {
                if(lamp->type == LA_HEMI) {
                        GPU_link(mat, "shade_hemi_spec", vn, lv, view, 
GPU_uniform(&ma->spec), shi->har, visifac, &t);
-                       GPU_link(mat, "shade_add_spec", t, 
GPU_dynamic_uniform(lamp->dyncol, GPU_DYNAMIC_LAMP_DYNCOL, lamp->ob), 
shi->specrgb, &outcol);
+                       GPU_link(mat, "shade_add_spec", t, lcol, shi->specrgb, 
&outcol);
                        GPU_link(mat, "shade_add_clamped", shr->spec, outcol, 
&shr->spec);
                }
                else {
@@ -793,11 +800,11 @@
                        if(ma->mode & MA_RAMP_SPEC) {
                                GPUNodeLink *spec;
                                do_specular_ramp(shi, specfac, t, &spec);
-                               GPU_link(mat, "shade_add_spec", t, 
GPU_dynamic_uniform(lamp->dyncol, GPU_DYNAMIC_LAMP_DYNCOL, lamp->ob), spec, 
&outcol);
+                               GPU_link(mat, "shade_add_spec", t, lcol, spec, 
&outcol);
                                GPU_link(mat, "shade_add_clamped", shr->spec, 
outcol, &shr->spec);
                        }
                        else {
-                               GPU_link(mat, "shade_add_spec", t, 
GPU_dynamic_uniform(lamp->dyncol, GPU_DYNAMIC_LAMP_DYNCOL, lamp->ob), 
shi->specrgb, &outcol);
+                               GPU_link(mat, "shade_add_spec", t, lcol, 
shi->specrgb, &outcol);
                                GPU_link(mat, "shade_add_clamped", shr->spec, 
outcol, &shr->spec);
                        }
                }
@@ -1683,7 +1690,7 @@
                        }
 
                        /* Shadow color map */
-                       lamp->tex = GPU_texture_create_shadow_map(lamp->size, 
NULL);
+                       lamp->tex = 
GPU_texture_create_vsm_shadow_map(lamp->size, NULL);
                        if(!lamp->tex) {
                                gpu_lamp_shadow_free(lamp);
                                return lamp;
@@ -1701,7 +1708,7 @@
                                return lamp;
                        }
 
-                       lamp->blurtex = 
GPU_texture_create_shadow_map(lamp->size*0.5, NULL);
+                       lamp->blurtex = 
GPU_texture_create_vsm_shadow_map(lamp->size*0.5, NULL);
                        if(!lamp->blurtex) {
                                gpu_lamp_shadow_free(lamp);
                                return lamp;
@@ -1774,7 +1781,7 @@
                        lamp->tex && lamp->fb);
 }
 
-void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int 
*winsize, float winmat[][4])
+void GPU_lamp_update_buffer_mats(GPULamp *lamp)
 {
        float rangemat[4][4], persmat[4][4];
 
@@ -1797,7 +1804,12 @@
        rangemat[3][2] = 0.5f;
 
        mult_m4_m4m4(lamp->persmat, rangemat, persmat);
+}
 
+void GPU_lamp_shadow_buffer_bind(GPULamp *lamp, float viewmat[][4], int 
*winsize, float winmat[][4])
+{
+       GPU_lamp_update_buffer_mats(lamp);
+
        /* opengl */
        glDisable(GL_SCISSOR_TEST);
        GPU_framebuffer_texture_bind(lamp->fb, lamp->tex,

Modified: 
branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_material.glsl
===================================================================
--- branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_material.glsl     
2012-03-10 19:55:28 UTC (rev 44793)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_material.glsl     
2012-03-10 19:57:56 UTC (rev 44794)
@@ -1918,7 +1918,7 @@
        }
 }
 
-void shade_light_cookie(vec3 rco, sampler2D cookie, mat4 shadowpersmat, out 
vec4 result)
+void shade_light_texture(vec3 rco, sampler2D cookie, mat4 shadowpersmat, out 
vec4 result)
 {
 
        vec4 co = shadowpersmat*vec4(rco, 1.0);

Modified: 
branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_material.glsl.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_material.glsl.c   
2012-03-10 19:55:28 UTC (rev 44793)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_material.glsl.c   
2012-03-10 19:57:56 UTC (rev 44794)
@@ -1,1445 +1,1445 @@
 /* DataToC output of file <gpu_shader_material_glsl> */
 
-int datatoc_gpu_shader_material_glsl_size= 52963;
+int datatoc_gpu_shader_material_glsl_size= 52964;
 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,105,102, 32, 40,115, 32, 61, 61, 32, 
48, 46, 48, 41, 32,123, 13, 10,  9,  9,104, 32, 61,
- 32, 48, 46, 48, 59, 13, 10,  9,125, 13, 10,  9,101,108,115,101, 32,123, 13, 
10,  9,  9, 99, 32, 61, 32, 40,118,101, 99, 51, 40,
- 99,109, 97,120, 44, 32, 99,109, 97,120, 44, 32, 99,109, 97,120, 41, 32, 45, 
32,114,103, 98, 46,120,121,122, 41, 47, 99,100,101,
-108,116, 97, 59, 13, 10, 13, 10,  9,  9,105,102, 32, 40,114,103, 98, 46,120, 
61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 99,
- 91, 50, 93, 32, 45, 32, 99, 91, 49, 93, 59, 13, 10,  9,  9,101,108,115,101, 
32,105,102, 32, 40,114,103, 98, 46,121, 61, 61, 99,
-109, 97,120, 41, 32,104, 32, 61, 32, 50, 46, 48, 32, 43, 32, 99, 91, 48, 93, 
32, 45, 32, 32, 99, 91, 50, 93, 59, 13, 10,  9,  9,
-101,108,115,101, 32,104, 32, 61, 32, 52, 46, 48, 32, 43, 32, 99, 91, 49, 93, 
32, 45, 32, 99, 91, 48, 93, 59, 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