danini-the-panini/mittsu-opengl

View on GitHub
lib/mittsu/opengl/shader/chunks/skinning_pars_vertex.glsl

Summary

Maintainability
Test Coverage
#ifdef USE_SKINNING

    uniform mat4 bindMatrix;
    uniform mat4 bindMatrixInverse;

    #ifdef BONE_TEXTURE

        uniform sampler2D boneTexture;
        uniform int boneTextureWidth;
        uniform int boneTextureHeight;

        mat4 getBoneMatrix( const in float i ) {

            float j = i * 4.0;
            float x = mod( j, float( boneTextureWidth ) );
            float y = floor( j / float( boneTextureWidth ) );

            float dx = 1.0 / float( boneTextureWidth );
            float dy = 1.0 / float( boneTextureHeight );

            y = dy * ( y + 0.5 );

            vec4 v1 = texture( boneTexture, vec2( dx * ( x + 0.5 ), y ) );
            vec4 v2 = texture( boneTexture, vec2( dx * ( x + 1.5 ), y ) );
            vec4 v3 = texture( boneTexture, vec2( dx * ( x + 2.5 ), y ) );
            vec4 v4 = texture( boneTexture, vec2( dx * ( x + 3.5 ), y ) );

            mat4 bone = mat4( v1, v2, v3, v4 );

            return bone;

        }

    #else

        uniform mat4 boneGlobalMatrices[ MAX_BONES ];

        mat4 getBoneMatrix( const in float i ) {

            mat4 bone = boneGlobalMatrices[ int(i) ];
            return bone;

        }

    #endif

#endif