Source: primitives/augmentShader.js


/**
 * Provide additional shaders to render time dependent color.
 */

const augmentMorphColor = function(shader) {
  shader.vertexShader = shader.vertexShader.replace(
      '#include <morphcolor_vertex>',
      `
      #if defined( USE_MORPHCOLORS )

      // morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:
      // When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in normal = sum((target - base) * influence)
      // When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting
      vColor *= morphTargetBaseInfluence;

      for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {

        #if defined( USE_COLOR_ALPHA )

          if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];

        #elif defined( USE_COLOR )

          if ( morphTargetInfluences[ i ] != 0.0 ) {
            vColor.rgb += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];
            vColor.a = 1.0;
          }

        #endif

      }

      #endif
      `
  );
}

const printShader = function (shader) {
  console.log(shader.vertexShader);
  console.log(shader.fragmentShader);
}


export { augmentMorphColor, printShader };