text: //Matthew Shotton, R&D User Experience,© BBC 2015
  import ProcessingNode from "./processingnode";
  import { createElementTexture } from "../utils.js";
  
  const TYPE = "EffectNode";
  
  class EffectNode extends ProcessingNode {
      /**
       * Initialise an instance of an EffectNode. You should not instantiate this directly, but use VideoContest.createEffectNode().
       */
      constructor(gl, renderGraph, definition) {
          let placeholderTexture = createElementTexture(gl);
          gl.texImage2D(
              gl.TEXTURE_2D,
              0,
              gl.RGBA,
              1,
              1,
              0,
              gl.RGBA,
              gl.UNSIGNED_BYTE,
              new Uint8Array([0, 0, 0, 0])
          );
  
          super(gl, renderGraph, definition, definition.inputs, true);
  
          this._placeholderTexture = placeholderTexture;
          this._displayName = TYPE;
      }
  
      _render() {
          let gl = this._gl;
          gl.bindFramebuffer(gl.FRAMEBUFFER, this._framebuffer);
          gl.framebufferTexture2D(
              gl.FRAMEBUFFER,
              gl.COLOR_ATTACHMENT0,
              gl.TEXTURE_2D,
              this._texture,
              0
          );
          gl.clearColor(0, 0, 0, 0); // green;
          gl.clear(gl.COLOR_BUFFER_BIT);
  
          // Set the initial blend function to 'proiritize' the SRC so that the background
          // clearColor doesn't bleed / blend into output
          gl.enable(gl.BLEND);
          gl.blendFunc(gl.ONE, gl.ZERO);
  
          super._render();
  
          let inputs = this._renderGraph.getInputsForNode(this);
  
          for (var i = 0; i < this._shaderInputsTextureUnitMapping.length; i++) {
              let inputTexture = this._placeholderTexture;
              let textureUnit = this._shaderInputsTextureUnitMapping[i].textureUnit;
              if (i < inputs.length && inputs[i] !== undefined) {
                  inputTexture = inputs[i]._texture;
              }
  
              gl.activeTexture(textureUnit);
              gl.uniform1i(
                  this._shaderInputsTextureUnitMapping[i].location,
                  this._shaderInputsTextureUnitMapping[i].textureUnitIndex
              );
              gl.bindTexture(gl.TEXTURE_2D, inputTexture);
          }
          gl.drawArrays(gl.TRIANGLES, 0, 6);
          gl.bindFramebuffer(gl.FRAMEBUFFER, null);
      }
  }
  
  export { TYPE as EFFECTYPE };
  
  export default EffectNode;
  