code: function (shaderType, symbol, val) {
          var vertexDefines = this.vertexDefines;
          var fragmentDefines = this.fragmentDefines;
          if (shaderType !== 'vertex' && shaderType !== 'fragment' && shaderType !== 'both'
              && arguments.length < 3
          ) {
              // shaderType default to be 'both'
              val = symbol;
              symbol = shaderType;
              shaderType = 'both';
          }
          val = val != null ? val : null;
          if (shaderType === 'vertex' || shaderType === 'both') {
              if (vertexDefines[symbol] !== val) {
                  vertexDefines[symbol] = val;
                  // Mark as dirty
                  this._programKey = '';
              }
          }
          if (shaderType === 'fragment' || shaderType === 'both') {
              if (fragmentDefines[symbol] !== val) {
                  fragmentDefines[symbol] = val;
                  if (shaderType !== 'both') {
                      this._programKey = '';
                  }
              }
          }
      }
docs: Add a #define macro in shader code
  @param  {string} shaderType Can be vertex, fragment or both
  @param  {string} symbol
  @param  {number} [val]