Revision: 42286
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42286
Author: moguri
Date: 2011-11-30 06:24:39 +0000 (Wed, 30 Nov 2011)
Log Message:
-----------
Lamp textures now use their actual color values instead of intensity. Also, the
various blend modes are now supported (use Multiply to get similar behavior to
the previous cookie code).
Modified Paths:
--------------
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
Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_material.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_material.c
2011-11-30 06:15:35 UTC (rev 42285)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_material.c
2011-11-30 06:24:39 UTC (rev 42286)
@@ -137,6 +137,9 @@
ListBase materials;
};
+/* Forward declaration so shade_light_cookies() 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 */
static GPUMaterial *GPU_material_construct_begin(Material *ma)
@@ -613,6 +616,28 @@
BLI_addtail(list, link);
}
+static void shade_light_cookies(GPUMaterial *mat, GPULamp *lamp, GPUNodeLink
**rgb)
+{
+ 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) {
+ GPUTexture* cookie =
GPU_texture_from_blender(mtex->tex->ima, &mtex->tex->iuser, 1.0, 0);
+ GPU_link(mat, "shade_light_cookie",
+ GPU_builtin(GPU_VIEW_POSITION),
+ GPU_dynamic_texture(cookie,
GPU_DYNAMIC_SAMPLER_2DIMAGE, lamp->ob),
+ 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);
+ }
+ }
+}
+
static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp
*lamp)
{
Material *ma= shi->mat;
@@ -620,7 +645,6 @@
GPUNodeLink *lv, *dist, *visifac, *is, *inp, *i, *vn, *view;
GPUNodeLink *outcol, *specfac, *t, *shadcol, *shadfac= NULL;
float one = 1.0f;
- int j;
if((lamp->mode & LA_ONLYSHADOW) && !(ma->mode & MA_SHADOW))
return;
@@ -687,27 +711,16 @@
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);
-
- for (j=0; j<MAX_MTEX; ++j) {
- if (lamp->la->mtex[j]
- && lamp->la->mtex[j]->tex->type &
TEX_IMAGE
- && lamp->la->mtex[j]->tex->ima) {
- GPUTexture* cookie =
GPU_texture_from_blender(lamp->la->mtex[j]->tex->ima,
&lamp->la->mtex[j]->tex->iuser, 1.0, 0);
- GPU_link(mat, "test_shadowbuf_cookie",
- GPU_builtin(GPU_VIEW_POSITION),
- GPU_dynamic_texture(cookie,
GPU_DYNAMIC_SAMPLER_2DSHADOW, lamp->ob),
-
GPU_dynamic_uniform((float*)lamp->dynpersmat, GPU_DYNAMIC_LAMP_DYNPERSMAT,
lamp->ob),
- shadfac, &shadfac);
- }
- }
if(lamp->mode & LA_ONLYSHADOW) {
GPU_link(mat, "shade_only_shadow", i, shadfac,
GPU_dynamic_uniform(&lamp->dynenergy,
GPU_DYNAMIC_LAMP_DYNENERGY, lamp->ob), &shadfac);
- if(!(lamp->mode & LA_NO_DIFF))
+ 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))
GPU_link(mat,
"shade_only_shadow_specular", shadfac, shi->specrgb,
@@ -733,6 +746,7 @@
GPU_link(mat, "shade_mul_value", i,
GPU_dynamic_uniform(lamp->dyncol, GPU_DYNAMIC_LAMP_DYNCOL, lamp->ob), &rgb);
GPU_link(mat, "mtex_value_invert", shadfac, &shadfac);
GPU_link(mat, "mix_mult", shadfac, rgb,
GPU_uniform(lamp->shadow_color), &rgb);
+ shade_light_cookies(mat, lamp, &rgb);
add_to_diffuse(mat, ma, shi, is, rgb, &shr->diff);
}
}
Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl
2011-11-30 06:15:35 UTC (rev 42285)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl
2011-11-30 06:24:39 UTC (rev 42286)
@@ -1789,16 +1789,12 @@
}
}
-void test_shadowbuf_cookie(vec3 rco, sampler2DShadow cookie, mat4
shadowpersmat, float inp, out float result)
+void shade_light_cookie(vec3 rco, sampler2D cookie, mat4 shadowpersmat, out
vec4 result)
{
- if(inp <= 0.0) {
- result = 0.0;
- }
- else {
- vec4 co = shadowpersmat*vec4(rco, 1.0);
- result = inp*shadow2DProj(cookie, co).x;
- }
+ vec4 co = shadowpersmat*vec4(rco, 1.0);
+
+ result = texture2DProj(cookie, co);
}
void shade_exposure_correct(vec3 col, float linfac, float logfac, out vec3
outcol)
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-11-30 06:15:35 UTC (rev 42285)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl.c
2011-11-30 06:24:39 UTC (rev 42286)
@@ -1,1303 +1,1301 @@
/* DataToC output of file <gpu_shader_material_glsl> */
-int datatoc_gpu_shader_material_glsl_size= 49273;
+int datatoc_gpu_shader_material_glsl_size= 49194;
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, 9,104, 32, 47, 61, 32, 54, 46, 48,
59, 13, 10, 13, 10, 9, 9,105,102, 32, 40,104, 60,
- 48, 46, 48, 41, 13, 10, 9, 9, 9,104, 32, 43, 61, 32, 49, 46, 48, 59, 13,
10, 9,125, 13, 10, 13, 10, 9,111,117,116, 99,111,
-108, 32, 61, 32,118,101, 99, 52, 40,104, 44, 32,115, 44, 32,118, 44,
32,114,103, 98, 46,119, 41, 59, 13, 10,125, 13, 10, 13, 10,
-118,111,105,100, 32,104,115,118, 95,116,111, 95,114,103, 98, 40,118,101, 99,
52, 32,104,115,118, 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,105, 44, 32,102, 44, 32,112, 44, 32,113,
- 44, 32,116, 44, 32,104, 44, 32,115, 44, 32,118, 59, 13, 10, 9,118,101, 99,
51, 32,114,103, 98, 59, 13, 10, 13, 10, 9,104, 32,
- 61, 32,104,115,118, 91, 48, 93, 59, 13, 10, 9,115, 32, 61, 32,104,115,118,
91, 49, 93, 59, 13, 10, 9,118, 32, 61, 32,104,115,
-118, 91, 50, 93, 59, 13, 10, 13, 10, 9,105,102, 40,115, 61, 61, 48, 46, 48,
41, 32,123, 13, 10, 9, 9,114,103, 98, 32, 61, 32,
-118,101, 99, 51, 40,118, 44, 32,118, 44, 32,118, 41, 59, 13, 10, 9,125, 13,
10, 9,101,108,115,101, 32,123, 13, 10, 9, 9,105,
-102, 40,104, 61, 61, 49, 46, 48, 41, 13, 10, 9, 9, 9,104, 32, 61, 32, 48,
46, 48, 59, 13, 10, 9, 9, 13, 10, 9, 9,104, 32,
- 42, 61, 32, 54, 46, 48, 59, 13, 10, 9, 9,105, 32, 61,
32,102,108,111,111,114, 40,104, 41, 59, 13, 10, 9, 9,102, 32, 61, 32,
-104, 32, 45, 32,105, 59, 13, 10, 9, 9,114,103, 98, 32, 61, 32,118,101, 99,
51, 40,102, 44, 32,102, 44, 32,102, 41, 59, 13, 10,
- 9, 9,112, 32, 61, 32,118, 42, 40, 49, 46, 48, 45,115, 41, 59, 13, 10, 9,
9,113, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,
-115, 42,102, 41, 41, 59, 13, 10, 9, 9,116, 32, 61, 32,118, 42, 40, 49, 46,
48, 45, 40,115, 42, 40, 49, 46, 48, 45,102, 41, 41,
- 41, 59, 13, 10, 9, 9, 13, 10, 9, 9,105,102, 32, 40,105, 32, 61, 61, 32,
48, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101,
- 99, 51, 40,118, 44, 32,116, 44, 32,112, 41, 59, 13, 10, 9,
9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 49, 46,
- 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,113, 44, 32,118, 44,
32,112, 41, 59, 13, 10, 9, 9,101,108,115,101, 32,
-105,102, 32, 40,105, 32, 61, 61, 32, 50, 46, 48, 41, 32,114,103, 98, 32, 61,
32,118,101, 99, 51, 40,112, 44, 32,118, 44, 32,116,
- 41, 59, 13, 10, 9, 9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61,
32, 51, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,
-101, 99, 51, 40,112, 44, 32,113, 44, 32,118, 41, 59, 13, 10, 9,
9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 52,
- 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,116, 44, 32,112,
44, 32,118, 41, 59, 13, 10, 9, 9,101,108,115,101,
- 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,112, 44, 32,113,
41, 59, 13, 10, 9,125, 13, 10, 13, 10, 9,111,117,
@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs