_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 performance, 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(this._isScenePass) {
                // if this is a scene pass, check if theres one more coming next and eventually bind it
                if(this.renderer.state.scenePassIndex + 1 < this.renderer.scene.stacks.scenePasses.length) {
                    this.renderer.bindFrameBuffer(this.renderer.scene.stacks.scenePasses[this.renderer.state.scenePassIndex + 1].target);

                    this.renderer.state.scenePassIndex++;
                }
                else {
                    this.renderer.bindFrameBuffer(null);
                }
            }
            else if(this.renderer.state.scenePassIndex === null) {
                // we are rendering a bunch of planes inside a render target, unbind it
                this.renderer.bindFrameBuffer(null);
            }

            // force attribute buffer bindings update
            this.renderer.state.forceBufferUpdate = true;

            // now check if we really need to draw it and its textures
            this._draw();
        }
    }
Specific instructions for the Shader pass class to execute before drawing it
*