diff --git a/src/core/renderers/webgl/filters/AbstractFilter.js b/src/core/renderers/webgl/filters/AbstractFilter.js index fa270fd..7aeed59 100644 --- a/src/core/renderers/webgl/filters/AbstractFilter.js +++ b/src/core/renderers/webgl/filters/AbstractFilter.js @@ -47,14 +47,14 @@ * @member {string[]} * @private */ - this.vertexSrc = vertexSrc; + this.vertexSrc = vertexSrc || DefaultShader.defaultVertexSrc; /** * The code of the frament shader * @member {string[]} * @private */ - this.fragmentSrc = fragmentSrc; + this.fragmentSrc = fragmentSrc || DefaultShader.defaultFragmentSrc; //TODO a reminder - would be cool to have lower res filters as this would give better performance. @@ -65,10 +65,10 @@ AbstractFilter.prototype.constructor = AbstractFilter; module.exports = AbstractFilter; -/* +/* * Grabs a shader from the current renderer * @param renderer {WebGLRenderer} The renderer to retrieve the shader from - * + * */ AbstractFilter.prototype.getShader = function (renderer) { @@ -91,11 +91,11 @@ return shader; }; -/* +/* * Applies the filter * @param renderer {WebGLRenderer} The renderer to retrieve the filter from - * @param input {RenderTarget} - * @param output {RenderTarget} + * @param input {RenderTarget} + * @param output {RenderTarget} * @param clear {boolean} Whether or not we want to clear the outputTarget */ AbstractFilter.prototype.applyFilter = function (renderer, input, output, clear) diff --git a/src/core/renderers/webgl/filters/AbstractFilter.js b/src/core/renderers/webgl/filters/AbstractFilter.js index fa270fd..7aeed59 100644 --- a/src/core/renderers/webgl/filters/AbstractFilter.js +++ b/src/core/renderers/webgl/filters/AbstractFilter.js @@ -47,14 +47,14 @@ * @member {string[]} * @private */ - this.vertexSrc = vertexSrc; + this.vertexSrc = vertexSrc || DefaultShader.defaultVertexSrc; /** * The code of the frament shader * @member {string[]} * @private */ - this.fragmentSrc = fragmentSrc; + this.fragmentSrc = fragmentSrc || DefaultShader.defaultFragmentSrc; //TODO a reminder - would be cool to have lower res filters as this would give better performance. @@ -65,10 +65,10 @@ AbstractFilter.prototype.constructor = AbstractFilter; module.exports = AbstractFilter; -/* +/* * Grabs a shader from the current renderer * @param renderer {WebGLRenderer} The renderer to retrieve the shader from - * + * */ AbstractFilter.prototype.getShader = function (renderer) { @@ -91,11 +91,11 @@ return shader; }; -/* +/* * Applies the filter * @param renderer {WebGLRenderer} The renderer to retrieve the filter from - * @param input {RenderTarget} - * @param output {RenderTarget} + * @param input {RenderTarget} + * @param output {RenderTarget} * @param clear {boolean} Whether or not we want to clear the outputTarget */ AbstractFilter.prototype.applyFilter = function (renderer, input, output, clear) diff --git a/src/core/renderers/webgl/shaders/TextureShader.js b/src/core/renderers/webgl/shaders/TextureShader.js index 000463f..ae2a7eb 100644 --- a/src/core/renderers/webgl/shaders/TextureShader.js +++ b/src/core/renderers/webgl/shaders/TextureShader.js @@ -47,40 +47,13 @@ * The vertex shader. * @member {Array} */ - vertexSrc = vertexSrc || [ - 'precision lowp float;', - 'attribute vec2 aVertexPosition;', - 'attribute vec2 aTextureCoord;', - 'attribute vec4 aColor;', - - 'uniform mat3 projectionMatrix;', - - 'varying vec2 vTextureCoord;', - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vTextureCoord = aTextureCoord;', - ' vColor = vec4(aColor.rgb * aColor.a, aColor.a);', - '}' - ].join('\n'); + vertexSrc = vertexSrc || TextureShader.defaultVertexSrc; /** * The fragment shader. * @member {Array} */ - fragmentSrc = fragmentSrc || [ - 'precision lowp float;', - - 'varying vec2 vTextureCoord;', - 'varying vec4 vColor;', - - 'uniform sampler2D uSampler;', - - 'void main(void){', - ' gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;', - '}' - ].join('\n'); + fragmentSrc = fragmentSrc || TextureShader.defaultFragmentSrc; Shader.call(this, shaderManager, vertexSrc, fragmentSrc, uniforms, attributes); } @@ -89,3 +62,34 @@ TextureShader.prototype = Object.create(Shader.prototype); TextureShader.prototype.constructor = TextureShader; module.exports = TextureShader; + +TextureShader.defaultVertexSrc = [ + 'precision lowp float;', + 'attribute vec2 aVertexPosition;', + 'attribute vec2 aTextureCoord;', + 'attribute vec4 aColor;', + + 'uniform mat3 projectionMatrix;', + + 'varying vec2 vTextureCoord;', + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vTextureCoord = aTextureCoord;', + ' vColor = vec4(aColor.rgb * aColor.a, aColor.a);', + '}' +].join('\n'); + +TextureShader.defaultFragmentSrc = [ + 'precision lowp float;', + + 'varying vec2 vTextureCoord;', + 'varying vec4 vColor;', + + 'uniform sampler2D uSampler;', + + 'void main(void){', + ' gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;', + '}' +].join('\n'); diff --git a/src/core/renderers/webgl/filters/AbstractFilter.js b/src/core/renderers/webgl/filters/AbstractFilter.js index fa270fd..7aeed59 100644 --- a/src/core/renderers/webgl/filters/AbstractFilter.js +++ b/src/core/renderers/webgl/filters/AbstractFilter.js @@ -47,14 +47,14 @@ * @member {string[]} * @private */ - this.vertexSrc = vertexSrc; + this.vertexSrc = vertexSrc || DefaultShader.defaultVertexSrc; /** * The code of the frament shader * @member {string[]} * @private */ - this.fragmentSrc = fragmentSrc; + this.fragmentSrc = fragmentSrc || DefaultShader.defaultFragmentSrc; //TODO a reminder - would be cool to have lower res filters as this would give better performance. @@ -65,10 +65,10 @@ AbstractFilter.prototype.constructor = AbstractFilter; module.exports = AbstractFilter; -/* +/* * Grabs a shader from the current renderer * @param renderer {WebGLRenderer} The renderer to retrieve the shader from - * + * */ AbstractFilter.prototype.getShader = function (renderer) { @@ -91,11 +91,11 @@ return shader; }; -/* +/* * Applies the filter * @param renderer {WebGLRenderer} The renderer to retrieve the filter from - * @param input {RenderTarget} - * @param output {RenderTarget} + * @param input {RenderTarget} + * @param output {RenderTarget} * @param clear {boolean} Whether or not we want to clear the outputTarget */ AbstractFilter.prototype.applyFilter = function (renderer, input, output, clear) diff --git a/src/core/renderers/webgl/shaders/TextureShader.js b/src/core/renderers/webgl/shaders/TextureShader.js index 000463f..ae2a7eb 100644 --- a/src/core/renderers/webgl/shaders/TextureShader.js +++ b/src/core/renderers/webgl/shaders/TextureShader.js @@ -47,40 +47,13 @@ * The vertex shader. * @member {Array} */ - vertexSrc = vertexSrc || [ - 'precision lowp float;', - 'attribute vec2 aVertexPosition;', - 'attribute vec2 aTextureCoord;', - 'attribute vec4 aColor;', - - 'uniform mat3 projectionMatrix;', - - 'varying vec2 vTextureCoord;', - 'varying vec4 vColor;', - - 'void main(void){', - ' gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', - ' vTextureCoord = aTextureCoord;', - ' vColor = vec4(aColor.rgb * aColor.a, aColor.a);', - '}' - ].join('\n'); + vertexSrc = vertexSrc || TextureShader.defaultVertexSrc; /** * The fragment shader. * @member {Array} */ - fragmentSrc = fragmentSrc || [ - 'precision lowp float;', - - 'varying vec2 vTextureCoord;', - 'varying vec4 vColor;', - - 'uniform sampler2D uSampler;', - - 'void main(void){', - ' gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;', - '}' - ].join('\n'); + fragmentSrc = fragmentSrc || TextureShader.defaultFragmentSrc; Shader.call(this, shaderManager, vertexSrc, fragmentSrc, uniforms, attributes); } @@ -89,3 +62,34 @@ TextureShader.prototype = Object.create(Shader.prototype); TextureShader.prototype.constructor = TextureShader; module.exports = TextureShader; + +TextureShader.defaultVertexSrc = [ + 'precision lowp float;', + 'attribute vec2 aVertexPosition;', + 'attribute vec2 aTextureCoord;', + 'attribute vec4 aColor;', + + 'uniform mat3 projectionMatrix;', + + 'varying vec2 vTextureCoord;', + 'varying vec4 vColor;', + + 'void main(void){', + ' gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', + ' vTextureCoord = aTextureCoord;', + ' vColor = vec4(aColor.rgb * aColor.a, aColor.a);', + '}' +].join('\n'); + +TextureShader.defaultFragmentSrc = [ + 'precision lowp float;', + + 'varying vec2 vTextureCoord;', + 'varying vec4 vColor;', + + 'uniform sampler2D uSampler;', + + 'void main(void){', + ' gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;', + '}' +].join('\n'); diff --git a/src/core/sprites/webgl/SpriteRenderer.js b/src/core/sprites/webgl/SpriteRenderer.js index 9b601b7..a5f40d7 100644 --- a/src/core/sprites/webgl/SpriteRenderer.js +++ b/src/core/sprites/webgl/SpriteRenderer.js @@ -67,7 +67,7 @@ this.positions = new Float32Array(this.vertices); /** - * Holds the color components + * Holds the color components * * @member {Uint32Array} */ @@ -390,8 +390,11 @@ if (!shader) { - shader = new Shader(this.renderer.shaderManager, null, currentShader.fragmentSrc, currentShader.uniforms); - currentShader.shaders[gl.id] = shader; + shader = new Shader(this.renderer.shaderManager, currentShader.vertexSrc, currentShader.fragmentSrc, currentShader.uniforms); + + if (currentShader.shaders) { + currentShader.shaders[gl.id] = shader; + } } // set shader function???