activate method

void activate(
  1. RenderContextWebGL renderContext,
  2. int textureSlot
)

Implementation

void activate(RenderContextWebGL renderContext, int textureSlot) {
  if (contextIdentifier != renderContext.contextIdentifier) {
    _renderContext = renderContext;
    _contextIdentifier = renderContext.contextIdentifier;
    final renderingContext = _renderingContext = renderContext.rawContext;
    _texture = renderingContext.createTexture();

    const target = gl.WebGL.TEXTURE_2D;

    renderingContext.activeTexture(textureSlot);
    renderingContext.bindTexture(target, _texture);

    final scissors = renderingContext.isEnabled(gl.WebGL.SCISSOR_TEST);
    if (scissors) renderingContext.disable(gl.WebGL.SCISSOR_TEST);

    if (_source != null) {
      renderingContext.texImage2D(
          target, 0, pixelFormat, pixelFormat, pixelType, _source);
      _textureSourceWorkaround =
          renderingContext.getError() == gl.WebGL.INVALID_VALUE;
    } else {
      renderingContext.texImage2D(
          target, 0, pixelFormat, width, height, 0, pixelFormat, pixelType);
    }

    if (_textureSourceWorkaround) {
      // WEBGL11072: INVALID_VALUE: texImage2D: This texture source is not supported
      _canvas = CanvasElement(width: width, height: height);
      _canvas!.context2D.drawImage(source!, 0, 0);
      renderingContext.texImage2D(
          target, 0, pixelFormat, pixelFormat, pixelType, _canvas);
    }

    if (scissors) renderingContext.enable(gl.WebGL.SCISSOR_TEST);

    renderingContext.texParameteri(
        gl.WebGL.TEXTURE_2D, gl.WebGL.TEXTURE_WRAP_S, _wrappingX.value);
    renderingContext.texParameteri(
        gl.WebGL.TEXTURE_2D, gl.WebGL.TEXTURE_WRAP_T, _wrappingY.value);
    renderingContext.texParameteri(
        gl.WebGL.TEXTURE_2D, gl.WebGL.TEXTURE_MIN_FILTER, _filtering.value);
    renderingContext.texParameteri(
        gl.WebGL.TEXTURE_2D, gl.WebGL.TEXTURE_MAG_FILTER, _filtering.value);
  } else {
    _renderingContext!.activeTexture(textureSlot);
    _renderingContext!.bindTexture(gl.WebGL.TEXTURE_2D, _texture);
  }
}