Revision: 43824
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43824
Author: psy-fi
Date: 2012-02-01 17:47:13 +0000 (Wed, 01 Feb 2012)
Log Message:
-----------
Fix: Bicubic bump mapping does not work for UVs outside the 0,1 range.
This issue is caused by texelFetch which does not take wrapping options into
account as it uses unnormalized uv coordinates to access a texel. A hack was
made to do manual wrapping in the shader. This is acceptable because texture
wrap mode is always treated as "repeat" elsewhere in 3D view in blender.
Thanks to Morten Mikkelsen for pointing out the cause of the issue and
providing the fix.
Modified Paths:
--------------
trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl
trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl.c
Modified: trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl
2012-02-01 16:56:48 UTC (rev 43823)
+++ trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl
2012-02-01 17:47:13 UTC (rev 43824)
@@ -1256,7 +1256,11 @@
ivec2 vDim;
vDim = textureSize(ima, 0);
- vec2 fTexLoc = vDim*texco.xy-vec2(0.5,0.5);
+ // taking the fract part of the texture coordinate is a
hardcoded wrap mode.
+ // this is acceptable as textures use wrap mode exclusively in
3D view elsewhere in blender.
+ // this is done so that we can still get a valid texel with uvs
outside the 0,1 range
+ // by texelFetch below, as coordinates are clamped when using
this function.
+ vec2 fTexLoc = vDim*fract(texco.xy) - vec2(0.5, 0.5);
ivec2 iTexLoc = ivec2(floor(fTexLoc));
vec2 t = clamp(fTexLoc - iTexLoc, 0.0, 1.0); // sat
just to be pedantic
@@ -1279,7 +1283,14 @@
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
- rgbtobw(texelFetch(ima, (iTexLocMod +
ivec2(i,j)), 0), H[i][j]);
+ ivec2 iTexTmp = iTexLocMod + ivec2(i,j);
+
+ // wrap texture coordinates manually for
texelFetch to work on uvs oitside the 0,1 range.
+ // this is guaranteed to work since we take the
fractional part of the uv above.
+ iTexTmp.x = (iTexTmp.x < 0)? iTexTmp.x + vDim.x
: ((iTexTmp.x >= vDim.x)? iTexTmp.x - vDim.x : iTexTmp.x);
+ iTexTmp.y = (iTexTmp.y < 0)? iTexTmp.y + vDim.y
: ((iTexTmp.y >= vDim.y)? iTexTmp.y - vDim.y : iTexTmp.y);
+
+ rgbtobw(texelFetch(ima, iTexTmp, 0), H[i][j]);
}
}
Modified: trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl.c
2012-02-01 16:56:48 UTC (rev 43823)
+++ trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl.c
2012-02-01 17:47:13 UTC (rev 43824)
@@ -1,940 +1,965 @@
/* DataToC output of file <gpu_shader_material_glsl> */
-int datatoc_gpu_shader_material_glsl_size= 52023;
+int datatoc_gpu_shader_material_glsl_size= 52820;
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,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,114,103, 98, 44,
32,104,115,118, 46,119, 41, 59, 13, 10,125, 13, 10, 13,
- 10,102,108,111, 97,116, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101,
97,114,114,103, 98, 40,102,108,111, 97,116, 32, 99,
- 41, 13, 10,123, 13, 10, 9,105,102, 40, 99, 32, 60, 32, 48, 46, 48, 52, 48,
52, 53, 41, 13, 10, 9, 9,114,101,116,117,114,110,
- 32, 40, 99, 32, 60, 32, 48, 46, 48, 41, 63, 32, 48, 46, 48, 58, 32, 99, 32,
42, 32, 40, 49, 46, 48, 47, 49, 50, 46, 57, 50, 41,
- 59, 13, 10, 9,101,108,115,101, 13, 10, 9, 9,114,101,116,117,114,110,
32,112,111,119, 40, 40, 99, 32, 43, 32, 48, 46, 48, 53,
- 53, 41, 42, 40, 49, 46, 48, 47, 49, 46, 48, 53, 53, 41, 44, 32, 50, 46, 52,
41, 59, 13, 10,125, 13, 10, 13, 10,102,108,111, 97,
-116, 32,108,105,110,101, 97,114,114,103, 98, 95,116,111, 95,115,114,103, 98,
40,102,108,111, 97,116, 32, 99, 41, 13, 10,123, 13,
- 10, 9,105,102, 40, 99, 32, 60, 32, 48, 46, 48, 48, 51, 49, 51, 48, 56, 41,
13, 10, 9, 9,114,101,116,117,114,110, 32, 40, 99,
- 32, 60, 32, 48, 46, 48, 41, 63, 32, 48, 46, 48, 58, 32, 99, 32, 42, 32, 49,
50, 46, 57, 50, 59, 13, 10, 9,101,108,115,101, 13,
- 10, 9, 9,114,101,116,117,114,110, 32, 49, 46, 48, 53, 53, 32, 42,
32,112,111,119, 40, 99, 44, 32, 49, 46, 48, 47, 50, 46, 52,
- 41, 32, 45, 32, 48, 46, 48, 53, 53, 59, 13, 10,125, 13, 10, 13,
10,118,111,105,100, 32,115,114,103, 98, 95,116,111, 95,108,105,
-110,101, 97,114,114,103, 98, 40,118,101, 99, 52, 32, 99,111,108,
95,102,114,111,109, 44, 32,111,117,116, 32,118,101, 99, 52, 32,
- 99,111,108, 95,116,111, 41, 13, 10,123, 13, 10, 9, 99,111,108, 95,116,111,
46,114, 32, 61, 32,115,114,103, 98, 95,116,111, 95,
-108,105,110,101, 97,114,114,103, 98, 40, 99,111,108, 95,102,114,111,109,
46,114, 41, 59, 13, 10, 9, 99,111,108, 95,116,111, 46,
-103, 32, 61, 32,115,114,103, 98, 95,116,111, 95,108,105,110,101,
97,114,114,103, 98, 40, 99,111,108, 95,102,114,111,109, 46,103,
- 41, 59, 13, 10, 9, 99,111,108, 95,116,111, 46, 98, 32, 61, 32,115,114,103,
98, 95,116,111, 95,108,105,110,101, 97,114,114,103,
+ 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,
@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs