_startDrawing() {
        // check if our plane is ready to draw
        if(this._canDraw) {
            // even if our plane should not be drawn we still execute its onRender callback and update its uniforms
            if(this._onRenderCallback) {
                this._onRenderCallback();
            }

            // to improve webgl pipeline performace, we might want to update each texture that needs an update here
            // see https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#texImagetexSubImage_uploads_particularly_with_videos_can_cause_pipeline_flushes


            // if we should render to a render target
            if(this.target) {
                this.renderer.bindFrameBuffer(this.target);
            }
            else if(this.renderer.state.scenePassIndex === null) {
                this.renderer.bindFrameBuffer(null);
            }

            // update our perspective matrix
            this._setPerspectiveMatrix();

            // update our mv matrix
            this._setMVMatrix();

            // now check if we really need to draw it and its textures
            if((this.alwaysDraw || this._shouldDraw) && this.visible) {
                this._draw();
            }
        }
    }
Specific instructions for the Plane class to execute before drawing it
*