diff --git a/src/core/renderers/webgl/systems/ContextSystem.js b/src/core/renderers/webgl/systems/ContextSystem.js index 10f1da4..8849245 100644 --- a/src/core/renderers/webgl/systems/ContextSystem.js +++ b/src/core/renderers/webgl/systems/ContextSystem.js @@ -75,9 +75,8 @@ */ createContext(canvas, options) { - var gl = canvas.getContext('webgl2', options) || - canvas.getContext('webgl', options) || - canvas.getContext('experimental-webgl', options); + var gl = canvas.getContext('webgl', options) || + canvas.getContext('experimental-webgl', options); if (!gl) { diff --git a/src/core/renderers/webgl/systems/ContextSystem.js b/src/core/renderers/webgl/systems/ContextSystem.js index 10f1da4..8849245 100644 --- a/src/core/renderers/webgl/systems/ContextSystem.js +++ b/src/core/renderers/webgl/systems/ContextSystem.js @@ -75,9 +75,8 @@ */ createContext(canvas, options) { - var gl = canvas.getContext('webgl2', options) || - canvas.getContext('webgl', options) || - canvas.getContext('experimental-webgl', options); + var gl = canvas.getContext('webgl', options) || + canvas.getContext('experimental-webgl', options); if (!gl) { diff --git a/src/core/renderers/webgl/systems/geometry/VertexArrayObject.js b/src/core/renderers/webgl/systems/geometry/VertexArrayObject.js index db89556..78cfa5f 100644 --- a/src/core/renderers/webgl/systems/geometry/VertexArrayObject.js +++ b/src/core/renderers/webgl/systems/geometry/VertexArrayObject.js @@ -24,6 +24,7 @@ this.instanceExt = gl.getExtension("ANGLE_instanced_arrays"); } + this.nativeState = state; if(this.nativeVaoExtension) diff --git a/src/core/renderers/webgl/systems/ContextSystem.js b/src/core/renderers/webgl/systems/ContextSystem.js index 10f1da4..8849245 100644 --- a/src/core/renderers/webgl/systems/ContextSystem.js +++ b/src/core/renderers/webgl/systems/ContextSystem.js @@ -75,9 +75,8 @@ */ createContext(canvas, options) { - var gl = canvas.getContext('webgl2', options) || - canvas.getContext('webgl', options) || - canvas.getContext('experimental-webgl', options); + var gl = canvas.getContext('webgl', options) || + canvas.getContext('experimental-webgl', options); if (!gl) { diff --git a/src/core/renderers/webgl/systems/geometry/VertexArrayObject.js b/src/core/renderers/webgl/systems/geometry/VertexArrayObject.js index db89556..78cfa5f 100644 --- a/src/core/renderers/webgl/systems/geometry/VertexArrayObject.js +++ b/src/core/renderers/webgl/systems/geometry/VertexArrayObject.js @@ -24,6 +24,7 @@ this.instanceExt = gl.getExtension("ANGLE_instanced_arrays"); } + this.nativeState = state; if(this.nativeVaoExtension) diff --git a/src/core/shader/Program.js b/src/core/shader/Program.js index 07b4398..6fb038e 100644 --- a/src/core/shader/Program.js +++ b/src/core/shader/Program.js @@ -68,13 +68,10 @@ fragmentSrc = shaderUtils.setPrecision(fragmentSrc, 'mediump'); const program = shaderUtils.compileProgram(gl, vertexSrc, fragmentSrc); - console.log("<<<<<<>>><<"); this.attributeData = this.getAttributeData(program, gl); this.uniformData = this.getUniformData(program, gl); - console.log(this.uniformData); - //gl.deleteProgram(program); } } @@ -147,7 +144,6 @@ const uniformData = gl.getActiveUniform(program, i); const name = uniformData.name.replace(/\[.*?\]/, ''); const type = shaderUtils.mapType(gl, uniformData.type); - console.log('mapping ' + uniformData.type + ' to ' + type); // if (!name.match(maskRegex)) { diff --git a/src/core/renderers/webgl/systems/ContextSystem.js b/src/core/renderers/webgl/systems/ContextSystem.js index 10f1da4..8849245 100644 --- a/src/core/renderers/webgl/systems/ContextSystem.js +++ b/src/core/renderers/webgl/systems/ContextSystem.js @@ -75,9 +75,8 @@ */ createContext(canvas, options) { - var gl = canvas.getContext('webgl2', options) || - canvas.getContext('webgl', options) || - canvas.getContext('experimental-webgl', options); + var gl = canvas.getContext('webgl', options) || + canvas.getContext('experimental-webgl', options); if (!gl) { diff --git a/src/core/renderers/webgl/systems/geometry/VertexArrayObject.js b/src/core/renderers/webgl/systems/geometry/VertexArrayObject.js index db89556..78cfa5f 100644 --- a/src/core/renderers/webgl/systems/geometry/VertexArrayObject.js +++ b/src/core/renderers/webgl/systems/geometry/VertexArrayObject.js @@ -24,6 +24,7 @@ this.instanceExt = gl.getExtension("ANGLE_instanced_arrays"); } + this.nativeState = state; if(this.nativeVaoExtension) diff --git a/src/core/shader/Program.js b/src/core/shader/Program.js index 07b4398..6fb038e 100644 --- a/src/core/shader/Program.js +++ b/src/core/shader/Program.js @@ -68,13 +68,10 @@ fragmentSrc = shaderUtils.setPrecision(fragmentSrc, 'mediump'); const program = shaderUtils.compileProgram(gl, vertexSrc, fragmentSrc); - console.log("<<<<<<>>><<"); this.attributeData = this.getAttributeData(program, gl); this.uniformData = this.getUniformData(program, gl); - console.log(this.uniformData); - //gl.deleteProgram(program); } } @@ -147,7 +144,6 @@ const uniformData = gl.getActiveUniform(program, i); const name = uniformData.name.replace(/\[.*?\]/, ''); const type = shaderUtils.mapType(gl, uniformData.type); - console.log('mapping ' + uniformData.type + ' to ' + type); // if (!name.match(maskRegex)) { diff --git a/src/core/sprites/webgl/SpriteRenderer.js b/src/core/sprites/webgl/SpriteRenderer.js index 1341ec3..5920852 100644 --- a/src/core/sprites/webgl/SpriteRenderer.js +++ b/src/core/sprites/webgl/SpriteRenderer.js @@ -229,6 +229,7 @@ let nextTexture; let currentTexture; let groupCount = 1; + let textureId = 0; let textureCount = 0; let currentGroup = groups[0]; let vertexData; @@ -254,77 +255,59 @@ { // upload the sprite elemetns... // they have all ready been calculated so we just need to push them into the buffer. - const sprite = sprites[i]; + + // upload the sprite elemetns... + // they have all ready been calculated so we just need to push them into the buffer. + var sprite = sprites[i]; nextTexture = sprite._texture.baseTexture; + textureId = nextTexture._id; - if (blendMode !== sprite.blendMode) + + if(blendMode !== sprite.blendMode) { - // finish a group.. blendMode = sprite.blendMode; // force the batch to break! currentTexture = null; - textureCount = MAX_TEXTURES; + textureCount = this.MAX_TEXTURES; TICK++; } - if (currentTexture !== nextTexture) + if(currentTexture !== nextTexture) { currentTexture = nextTexture; - if (nextTexture._enabled !== TICK) + if(nextTexture._enabled !== TICK) { - if (textureCount === MAX_TEXTURES) + if(textureCount === this.MAX_TEXTURES) { TICK++; - currentGroup.size = i - currentGroup.start; - textureCount = 0; + currentGroup.size = i - currentGroup.start; + currentGroup = groups[groupCount++]; - currentGroup.blend = blendMode; currentGroup.textureCount = 0; + currentGroup.blend = blendMode; currentGroup.start = i; } - nextTexture.touched = touch; - - if (nextTexture._virtalBoundId === -1) - { - for (let j = 0; j < MAX_TEXTURES; ++j) - { - const tIndex = (j + TEXTURE_TICK) % MAX_TEXTURES; - - const t = boundTextures[tIndex]; - - if (t._enabled !== TICK) - { - TEXTURE_TICK++; - - t._virtalBoundId = -1; - - nextTexture._virtalBoundId = tIndex; - - boundTextures[tIndex] = nextTexture; - break; - } - } - } - nextTexture._enabled = TICK; + nextTexture._id = textureCount; - currentGroup.textureCount++; - currentGroup.ids[textureCount] = nextTexture._virtalBoundId; - currentGroup.textures[textureCount++] = nextTexture; + currentGroup.textures[currentGroup.textureCount++] = nextTexture; + textureCount++; } + } vertexData = sprite.vertexData; // TODO this sum does not need to be set each frame.. uvs = sprite._texture._uvs.uvsUint32; + textureId = nextTexture._id; if (this.renderer.roundPixels) { @@ -373,7 +356,7 @@ /* eslint-disable max-len */ uint32View[index + 3] = uint32View[index + 8] = uint32View[index + 13] = uint32View[index + 18] = sprite._tintRGB + (Math.min(sprite.worldAlpha, 1) * 255 << 24); - float32View[index + 4] = float32View[index + 9] = float32View[index + 14] = float32View[index + 19] = nextTexture._virtalBoundId; + float32View[index + 4] = float32View[index + 9] = float32View[index + 14] = float32View[index + 19] = textureId; /* eslint-enable max-len */ index += 20; @@ -421,11 +404,32 @@ this.vertexBuffers[this.vertexCount].upload(buffer.vertices, 0, true); } - for (i = 0; i < MAX_TEXTURES; ++i) - { - rendererBoundTextures[i]._virtalBoundId = -1; - } + /// render the groups.. + for (i = 0; i < groupCount; i++) { + var group = groups[i]; + var groupTextureCount = group.textureCount; + //shader = this.shaders[groupTextureCount-1]; + + //if(!shader) + // { + // shader = this.shaders[groupTextureCount-1] = generateMultiTextureShader(gl, groupTextureCount); + //console.log("SHADER generated for " + textureCount + " textures") + //} + + /// this.renderer.shader.bind(shader); + + for (var j = 0; j < groupTextureCount; j++) + { + this.renderer.texture.bind(group.textures[j], j); + } + + // set the blend mode.. + //this.renderer.state.setBlendMode( group.blend ); + + gl.drawElements(gl.TRIANGLES, group.size * 6, gl.UNSIGNED_SHORT, group.start * 6 * 2); + } +/* // render the groups.. for (i = 0; i < groupCount; ++i) { @@ -452,7 +456,7 @@ gl.drawElements(gl.TRIANGLES, group.size * 6, gl.UNSIGNED_SHORT, group.start * 6 * 2); } - +*/ // reset elements for the next flush this.currentIndex = 0; }