             skinning += (a_boneWeight7.y) * u_bones[int(a_boneWeight7.x)];
         #endif
     #else
-        mat4 skinning = mat4(1.0);
+        HIGHP mat4 skinning = mat4(1.0);
     #endif
 
     position = u_modelMatrix * skinning * a_position;

#ifdef GL_ES
#define LOWP lowp
#define MED mediump
#define HIGH highp
precision mediump float;
#else
#define MED
#define LOWP
#define HIGH
#endif

in vec4 a_position;
in vec3 a_normal;
in vec3 a_binormal;
in vec3 a_tangent;
in vec2 a_texCoord0;

#ifdef boneWeight0Flag
    #define boneWeightsFlag
    in vec2 a_boneWeight0;
#endif

#ifdef boneWeight1Flag
    in vec2 a_boneWeight1;
#endif

#ifdef boneWeight2Flag
    in vec2 a_boneWeight2;
#endif

#ifdef boneWeight3Flag
    in vec2 a_boneWeight3;
#endif

#ifdef boneWeight4Flag
    in vec2 a_boneWeight4;
#endif

#ifdef boneWeight5Flag
    in vec2 a_boneWeight5;
#endif

#ifdef boneWeight6Flag
    in vec2 a_boneWeight6;
#endif

#ifdef boneWeight7Flag
    in vec2 a_boneWeight7;
#endif

#if defined(numBones) && defined(boneWeightsFlag)


#ifdef numBones
    #if numBones > 0
        uniform HIGHP mat4 u_bones[numBones];
    #endif
#endif

uniform HIGHP mat4 u_mvpMatrix;
uniform HIGHP mat4 u_viewMatrix;
uniform HIGHP mat4 u_modelMatrix;

out HIGHP vec3 v_position;
out HIGHP vec3 v_binormal;
out HIGHP vec3 v_tangent;
out LOWP vec2 v_texCoord;
out LOWP vec3 v_normal;

void main() {
    LOWP vec4 position;
    LOWP vec3 normal;

    #ifdef numBones
        HIGHP mat4 skinning = mat4(0.0);

        #ifdef boneWeight0Flag
            skinning += (a_boneWeight0.y) * u_bones[int(a_boneWeight0.x)];
