diff --git a/src/core/renderers/webgl/shaders/FastShader.js b/src/core/renderers/webgl/shaders/FastShader.js index 7439a4b..46e7c8e 100644 --- a/src/core/renderers/webgl/shaders/FastShader.js +++ b/src/core/renderers/webgl/shaders/FastShader.js @@ -10,8 +10,6 @@ Shader.call(this, gl, // vertex shader - null, - // fragment shader [ 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -26,7 +24,7 @@ 'uniform mat3 uMatrix;', 'varying vec2 vTextureCoord;', - 'varying float vColor;', + 'varying vec4 vColor;', 'const vec2 center = vec2(-1.0, 1.0);', @@ -42,6 +40,8 @@ ' vColor = aColor;', '}' ].join('\n'), + // fragment shader, use default + null, // custom uniforms { uMatrix: { type: 'mat3', value: new Float32Array(9) } diff --git a/src/core/renderers/webgl/shaders/FastShader.js b/src/core/renderers/webgl/shaders/FastShader.js index 7439a4b..46e7c8e 100644 --- a/src/core/renderers/webgl/shaders/FastShader.js +++ b/src/core/renderers/webgl/shaders/FastShader.js @@ -10,8 +10,6 @@ Shader.call(this, gl, // vertex shader - null, - // fragment shader [ 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -26,7 +24,7 @@ 'uniform mat3 uMatrix;', 'varying vec2 vTextureCoord;', - 'varying float vColor;', + 'varying vec4 vColor;', 'const vec2 center = vec2(-1.0, 1.0);', @@ -42,6 +40,8 @@ ' vColor = aColor;', '}' ].join('\n'), + // fragment shader, use default + null, // custom uniforms { uMatrix: { type: 'mat3', value: new Float32Array(9) } diff --git a/src/core/renderers/webgl/shaders/PrimitiveShader.js b/src/core/renderers/webgl/shaders/PrimitiveShader.js index 28714f5..6f25409 100644 --- a/src/core/renderers/webgl/shaders/PrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/PrimitiveShader.js @@ -33,6 +33,7 @@ // fragment shader [ 'precision mediump float;', + 'varying vec4 vColor;', 'void main(void) {', diff --git a/src/core/renderers/webgl/shaders/FastShader.js b/src/core/renderers/webgl/shaders/FastShader.js index 7439a4b..46e7c8e 100644 --- a/src/core/renderers/webgl/shaders/FastShader.js +++ b/src/core/renderers/webgl/shaders/FastShader.js @@ -10,8 +10,6 @@ Shader.call(this, gl, // vertex shader - null, - // fragment shader [ 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -26,7 +24,7 @@ 'uniform mat3 uMatrix;', 'varying vec2 vTextureCoord;', - 'varying float vColor;', + 'varying vec4 vColor;', 'const vec2 center = vec2(-1.0, 1.0);', @@ -42,6 +40,8 @@ ' vColor = aColor;', '}' ].join('\n'), + // fragment shader, use default + null, // custom uniforms { uMatrix: { type: 'mat3', value: new Float32Array(9) } diff --git a/src/core/renderers/webgl/shaders/PrimitiveShader.js b/src/core/renderers/webgl/shaders/PrimitiveShader.js index 28714f5..6f25409 100644 --- a/src/core/renderers/webgl/shaders/PrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/PrimitiveShader.js @@ -33,6 +33,7 @@ // fragment shader [ 'precision mediump float;', + 'varying vec4 vColor;', 'void main(void) {', diff --git a/src/core/renderers/webgl/shaders/Shader.js b/src/core/renderers/webgl/shaders/Shader.js index 7324567..0d9d8f9 100644 --- a/src/core/renderers/webgl/shaders/Shader.js +++ b/src/core/renderers/webgl/shaders/Shader.js @@ -6,7 +6,7 @@ * @param [fragmentSrc] {string} The source of the fragment shader. * @param [vertexSrc] {string} The source of the vertex shader. */ -function Shader(gl, fragmentSrc, vertexSrc, customUniforms, customAttributes) { +function Shader(gl, vertexSrc, fragmentSrc, customUniforms, customAttributes) { /** * @member {number} * @readonly @@ -148,15 +148,15 @@ window.console.error('gl.VALIDATE_STATUS', gl.getProgramParameter(program, gl.VALIDATE_STATUS)); window.console.error('gl.getError()', gl.getError()); + // if there is a program info log, log it + if (gl.getProgramInfoLog(program) !== '') { + window.console.warn('Pixi.js Warning: gl.getProgramInfoLog()', gl.getProgramInfoLog(program)); + } + gl.deleteProgram(program); program = null; } - // if there is a program info log, log it - if (gl.getProgramInfoLog(program) !== '') { - window.console.warn('Pixi.js Warning: gl.getProgramInfoLog()', gl.getProgramInfoLog(program)); - } - // clean up some shaders gl.deleteShader(glVertShader); gl.deleteShader(glFragShader); @@ -436,6 +436,10 @@ Shader.prototype._glCompile = function (type, src) { var shader = this.gl.createShader(type); + if (Array.isArray(src)) { + debugger; + } + this.gl.shaderSource(shader, src); this.gl.compileShader(shader); diff --git a/src/core/renderers/webgl/shaders/FastShader.js b/src/core/renderers/webgl/shaders/FastShader.js index 7439a4b..46e7c8e 100644 --- a/src/core/renderers/webgl/shaders/FastShader.js +++ b/src/core/renderers/webgl/shaders/FastShader.js @@ -10,8 +10,6 @@ Shader.call(this, gl, // vertex shader - null, - // fragment shader [ 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -26,7 +24,7 @@ 'uniform mat3 uMatrix;', 'varying vec2 vTextureCoord;', - 'varying float vColor;', + 'varying vec4 vColor;', 'const vec2 center = vec2(-1.0, 1.0);', @@ -42,6 +40,8 @@ ' vColor = aColor;', '}' ].join('\n'), + // fragment shader, use default + null, // custom uniforms { uMatrix: { type: 'mat3', value: new Float32Array(9) } diff --git a/src/core/renderers/webgl/shaders/PrimitiveShader.js b/src/core/renderers/webgl/shaders/PrimitiveShader.js index 28714f5..6f25409 100644 --- a/src/core/renderers/webgl/shaders/PrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/PrimitiveShader.js @@ -33,6 +33,7 @@ // fragment shader [ 'precision mediump float;', + 'varying vec4 vColor;', 'void main(void) {', diff --git a/src/core/renderers/webgl/shaders/Shader.js b/src/core/renderers/webgl/shaders/Shader.js index 7324567..0d9d8f9 100644 --- a/src/core/renderers/webgl/shaders/Shader.js +++ b/src/core/renderers/webgl/shaders/Shader.js @@ -6,7 +6,7 @@ * @param [fragmentSrc] {string} The source of the fragment shader. * @param [vertexSrc] {string} The source of the vertex shader. */ -function Shader(gl, fragmentSrc, vertexSrc, customUniforms, customAttributes) { +function Shader(gl, vertexSrc, fragmentSrc, customUniforms, customAttributes) { /** * @member {number} * @readonly @@ -148,15 +148,15 @@ window.console.error('gl.VALIDATE_STATUS', gl.getProgramParameter(program, gl.VALIDATE_STATUS)); window.console.error('gl.getError()', gl.getError()); + // if there is a program info log, log it + if (gl.getProgramInfoLog(program) !== '') { + window.console.warn('Pixi.js Warning: gl.getProgramInfoLog()', gl.getProgramInfoLog(program)); + } + gl.deleteProgram(program); program = null; } - // if there is a program info log, log it - if (gl.getProgramInfoLog(program) !== '') { - window.console.warn('Pixi.js Warning: gl.getProgramInfoLog()', gl.getProgramInfoLog(program)); - } - // clean up some shaders gl.deleteShader(glVertShader); gl.deleteShader(glFragShader); @@ -436,6 +436,10 @@ Shader.prototype._glCompile = function (type, src) { var shader = this.gl.createShader(type); + if (Array.isArray(src)) { + debugger; + } + this.gl.shaderSource(shader, src); this.gl.compileShader(shader); diff --git a/src/core/renderers/webgl/utils/WebGLSpriteBatch.js b/src/core/renderers/webgl/utils/WebGLSpriteBatch.js index 77d04cc..6119cde 100644 --- a/src/core/renderers/webgl/utils/WebGLSpriteBatch.js +++ b/src/core/renderers/webgl/utils/WebGLSpriteBatch.js @@ -1,5 +1,4 @@ -var AbstractFilter = require('../../../../filters/AbstractFilter'), - TextureUvs = require('../../../textures/TextureUvs'), +var TextureUvs = require('../../../textures/TextureUvs'), Shader = require('../shaders/Shader'); /** @@ -148,19 +147,11 @@ this.sprites = []; /** - * TODO - Shouldn't this be a Shader, not an AbstractFilter? + * The default shader that is used if a sprite doesn't have a more specific one. * - * @member {AbstractFilter} + * @member {Shader} */ - this.defaultShader = new AbstractFilter([ - 'precision lowp float;', - 'varying vec2 vTextureCoord;', - 'varying vec4 vColor;', - 'uniform sampler2D uSampler;', - 'void main(void) {', - ' gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;', - '}' - ]); + this.shader = null; // listen for context and update necessary buffers var self = this; @@ -178,6 +169,9 @@ WebGLSpriteBatch.prototype.setupContext = function () { var gl = this.renderer.gl; + // setup default shader + this.shader = new Shader(gl); + // create a couple of buffers this.vertexBuffer = gl.createBuffer(); this.indexBuffer = gl.createBuffer(); @@ -192,21 +186,13 @@ gl.bufferData(gl.ARRAY_BUFFER, this.vertices, gl.DYNAMIC_DRAW); this.currentBlendMode = 99999; - - var shader = new Shader(gl); - - shader.fragmentSrc = this.defaultShader.fragmentSrc; - shader.uniforms = {}; - shader.init(); - - this.defaultShader.shaders[gl.id] = shader; }; /** * */ WebGLSpriteBatch.prototype.begin = function () { - this.shader = this.renderer.shaderManager.defaultShader; + // this.shader = this.renderer.shaderManager.defaultShader; this.start(); }; @@ -483,15 +469,13 @@ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); - shader = this.defaultShader.shaders[gl.id]; - // this is the same for each shader? var stride = this.vertSize * 4; - gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, stride, 0); - gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, stride, 2 * 4); + gl.vertexAttribPointer(this.shader.aVertexPosition, 2, gl.FLOAT, false, stride, 0); + gl.vertexAttribPointer(this.shader.aTextureCoord, 2, gl.FLOAT, false, stride, 2 * 4); // color attributes will be interpreted as unsigned bytes and normalized - gl.vertexAttribPointer(shader.aColor, 4, gl.UNSIGNED_BYTE, true, stride, 4 * 4); + gl.vertexAttribPointer(this.shader.aColor, 4, gl.UNSIGNED_BYTE, true, stride, 4 * 4); } // upload the verts to the buffer @@ -521,7 +505,7 @@ nextTexture = sprite.texture.baseTexture; nextBlendMode = sprite.blendMode; - nextShader = sprite.shader || this.defaultShader; + nextShader = sprite.shader || this.shader; blendSwap = currentBlendMode !== nextBlendMode; shaderSwap = currentShader !== nextShader; // should I use uuidS??? @@ -533,23 +517,18 @@ batchSize = 0; currentBaseTexture = nextTexture; - if ( blendSwap ) { + if (blendSwap) { currentBlendMode = nextBlendMode; this.renderer.blendModeManager.setBlendMode( currentBlendMode ); } - if ( shaderSwap ) { + if (shaderSwap) { currentShader = nextShader; - shader = currentShader.shaders[gl.id]; + shader = currentShader.shaders ? currentShader.shaders[gl.id] : shader; if (!shader) { - shader = new Shader(gl); - - shader.fragmentSrc =currentShader.fragmentSrc; - shader.uniforms =currentShader.uniforms; - shader.init(); - + shader = new Shader(gl, null, currentShader.fragmentSrc, currentShader.uniforms); currentShader.shaders[gl.id] = shader; } diff --git a/src/core/renderers/webgl/shaders/FastShader.js b/src/core/renderers/webgl/shaders/FastShader.js index 7439a4b..46e7c8e 100644 --- a/src/core/renderers/webgl/shaders/FastShader.js +++ b/src/core/renderers/webgl/shaders/FastShader.js @@ -10,8 +10,6 @@ Shader.call(this, gl, // vertex shader - null, - // fragment shader [ 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -26,7 +24,7 @@ 'uniform mat3 uMatrix;', 'varying vec2 vTextureCoord;', - 'varying float vColor;', + 'varying vec4 vColor;', 'const vec2 center = vec2(-1.0, 1.0);', @@ -42,6 +40,8 @@ ' vColor = aColor;', '}' ].join('\n'), + // fragment shader, use default + null, // custom uniforms { uMatrix: { type: 'mat3', value: new Float32Array(9) } diff --git a/src/core/renderers/webgl/shaders/PrimitiveShader.js b/src/core/renderers/webgl/shaders/PrimitiveShader.js index 28714f5..6f25409 100644 --- a/src/core/renderers/webgl/shaders/PrimitiveShader.js +++ b/src/core/renderers/webgl/shaders/PrimitiveShader.js @@ -33,6 +33,7 @@ // fragment shader [ 'precision mediump float;', + 'varying vec4 vColor;', 'void main(void) {', diff --git a/src/core/renderers/webgl/shaders/Shader.js b/src/core/renderers/webgl/shaders/Shader.js index 7324567..0d9d8f9 100644 --- a/src/core/renderers/webgl/shaders/Shader.js +++ b/src/core/renderers/webgl/shaders/Shader.js @@ -6,7 +6,7 @@ * @param [fragmentSrc] {string} The source of the fragment shader. * @param [vertexSrc] {string} The source of the vertex shader. */ -function Shader(gl, fragmentSrc, vertexSrc, customUniforms, customAttributes) { +function Shader(gl, vertexSrc, fragmentSrc, customUniforms, customAttributes) { /** * @member {number} * @readonly @@ -148,15 +148,15 @@ window.console.error('gl.VALIDATE_STATUS', gl.getProgramParameter(program, gl.VALIDATE_STATUS)); window.console.error('gl.getError()', gl.getError()); + // if there is a program info log, log it + if (gl.getProgramInfoLog(program) !== '') { + window.console.warn('Pixi.js Warning: gl.getProgramInfoLog()', gl.getProgramInfoLog(program)); + } + gl.deleteProgram(program); program = null; } - // if there is a program info log, log it - if (gl.getProgramInfoLog(program) !== '') { - window.console.warn('Pixi.js Warning: gl.getProgramInfoLog()', gl.getProgramInfoLog(program)); - } - // clean up some shaders gl.deleteShader(glVertShader); gl.deleteShader(glFragShader); @@ -436,6 +436,10 @@ Shader.prototype._glCompile = function (type, src) { var shader = this.gl.createShader(type); + if (Array.isArray(src)) { + debugger; + } + this.gl.shaderSource(shader, src); this.gl.compileShader(shader); diff --git a/src/core/renderers/webgl/utils/WebGLSpriteBatch.js b/src/core/renderers/webgl/utils/WebGLSpriteBatch.js index 77d04cc..6119cde 100644 --- a/src/core/renderers/webgl/utils/WebGLSpriteBatch.js +++ b/src/core/renderers/webgl/utils/WebGLSpriteBatch.js @@ -1,5 +1,4 @@ -var AbstractFilter = require('../../../../filters/AbstractFilter'), - TextureUvs = require('../../../textures/TextureUvs'), +var TextureUvs = require('../../../textures/TextureUvs'), Shader = require('../shaders/Shader'); /** @@ -148,19 +147,11 @@ this.sprites = []; /** - * TODO - Shouldn't this be a Shader, not an AbstractFilter? + * The default shader that is used if a sprite doesn't have a more specific one. * - * @member {AbstractFilter} + * @member {Shader} */ - this.defaultShader = new AbstractFilter([ - 'precision lowp float;', - 'varying vec2 vTextureCoord;', - 'varying vec4 vColor;', - 'uniform sampler2D uSampler;', - 'void main(void) {', - ' gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;', - '}' - ]); + this.shader = null; // listen for context and update necessary buffers var self = this; @@ -178,6 +169,9 @@ WebGLSpriteBatch.prototype.setupContext = function () { var gl = this.renderer.gl; + // setup default shader + this.shader = new Shader(gl); + // create a couple of buffers this.vertexBuffer = gl.createBuffer(); this.indexBuffer = gl.createBuffer(); @@ -192,21 +186,13 @@ gl.bufferData(gl.ARRAY_BUFFER, this.vertices, gl.DYNAMIC_DRAW); this.currentBlendMode = 99999; - - var shader = new Shader(gl); - - shader.fragmentSrc = this.defaultShader.fragmentSrc; - shader.uniforms = {}; - shader.init(); - - this.defaultShader.shaders[gl.id] = shader; }; /** * */ WebGLSpriteBatch.prototype.begin = function () { - this.shader = this.renderer.shaderManager.defaultShader; + // this.shader = this.renderer.shaderManager.defaultShader; this.start(); }; @@ -483,15 +469,13 @@ gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); - shader = this.defaultShader.shaders[gl.id]; - // this is the same for each shader? var stride = this.vertSize * 4; - gl.vertexAttribPointer(shader.aVertexPosition, 2, gl.FLOAT, false, stride, 0); - gl.vertexAttribPointer(shader.aTextureCoord, 2, gl.FLOAT, false, stride, 2 * 4); + gl.vertexAttribPointer(this.shader.aVertexPosition, 2, gl.FLOAT, false, stride, 0); + gl.vertexAttribPointer(this.shader.aTextureCoord, 2, gl.FLOAT, false, stride, 2 * 4); // color attributes will be interpreted as unsigned bytes and normalized - gl.vertexAttribPointer(shader.aColor, 4, gl.UNSIGNED_BYTE, true, stride, 4 * 4); + gl.vertexAttribPointer(this.shader.aColor, 4, gl.UNSIGNED_BYTE, true, stride, 4 * 4); } // upload the verts to the buffer @@ -521,7 +505,7 @@ nextTexture = sprite.texture.baseTexture; nextBlendMode = sprite.blendMode; - nextShader = sprite.shader || this.defaultShader; + nextShader = sprite.shader || this.shader; blendSwap = currentBlendMode !== nextBlendMode; shaderSwap = currentShader !== nextShader; // should I use uuidS??? @@ -533,23 +517,18 @@ batchSize = 0; currentBaseTexture = nextTexture; - if ( blendSwap ) { + if (blendSwap) { currentBlendMode = nextBlendMode; this.renderer.blendModeManager.setBlendMode( currentBlendMode ); } - if ( shaderSwap ) { + if (shaderSwap) { currentShader = nextShader; - shader = currentShader.shaders[gl.id]; + shader = currentShader.shaders ? currentShader.shaders[gl.id] : shader; if (!shader) { - shader = new Shader(gl); - - shader.fragmentSrc =currentShader.fragmentSrc; - shader.uniforms =currentShader.uniforms; - shader.init(); - + shader = new Shader(gl, null, currentShader.fragmentSrc, currentShader.uniforms); currentShader.shaders[gl.id] = shader; } diff --git a/src/core/textures/BaseTexture.js b/src/core/textures/BaseTexture.js index bc05530..2bf77d4 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -264,13 +264,12 @@ * a source has successfully loaded. * * @private - * @param source {Image|Canvas} the source object of the texture. */ -BaseTexture.prototype._sourceLoaded = function (source) { +BaseTexture.prototype._sourceLoaded = function () { this.hasLoaded = true; - this.width = source.naturalWidth || source.width; - this.height = source.naturalHeight || source.height; + this.width = this.source.naturalWidth || this.source.width; + this.height = this.source.naturalHeight || this.source.height; this.needsUpdate = true; };