_restoreContext() {
        // avoid binding that texture before reseting it
        this._canDraw = false;

        // reinit sampler and texture matrix
        this._sampler.texture = this.gl.createTexture();
        this._sampler.isActive = false;
        this._sampler.isTextureBound = false;

        this._textureMatrix.isActive = false;

        this._initState();

        // force mip map regeneration if needed
        this._state.generateMipmap = false;
        this.parameters._shouldUpdate = true;

        // this is an original texture, reset it right away
        if(!this._copiedFrom) {
            this._initTexture();

            if(this._parent) {
                this._setParent();
            }

            if(this.source) {
                this.setSource(this.source);

                // cache again if it is an image
                // also since it's an image it has been uploaded in setSource()
                if(this.sourceType === "image") {
                    this.renderer.cache.addTexture(this);
                }
                else {
                    // force update
                    this.needUpdate();
                }
            }

            this._canDraw = true;
        }
        else {
            // wait for the original texure to be ready before attempting to restore the copy
            const queue = this.renderer.nextRender.add(() => {
                if(this._copiedFrom._canDraw) {
                    this._restoreFromTexture();
                    // remove from callback queue
                    queue.keep = false;
                }
            }, true);
        }
    }
Restore our WebGL texture
     If it is an original texture, just re run the init function and eventually reset its source
     If it is a texture set from another texture, wait for the original texture to be ready first
*