_upload() {
        // set parameters that need to be set before texture uploading
        this._updateGlobalTexParameters();

        if(this.source) {
            this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this._globalParameters.internalFormat, this._globalParameters.format, this._globalParameters.type, this.source);
        }
        else if(this.sourceType === "fbo") {
            this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this._globalParameters.internalFormat, this._size.width, this._size.height, 0, this._globalParameters.format, this._globalParameters.type, this.source || null);
        }

        // texture has been uploaded
        if(!this._uploaded) {
            // GPU uploading callback
            this.renderer.nextRender.add(() => this._onSourceUploadedCallback && this._onSourceUploadedCallback());

            this._uploaded = true;
        }
    }
This updloads our texture to the GPU
     Called on init or inside our drawing loop if shouldUpdate property is set to true
     Typically used by videos or canvas
*