activate method
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);
}
}