diff --git a/packages/core/src/geometry/GeometrySystem.js b/packages/core/src/geometry/GeometrySystem.js index 94570d2..5c5c75f 100644 --- a/packages/core/src/geometry/GeometrySystem.js +++ b/packages/core/src/geometry/GeometrySystem.js @@ -193,14 +193,14 @@ // TODO can cache this on buffer! maybe added a getter / setter? const type = buffer.index ? gl.ELEMENT_ARRAY_BUFFER : gl.ARRAY_BUFFER; - const drawType = buffer.static ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW; - if (this.boundBuffers[type] !== glBuffer) - { - this.boundBuffers[type] = glBuffer; - - gl.bindBuffer(type, glBuffer.buffer); - } + // TODO this could change if the VAO changes... + // need to come up with a better way to cache.. + // if (this.boundBuffers[type] !== glBuffer) + // { + // this.boundBuffers[type] = glBuffer; + gl.bindBuffer(type, glBuffer.buffer); + // } this._boundBuffer = glBuffer; @@ -211,6 +211,8 @@ } else { + const drawType = buffer.static ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW; + glBuffer.byteLength = buffer.data.byteLength; gl.bufferData(type, buffer.data, drawType); } diff --git a/packages/core/src/geometry/GeometrySystem.js b/packages/core/src/geometry/GeometrySystem.js index 94570d2..5c5c75f 100644 --- a/packages/core/src/geometry/GeometrySystem.js +++ b/packages/core/src/geometry/GeometrySystem.js @@ -193,14 +193,14 @@ // TODO can cache this on buffer! maybe added a getter / setter? const type = buffer.index ? gl.ELEMENT_ARRAY_BUFFER : gl.ARRAY_BUFFER; - const drawType = buffer.static ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW; - if (this.boundBuffers[type] !== glBuffer) - { - this.boundBuffers[type] = glBuffer; - - gl.bindBuffer(type, glBuffer.buffer); - } + // TODO this could change if the VAO changes... + // need to come up with a better way to cache.. + // if (this.boundBuffers[type] !== glBuffer) + // { + // this.boundBuffers[type] = glBuffer; + gl.bindBuffer(type, glBuffer.buffer); + // } this._boundBuffer = glBuffer; @@ -211,6 +211,8 @@ } else { + const drawType = buffer.static ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW; + glBuffer.byteLength = buffer.data.byteLength; gl.bufferData(type, buffer.data, drawType); } diff --git a/packages/core/src/shader/Program.js b/packages/core/src/shader/Program.js index 13517c7..a0fd6a6 100644 --- a/packages/core/src/shader/Program.js +++ b/packages/core/src/shader/Program.js @@ -41,12 +41,14 @@ */ this.fragmentSrc = fragmentSrc || Program.defaultFragmentSrc; - this.vertexSrc = setPrecision(this.vertexSrc, settings.PRECISION_VERTEX); - this.fragmentSrc = setPrecision(this.fragmentSrc, settings.PRECISION_FRAGMENT); + name = name.replace(/\s+/g, '-'); this.vertexSrc = `#define SHADER_NAME ${name}-${this.id}\n${this.vertexSrc}`; this.fragmentSrc = `#define SHADER_NAME ${name}-${this.id}\n${this.fragmentSrc}`; + this.vertexSrc = setPrecision(this.vertexSrc, settings.PRECISION_VERTEX); + this.fragmentSrc = setPrecision(this.fragmentSrc, settings.PRECISION_FRAGMENT); + // currently this does not extract structs only default types this.extractData(this.vertexSrc, this.fragmentSrc); diff --git a/packages/core/src/geometry/GeometrySystem.js b/packages/core/src/geometry/GeometrySystem.js index 94570d2..5c5c75f 100644 --- a/packages/core/src/geometry/GeometrySystem.js +++ b/packages/core/src/geometry/GeometrySystem.js @@ -193,14 +193,14 @@ // TODO can cache this on buffer! maybe added a getter / setter? const type = buffer.index ? gl.ELEMENT_ARRAY_BUFFER : gl.ARRAY_BUFFER; - const drawType = buffer.static ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW; - if (this.boundBuffers[type] !== glBuffer) - { - this.boundBuffers[type] = glBuffer; - - gl.bindBuffer(type, glBuffer.buffer); - } + // TODO this could change if the VAO changes... + // need to come up with a better way to cache.. + // if (this.boundBuffers[type] !== glBuffer) + // { + // this.boundBuffers[type] = glBuffer; + gl.bindBuffer(type, glBuffer.buffer); + // } this._boundBuffer = glBuffer; @@ -211,6 +211,8 @@ } else { + const drawType = buffer.static ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW; + glBuffer.byteLength = buffer.data.byteLength; gl.bufferData(type, buffer.data, drawType); } diff --git a/packages/core/src/shader/Program.js b/packages/core/src/shader/Program.js index 13517c7..a0fd6a6 100644 --- a/packages/core/src/shader/Program.js +++ b/packages/core/src/shader/Program.js @@ -41,12 +41,14 @@ */ this.fragmentSrc = fragmentSrc || Program.defaultFragmentSrc; - this.vertexSrc = setPrecision(this.vertexSrc, settings.PRECISION_VERTEX); - this.fragmentSrc = setPrecision(this.fragmentSrc, settings.PRECISION_FRAGMENT); + name = name.replace(/\s+/g, '-'); this.vertexSrc = `#define SHADER_NAME ${name}-${this.id}\n${this.vertexSrc}`; this.fragmentSrc = `#define SHADER_NAME ${name}-${this.id}\n${this.fragmentSrc}`; + this.vertexSrc = setPrecision(this.vertexSrc, settings.PRECISION_VERTEX); + this.fragmentSrc = setPrecision(this.fragmentSrc, settings.PRECISION_FRAGMENT); + // currently this does not extract structs only default types this.extractData(this.vertexSrc, this.fragmentSrc); diff --git a/packages/core/src/shader/utils/setPrecision.js b/packages/core/src/shader/utils/setPrecision.js index e2c1f34..e571e97 100644 --- a/packages/core/src/shader/utils/setPrecision.js +++ b/packages/core/src/shader/utils/setPrecision.js @@ -9,7 +9,7 @@ { src = src.trim(); - if (src.substring(0, 9) !== 'precision' && src.substring(0, 1) !== '#') + if (src.substring(0, 9) !== 'precision')// && src.substring(0, 1) !== '#') { return `precision ${precision} float;\n${src}`; } diff --git a/packages/core/src/geometry/GeometrySystem.js b/packages/core/src/geometry/GeometrySystem.js index 94570d2..5c5c75f 100644 --- a/packages/core/src/geometry/GeometrySystem.js +++ b/packages/core/src/geometry/GeometrySystem.js @@ -193,14 +193,14 @@ // TODO can cache this on buffer! maybe added a getter / setter? const type = buffer.index ? gl.ELEMENT_ARRAY_BUFFER : gl.ARRAY_BUFFER; - const drawType = buffer.static ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW; - if (this.boundBuffers[type] !== glBuffer) - { - this.boundBuffers[type] = glBuffer; - - gl.bindBuffer(type, glBuffer.buffer); - } + // TODO this could change if the VAO changes... + // need to come up with a better way to cache.. + // if (this.boundBuffers[type] !== glBuffer) + // { + // this.boundBuffers[type] = glBuffer; + gl.bindBuffer(type, glBuffer.buffer); + // } this._boundBuffer = glBuffer; @@ -211,6 +211,8 @@ } else { + const drawType = buffer.static ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW; + glBuffer.byteLength = buffer.data.byteLength; gl.bufferData(type, buffer.data, drawType); } diff --git a/packages/core/src/shader/Program.js b/packages/core/src/shader/Program.js index 13517c7..a0fd6a6 100644 --- a/packages/core/src/shader/Program.js +++ b/packages/core/src/shader/Program.js @@ -41,12 +41,14 @@ */ this.fragmentSrc = fragmentSrc || Program.defaultFragmentSrc; - this.vertexSrc = setPrecision(this.vertexSrc, settings.PRECISION_VERTEX); - this.fragmentSrc = setPrecision(this.fragmentSrc, settings.PRECISION_FRAGMENT); + name = name.replace(/\s+/g, '-'); this.vertexSrc = `#define SHADER_NAME ${name}-${this.id}\n${this.vertexSrc}`; this.fragmentSrc = `#define SHADER_NAME ${name}-${this.id}\n${this.fragmentSrc}`; + this.vertexSrc = setPrecision(this.vertexSrc, settings.PRECISION_VERTEX); + this.fragmentSrc = setPrecision(this.fragmentSrc, settings.PRECISION_FRAGMENT); + // currently this does not extract structs only default types this.extractData(this.vertexSrc, this.fragmentSrc); diff --git a/packages/core/src/shader/utils/setPrecision.js b/packages/core/src/shader/utils/setPrecision.js index e2c1f34..e571e97 100644 --- a/packages/core/src/shader/utils/setPrecision.js +++ b/packages/core/src/shader/utils/setPrecision.js @@ -9,7 +9,7 @@ { src = src.trim(); - if (src.substring(0, 9) !== 'precision' && src.substring(0, 1) !== '#') + if (src.substring(0, 9) !== 'precision')// && src.substring(0, 1) !== '#') { return `precision ${precision} float;\n${src}`; } diff --git a/packages/core/src/textures/TextureSystem.js b/packages/core/src/textures/TextureSystem.js index e6c3004..2bd7aa9 100644 --- a/packages/core/src/textures/TextureSystem.js +++ b/packages/core/src/textures/TextureSystem.js @@ -108,13 +108,14 @@ const glTexture = texture._glTextures[this.CONTEXT_UID] || this.initTexture(texture); - this.currentLocation = location; - gl.activeTexture(gl.TEXTURE0 + location); + if (this.currentLocation !== location) + { + this.currentLocation = location; + gl.activeTexture(gl.TEXTURE0 + location); + } if (this.boundTextures[location] !== texture) { - // if (this.currentLocation !== location) - gl.bindTexture(texture.target, glTexture.texture); } diff --git a/packages/core/src/geometry/GeometrySystem.js b/packages/core/src/geometry/GeometrySystem.js index 94570d2..5c5c75f 100644 --- a/packages/core/src/geometry/GeometrySystem.js +++ b/packages/core/src/geometry/GeometrySystem.js @@ -193,14 +193,14 @@ // TODO can cache this on buffer! maybe added a getter / setter? const type = buffer.index ? gl.ELEMENT_ARRAY_BUFFER : gl.ARRAY_BUFFER; - const drawType = buffer.static ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW; - if (this.boundBuffers[type] !== glBuffer) - { - this.boundBuffers[type] = glBuffer; - - gl.bindBuffer(type, glBuffer.buffer); - } + // TODO this could change if the VAO changes... + // need to come up with a better way to cache.. + // if (this.boundBuffers[type] !== glBuffer) + // { + // this.boundBuffers[type] = glBuffer; + gl.bindBuffer(type, glBuffer.buffer); + // } this._boundBuffer = glBuffer; @@ -211,6 +211,8 @@ } else { + const drawType = buffer.static ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW; + glBuffer.byteLength = buffer.data.byteLength; gl.bufferData(type, buffer.data, drawType); } diff --git a/packages/core/src/shader/Program.js b/packages/core/src/shader/Program.js index 13517c7..a0fd6a6 100644 --- a/packages/core/src/shader/Program.js +++ b/packages/core/src/shader/Program.js @@ -41,12 +41,14 @@ */ this.fragmentSrc = fragmentSrc || Program.defaultFragmentSrc; - this.vertexSrc = setPrecision(this.vertexSrc, settings.PRECISION_VERTEX); - this.fragmentSrc = setPrecision(this.fragmentSrc, settings.PRECISION_FRAGMENT); + name = name.replace(/\s+/g, '-'); this.vertexSrc = `#define SHADER_NAME ${name}-${this.id}\n${this.vertexSrc}`; this.fragmentSrc = `#define SHADER_NAME ${name}-${this.id}\n${this.fragmentSrc}`; + this.vertexSrc = setPrecision(this.vertexSrc, settings.PRECISION_VERTEX); + this.fragmentSrc = setPrecision(this.fragmentSrc, settings.PRECISION_FRAGMENT); + // currently this does not extract structs only default types this.extractData(this.vertexSrc, this.fragmentSrc); diff --git a/packages/core/src/shader/utils/setPrecision.js b/packages/core/src/shader/utils/setPrecision.js index e2c1f34..e571e97 100644 --- a/packages/core/src/shader/utils/setPrecision.js +++ b/packages/core/src/shader/utils/setPrecision.js @@ -9,7 +9,7 @@ { src = src.trim(); - if (src.substring(0, 9) !== 'precision' && src.substring(0, 1) !== '#') + if (src.substring(0, 9) !== 'precision')// && src.substring(0, 1) !== '#') { return `precision ${precision} float;\n${src}`; } diff --git a/packages/core/src/textures/TextureSystem.js b/packages/core/src/textures/TextureSystem.js index e6c3004..2bd7aa9 100644 --- a/packages/core/src/textures/TextureSystem.js +++ b/packages/core/src/textures/TextureSystem.js @@ -108,13 +108,14 @@ const glTexture = texture._glTextures[this.CONTEXT_UID] || this.initTexture(texture); - this.currentLocation = location; - gl.activeTexture(gl.TEXTURE0 + location); + if (this.currentLocation !== location) + { + this.currentLocation = location; + gl.activeTexture(gl.TEXTURE0 + location); + } if (this.boundTextures[location] !== texture) { - // if (this.currentLocation !== location) - gl.bindTexture(texture.target, glTexture.texture); } diff --git a/packages/sprite/src/Sprite.js b/packages/sprite/src/Sprite.js index 5e9c7c9..eb72d82 100644 --- a/packages/sprite/src/Sprite.js +++ b/packages/sprite/src/Sprite.js @@ -217,17 +217,18 @@ */ calculateVertices() { - if (this._transformID === this.transform._worldID && this._textureID === this._texture._updateID) + const texture = this._texture; + + if (this._transformID === this.transform._worldID && this._textureID === texture._updateID) { return; } this._transformID = this.transform._worldID; - this._textureID = this._texture._updateID; + this._textureID = texture._updateID; // set the vertex data - const texture = this._texture; const wt = this.transform.worldTransform; const a = wt.a; const b = wt.b;