diff --git a/packages/core/src/batch/BatchRenderer.js b/packages/core/src/batch/BatchRenderer.js index b9a5e4f..bdacbb3 100644 --- a/packages/core/src/batch/BatchRenderer.js +++ b/packages/core/src/batch/BatchRenderer.js @@ -449,6 +449,8 @@ */ start() { + this.renderer.state.setState(this.state); + this.renderer.shader.bind(this.shader); if (settings.CAN_UPLOAD_SAME_BUFFER) diff --git a/packages/core/src/batch/BatchRenderer.js b/packages/core/src/batch/BatchRenderer.js index b9a5e4f..bdacbb3 100644 --- a/packages/core/src/batch/BatchRenderer.js +++ b/packages/core/src/batch/BatchRenderer.js @@ -449,6 +449,8 @@ */ start() { + this.renderer.state.setState(this.state); + this.renderer.shader.bind(this.shader); if (settings.CAN_UPLOAD_SAME_BUFFER) diff --git a/packages/core/src/batch/BatchSystem.js b/packages/core/src/batch/BatchSystem.js index bae087d..c3d7015 100644 --- a/packages/core/src/batch/BatchSystem.js +++ b/packages/core/src/batch/BatchSystem.js @@ -45,8 +45,6 @@ this.currentRenderer.stop(); this.currentRenderer = objectRenderer; - this.renderer.state.setState(objectRenderer.state); - this.currentRenderer.start(); } diff --git a/packages/core/src/batch/BatchRenderer.js b/packages/core/src/batch/BatchRenderer.js index b9a5e4f..bdacbb3 100644 --- a/packages/core/src/batch/BatchRenderer.js +++ b/packages/core/src/batch/BatchRenderer.js @@ -449,6 +449,8 @@ */ start() { + this.renderer.state.setState(this.state); + this.renderer.shader.bind(this.shader); if (settings.CAN_UPLOAD_SAME_BUFFER) diff --git a/packages/core/src/batch/BatchSystem.js b/packages/core/src/batch/BatchSystem.js index bae087d..c3d7015 100644 --- a/packages/core/src/batch/BatchSystem.js +++ b/packages/core/src/batch/BatchSystem.js @@ -45,8 +45,6 @@ this.currentRenderer.stop(); this.currentRenderer = objectRenderer; - this.renderer.state.setState(objectRenderer.state); - this.currentRenderer.start(); } diff --git a/packages/core/src/geometry/GeometrySystem.js b/packages/core/src/geometry/GeometrySystem.js index d8e3bfa..94570d2 100644 --- a/packages/core/src/geometry/GeometrySystem.js +++ b/packages/core/src/geometry/GeometrySystem.js @@ -37,13 +37,6 @@ this.hasInstance = true; /** - * A cache thats stores vaos linked to geometries. - * @member {Object} - * @private - */ - this.cache = {}; - - /** * A cache of currently bound buffer.. */ this.boundBuffers = {}; @@ -287,11 +280,14 @@ const signature = this.getSignature(geometry, program); - if (this.cache[signature]) - { - const vao = this.cache[signature]; + const vaoObjectHash = geometry.glVertexArrayObjects[this.CONTEXT_UID]; - geometry.glVertexArrayObjects[this.CONTEXT_UID][program.id] = vao; + let vao = vaoObjectHash[signature]; + + if (vao) + { + // this will give us easy access to the vao + vaoObjectHash[program.id] = vao; return vao; } @@ -342,6 +338,10 @@ } } + vao = gl.createVertexArray(); + + gl.bindVertexArray(vao); + // first update - and create the buffers! // only create a gl buffer if it actually gets for (let i = 0; i < buffers.length; i++) @@ -356,16 +356,14 @@ // TODO - maybe make this a data object? // lets wait to see if we need to first! - const vao = gl.createVertexArray(); - - gl.bindVertexArray(vao); this.activateVao(geometry, program); - gl.bindVertexArray(null); + gl.bindVertexArray(this._activeVao); // add it to the cache! - geometry.glVertexArrayObjects[this.CONTEXT_UID][program.id] = vao; + vaoObjectHash[program.id] = vao; + vaoObjectHash[signature] = vao; return vao; }