Home | History | Annotate | Download | only in ShaderLib
      1 #ifdef USE_HWSKINNING
      2 
      3 #ifndef NUM_BONES
      4 #error A required pre-processor define "NUM_BONES" is not set!
      5 #endif
      6 
      7 attribute vec4 inBoneWeight;
      8 attribute vec4 inBoneIndices;
      9 uniform mat4 m_BoneMatrices[NUM_BONES];
     10 
     11 void Skinning_Compute(inout vec4 position, inout vec4 normal){
     12     vec4 index  = inBoneIndices;
     13     vec4 weight = inBoneWeight;
     14 
     15     vec4 newPos    = vec4(0.0);
     16     vec4 newNormal = vec4(0.0);
     17 
     18     for (float i = 0.0; i < 4.0; i += 1.0){
     19         mat4 skinMat = m_BoneMatrices[int(index.x)];
     20         newPos    += weight.x * (skinMat * position);
     21         newNormal += weight.x * (skinMat * normal);
     22         index = index.yzwx;
     23         weight = weight.yzwx;
     24     }
     25 
     26     position = newPos;
     27     normal = newNormal;
     28 }
     29 
     30 #else
     31 
     32 void Skinning_Compute(inout vec4 position, inout vec4 normal){
     33    // skinning disabled, leave position and normal unaltered
     34 }
     35 
     36 #endif