summaryrefslogtreecommitdiff
path: root/indra/newview/app_settings/shaders/class1
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/app_settings/shaders/class1')
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl31
1 files changed, 14 insertions, 17 deletions
diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
index 3060307b21..90bf2851c9 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
@@ -24,8 +24,7 @@
ATTRIBUTE vec4 weight4;
-uniform mat3 matrixPalette[52];
-uniform vec3 translationPalette[52];
+uniform mat3x4 matrixPalette[MAX_JOINTS_PER_MESH_OBJECT];
mat4 getObjectSkinnedTransform()
{
@@ -34,8 +33,8 @@ mat4 getObjectSkinnedTransform()
vec4 w = fract(weight4);
vec4 index = floor(weight4);
- index = min(index, vec4(51.0));
- index = max(index, vec4( 0.0));
+ index = min(index, vec4(MAX_JOINTS_PER_MESH_OBJECT-1));
+ index = max(index, vec4( 0.0));
w *= 1.0/(w.x+w.y+w.z+w.w);
@@ -43,16 +42,16 @@ mat4 getObjectSkinnedTransform()
int i2 = int(index.y);
int i3 = int(index.z);
int i4 = int(index.w);
-
- mat3 mat = matrixPalette[i1]*w.x;
- mat += matrixPalette[i2]*w.y;
- mat += matrixPalette[i3]*w.z;
- mat += matrixPalette[i4]*w.w;
- vec3 trans = translationPalette[i1]*w.x;
- trans += translationPalette[i2]*w.y;
- trans += translationPalette[i3]*w.z;
- trans += translationPalette[i4]*w.w;
+ mat3 mat = mat3(matrixPalette[i1])*w.x;
+ mat += mat3(matrixPalette[i2])*w.y;
+ mat += mat3(matrixPalette[i3])*w.z;
+ mat += mat3(matrixPalette[i4])*w.w;
+
+ vec3 trans = vec3(matrixPalette[i1][0].w,matrixPalette[i1][1].w,matrixPalette[i1][2].w)*w.x;
+ trans += vec3(matrixPalette[i2][0].w,matrixPalette[i2][1].w,matrixPalette[i2][2].w)*w.y;
+ trans += vec3(matrixPalette[i3][0].w,matrixPalette[i3][1].w,matrixPalette[i3][2].w)*w.z;
+ trans += vec3(matrixPalette[i4][0].w,matrixPalette[i4][1].w,matrixPalette[i4][2].w)*w.w;
mat4 ret;
@@ -65,10 +64,8 @@ mat4 getObjectSkinnedTransform()
#ifdef IS_AMD_CARD
// If it's AMD make sure the GLSL compiler sees the arrays referenced once by static index. Otherwise it seems to optimise the storage awawy which leads to unfun crashes and artifacts.
- mat3 dummy1 = matrixPalette[0];
- vec3 dummy2 = translationPalette[0];
- mat3 dummy3 = matrixPalette[51];
- vec3 dummy4 = translationPalette[51];
+ mat3x4 dummy1 = matrixPalette[0];
+ mat3x4 dummy2 = matrixPalette[MAX_JOINTS_PER_MESH_OBJECT-1];
#endif
}