diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/extras/webgl/tilingSprite.frag b/src/extras/webgl/tilingSprite.frag index 5da42e1..cad664a 100644 --- a/src/extras/webgl/tilingSprite.frag +++ b/src/extras/webgl/tilingSprite.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/extras/webgl/tilingSprite.frag b/src/extras/webgl/tilingSprite.frag index 5da42e1..cad664a 100644 --- a/src/extras/webgl/tilingSprite.frag +++ b/src/extras/webgl/tilingSprite.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/extras/webgl/tilingSprite.vert b/src/extras/webgl/tilingSprite.vert index 571f1f7..7589b04 100644 --- a/src/extras/webgl/tilingSprite.vert +++ b/src/extras/webgl/tilingSprite.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/extras/webgl/tilingSprite.frag b/src/extras/webgl/tilingSprite.frag index 5da42e1..cad664a 100644 --- a/src/extras/webgl/tilingSprite.frag +++ b/src/extras/webgl/tilingSprite.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/extras/webgl/tilingSprite.vert b/src/extras/webgl/tilingSprite.vert index 571f1f7..7589b04 100644 --- a/src/extras/webgl/tilingSprite.vert +++ b/src/extras/webgl/tilingSprite.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/FXAA/FXAA.frag b/src/filters/FXAA/FXAA.frag index 4dd287d..bb6b18b 100755 --- a/src/filters/FXAA/FXAA.frag +++ b/src/filters/FXAA/FXAA.frag @@ -1,6 +1,3 @@ -precision %PRECISION% float; - - /** Basic FXAA implementation based on the code on geeks3d.com with the modification that the texture2DLod stuff was removed since it's diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/extras/webgl/tilingSprite.frag b/src/extras/webgl/tilingSprite.frag index 5da42e1..cad664a 100644 --- a/src/extras/webgl/tilingSprite.frag +++ b/src/extras/webgl/tilingSprite.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/extras/webgl/tilingSprite.vert b/src/extras/webgl/tilingSprite.vert index 571f1f7..7589b04 100644 --- a/src/extras/webgl/tilingSprite.vert +++ b/src/extras/webgl/tilingSprite.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/FXAA/FXAA.frag b/src/filters/FXAA/FXAA.frag index 4dd287d..bb6b18b 100755 --- a/src/filters/FXAA/FXAA.frag +++ b/src/filters/FXAA/FXAA.frag @@ -1,6 +1,3 @@ -precision %PRECISION% float; - - /** Basic FXAA implementation based on the code on geeks3d.com with the modification that the texture2DLod stuff was removed since it's diff --git a/src/filters/FXAA/FXAA.vert b/src/filters/FXAA/FXAA.vert index b0c1860..9d1db9b 100755 --- a/src/filters/FXAA/FXAA.vert +++ b/src/filters/FXAA/FXAA.vert @@ -1,6 +1,3 @@ - -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/extras/webgl/tilingSprite.frag b/src/extras/webgl/tilingSprite.frag index 5da42e1..cad664a 100644 --- a/src/extras/webgl/tilingSprite.frag +++ b/src/extras/webgl/tilingSprite.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/extras/webgl/tilingSprite.vert b/src/extras/webgl/tilingSprite.vert index 571f1f7..7589b04 100644 --- a/src/extras/webgl/tilingSprite.vert +++ b/src/extras/webgl/tilingSprite.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/FXAA/FXAA.frag b/src/filters/FXAA/FXAA.frag index 4dd287d..bb6b18b 100755 --- a/src/filters/FXAA/FXAA.frag +++ b/src/filters/FXAA/FXAA.frag @@ -1,6 +1,3 @@ -precision %PRECISION% float; - - /** Basic FXAA implementation based on the code on geeks3d.com with the modification that the texture2DLod stuff was removed since it's diff --git a/src/filters/FXAA/FXAA.vert b/src/filters/FXAA/FXAA.vert index b0c1860..9d1db9b 100755 --- a/src/filters/FXAA/FXAA.vert +++ b/src/filters/FXAA/FXAA.vert @@ -1,6 +1,3 @@ - -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/blur/generateBlurFragSource.js b/src/filters/blur/generateBlurFragSource.js index 10610a1..480ff4d 100644 --- a/src/filters/blur/generateBlurFragSource.js +++ b/src/filters/blur/generateBlurFragSource.js @@ -8,9 +8,6 @@ }; var fragTemplate = [ - - 'precision mediump float;', - 'varying vec2 vBlurTexCoords[%size%];', 'uniform sampler2D uSampler;', diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/extras/webgl/tilingSprite.frag b/src/extras/webgl/tilingSprite.frag index 5da42e1..cad664a 100644 --- a/src/extras/webgl/tilingSprite.frag +++ b/src/extras/webgl/tilingSprite.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/extras/webgl/tilingSprite.vert b/src/extras/webgl/tilingSprite.vert index 571f1f7..7589b04 100644 --- a/src/extras/webgl/tilingSprite.vert +++ b/src/extras/webgl/tilingSprite.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/FXAA/FXAA.frag b/src/filters/FXAA/FXAA.frag index 4dd287d..bb6b18b 100755 --- a/src/filters/FXAA/FXAA.frag +++ b/src/filters/FXAA/FXAA.frag @@ -1,6 +1,3 @@ -precision %PRECISION% float; - - /** Basic FXAA implementation based on the code on geeks3d.com with the modification that the texture2DLod stuff was removed since it's diff --git a/src/filters/FXAA/FXAA.vert b/src/filters/FXAA/FXAA.vert index b0c1860..9d1db9b 100755 --- a/src/filters/FXAA/FXAA.vert +++ b/src/filters/FXAA/FXAA.vert @@ -1,6 +1,3 @@ - -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/blur/generateBlurFragSource.js b/src/filters/blur/generateBlurFragSource.js index 10610a1..480ff4d 100644 --- a/src/filters/blur/generateBlurFragSource.js +++ b/src/filters/blur/generateBlurFragSource.js @@ -8,9 +8,6 @@ }; var fragTemplate = [ - - 'precision mediump float;', - 'varying vec2 vBlurTexCoords[%size%];', 'uniform sampler2D uSampler;', diff --git a/src/filters/colormatrix/colorMatrix.frag b/src/filters/colormatrix/colorMatrix.frag index 166857b..3aaf2b3 100644 --- a/src/filters/colormatrix/colorMatrix.frag +++ b/src/filters/colormatrix/colorMatrix.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; uniform float m[20]; diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/extras/webgl/tilingSprite.frag b/src/extras/webgl/tilingSprite.frag index 5da42e1..cad664a 100644 --- a/src/extras/webgl/tilingSprite.frag +++ b/src/extras/webgl/tilingSprite.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/extras/webgl/tilingSprite.vert b/src/extras/webgl/tilingSprite.vert index 571f1f7..7589b04 100644 --- a/src/extras/webgl/tilingSprite.vert +++ b/src/extras/webgl/tilingSprite.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/FXAA/FXAA.frag b/src/filters/FXAA/FXAA.frag index 4dd287d..bb6b18b 100755 --- a/src/filters/FXAA/FXAA.frag +++ b/src/filters/FXAA/FXAA.frag @@ -1,6 +1,3 @@ -precision %PRECISION% float; - - /** Basic FXAA implementation based on the code on geeks3d.com with the modification that the texture2DLod stuff was removed since it's diff --git a/src/filters/FXAA/FXAA.vert b/src/filters/FXAA/FXAA.vert index b0c1860..9d1db9b 100755 --- a/src/filters/FXAA/FXAA.vert +++ b/src/filters/FXAA/FXAA.vert @@ -1,6 +1,3 @@ - -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/blur/generateBlurFragSource.js b/src/filters/blur/generateBlurFragSource.js index 10610a1..480ff4d 100644 --- a/src/filters/blur/generateBlurFragSource.js +++ b/src/filters/blur/generateBlurFragSource.js @@ -8,9 +8,6 @@ }; var fragTemplate = [ - - 'precision mediump float;', - 'varying vec2 vBlurTexCoords[%size%];', 'uniform sampler2D uSampler;', diff --git a/src/filters/colormatrix/colorMatrix.frag b/src/filters/colormatrix/colorMatrix.frag index 166857b..3aaf2b3 100644 --- a/src/filters/colormatrix/colorMatrix.frag +++ b/src/filters/colormatrix/colorMatrix.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; uniform float m[20]; diff --git a/src/filters/colormatrix/colorMatrix.vert b/src/filters/colormatrix/colorMatrix.vert index 87b6f2a..787220d 100644 --- a/src/filters/colormatrix/colorMatrix.vert +++ b/src/filters/colormatrix/colorMatrix.vert @@ -1,5 +1,3 @@ -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; @@ -9,4 +7,4 @@ void main(void){ gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); vTextureCoord = aTextureCoord; -} \ No newline at end of file +} diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/extras/webgl/tilingSprite.frag b/src/extras/webgl/tilingSprite.frag index 5da42e1..cad664a 100644 --- a/src/extras/webgl/tilingSprite.frag +++ b/src/extras/webgl/tilingSprite.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/extras/webgl/tilingSprite.vert b/src/extras/webgl/tilingSprite.vert index 571f1f7..7589b04 100644 --- a/src/extras/webgl/tilingSprite.vert +++ b/src/extras/webgl/tilingSprite.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/FXAA/FXAA.frag b/src/filters/FXAA/FXAA.frag index 4dd287d..bb6b18b 100755 --- a/src/filters/FXAA/FXAA.frag +++ b/src/filters/FXAA/FXAA.frag @@ -1,6 +1,3 @@ -precision %PRECISION% float; - - /** Basic FXAA implementation based on the code on geeks3d.com with the modification that the texture2DLod stuff was removed since it's diff --git a/src/filters/FXAA/FXAA.vert b/src/filters/FXAA/FXAA.vert index b0c1860..9d1db9b 100755 --- a/src/filters/FXAA/FXAA.vert +++ b/src/filters/FXAA/FXAA.vert @@ -1,6 +1,3 @@ - -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/blur/generateBlurFragSource.js b/src/filters/blur/generateBlurFragSource.js index 10610a1..480ff4d 100644 --- a/src/filters/blur/generateBlurFragSource.js +++ b/src/filters/blur/generateBlurFragSource.js @@ -8,9 +8,6 @@ }; var fragTemplate = [ - - 'precision mediump float;', - 'varying vec2 vBlurTexCoords[%size%];', 'uniform sampler2D uSampler;', diff --git a/src/filters/colormatrix/colorMatrix.frag b/src/filters/colormatrix/colorMatrix.frag index 166857b..3aaf2b3 100644 --- a/src/filters/colormatrix/colorMatrix.frag +++ b/src/filters/colormatrix/colorMatrix.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; uniform float m[20]; diff --git a/src/filters/colormatrix/colorMatrix.vert b/src/filters/colormatrix/colorMatrix.vert index 87b6f2a..787220d 100644 --- a/src/filters/colormatrix/colorMatrix.vert +++ b/src/filters/colormatrix/colorMatrix.vert @@ -1,5 +1,3 @@ -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; @@ -9,4 +7,4 @@ void main(void){ gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); vTextureCoord = aTextureCoord; -} \ No newline at end of file +} diff --git a/src/filters/displacement/displacement.frag b/src/filters/displacement/displacement.frag index 3850c1a..5f3518a 100644 --- a/src/filters/displacement/displacement.frag +++ b/src/filters/displacement/displacement.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vMapCoord; varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/extras/webgl/tilingSprite.frag b/src/extras/webgl/tilingSprite.frag index 5da42e1..cad664a 100644 --- a/src/extras/webgl/tilingSprite.frag +++ b/src/extras/webgl/tilingSprite.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/extras/webgl/tilingSprite.vert b/src/extras/webgl/tilingSprite.vert index 571f1f7..7589b04 100644 --- a/src/extras/webgl/tilingSprite.vert +++ b/src/extras/webgl/tilingSprite.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/FXAA/FXAA.frag b/src/filters/FXAA/FXAA.frag index 4dd287d..bb6b18b 100755 --- a/src/filters/FXAA/FXAA.frag +++ b/src/filters/FXAA/FXAA.frag @@ -1,6 +1,3 @@ -precision %PRECISION% float; - - /** Basic FXAA implementation based on the code on geeks3d.com with the modification that the texture2DLod stuff was removed since it's diff --git a/src/filters/FXAA/FXAA.vert b/src/filters/FXAA/FXAA.vert index b0c1860..9d1db9b 100755 --- a/src/filters/FXAA/FXAA.vert +++ b/src/filters/FXAA/FXAA.vert @@ -1,6 +1,3 @@ - -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/blur/generateBlurFragSource.js b/src/filters/blur/generateBlurFragSource.js index 10610a1..480ff4d 100644 --- a/src/filters/blur/generateBlurFragSource.js +++ b/src/filters/blur/generateBlurFragSource.js @@ -8,9 +8,6 @@ }; var fragTemplate = [ - - 'precision mediump float;', - 'varying vec2 vBlurTexCoords[%size%];', 'uniform sampler2D uSampler;', diff --git a/src/filters/colormatrix/colorMatrix.frag b/src/filters/colormatrix/colorMatrix.frag index 166857b..3aaf2b3 100644 --- a/src/filters/colormatrix/colorMatrix.frag +++ b/src/filters/colormatrix/colorMatrix.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; uniform float m[20]; diff --git a/src/filters/colormatrix/colorMatrix.vert b/src/filters/colormatrix/colorMatrix.vert index 87b6f2a..787220d 100644 --- a/src/filters/colormatrix/colorMatrix.vert +++ b/src/filters/colormatrix/colorMatrix.vert @@ -1,5 +1,3 @@ -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; @@ -9,4 +7,4 @@ void main(void){ gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); vTextureCoord = aTextureCoord; -} \ No newline at end of file +} diff --git a/src/filters/displacement/displacement.frag b/src/filters/displacement/displacement.frag index 3850c1a..5f3518a 100644 --- a/src/filters/displacement/displacement.frag +++ b/src/filters/displacement/displacement.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vMapCoord; varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/filters/godray/godray.frag b/src/filters/godray/godray.frag index b5a63b4..3dbd533 100644 --- a/src/filters/godray/godray.frag +++ b/src/filters/godray/godray.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform float exposure; uniform float decay; @@ -16,7 +14,7 @@ vec2 textCoo = vTextureCoord; deltaTextCoord *= 1.0 / float(NUM_SAMPLES) * density; float illuminationDecay = 1.0; - + for(int i=0; i < NUM_SAMPLES ; i++) { textCoo -= deltaTextCoord; @@ -28,6 +26,6 @@ illuminationDecay *= decay; } - + gl_FragColor *= exposure; -} \ No newline at end of file +} diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/extras/webgl/tilingSprite.frag b/src/extras/webgl/tilingSprite.frag index 5da42e1..cad664a 100644 --- a/src/extras/webgl/tilingSprite.frag +++ b/src/extras/webgl/tilingSprite.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/extras/webgl/tilingSprite.vert b/src/extras/webgl/tilingSprite.vert index 571f1f7..7589b04 100644 --- a/src/extras/webgl/tilingSprite.vert +++ b/src/extras/webgl/tilingSprite.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/FXAA/FXAA.frag b/src/filters/FXAA/FXAA.frag index 4dd287d..bb6b18b 100755 --- a/src/filters/FXAA/FXAA.frag +++ b/src/filters/FXAA/FXAA.frag @@ -1,6 +1,3 @@ -precision %PRECISION% float; - - /** Basic FXAA implementation based on the code on geeks3d.com with the modification that the texture2DLod stuff was removed since it's diff --git a/src/filters/FXAA/FXAA.vert b/src/filters/FXAA/FXAA.vert index b0c1860..9d1db9b 100755 --- a/src/filters/FXAA/FXAA.vert +++ b/src/filters/FXAA/FXAA.vert @@ -1,6 +1,3 @@ - -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/blur/generateBlurFragSource.js b/src/filters/blur/generateBlurFragSource.js index 10610a1..480ff4d 100644 --- a/src/filters/blur/generateBlurFragSource.js +++ b/src/filters/blur/generateBlurFragSource.js @@ -8,9 +8,6 @@ }; var fragTemplate = [ - - 'precision mediump float;', - 'varying vec2 vBlurTexCoords[%size%];', 'uniform sampler2D uSampler;', diff --git a/src/filters/colormatrix/colorMatrix.frag b/src/filters/colormatrix/colorMatrix.frag index 166857b..3aaf2b3 100644 --- a/src/filters/colormatrix/colorMatrix.frag +++ b/src/filters/colormatrix/colorMatrix.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; uniform float m[20]; diff --git a/src/filters/colormatrix/colorMatrix.vert b/src/filters/colormatrix/colorMatrix.vert index 87b6f2a..787220d 100644 --- a/src/filters/colormatrix/colorMatrix.vert +++ b/src/filters/colormatrix/colorMatrix.vert @@ -1,5 +1,3 @@ -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; @@ -9,4 +7,4 @@ void main(void){ gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); vTextureCoord = aTextureCoord; -} \ No newline at end of file +} diff --git a/src/filters/displacement/displacement.frag b/src/filters/displacement/displacement.frag index 3850c1a..5f3518a 100644 --- a/src/filters/displacement/displacement.frag +++ b/src/filters/displacement/displacement.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vMapCoord; varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/filters/godray/godray.frag b/src/filters/godray/godray.frag index b5a63b4..3dbd533 100644 --- a/src/filters/godray/godray.frag +++ b/src/filters/godray/godray.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform float exposure; uniform float decay; @@ -16,7 +14,7 @@ vec2 textCoo = vTextureCoord; deltaTextCoord *= 1.0 / float(NUM_SAMPLES) * density; float illuminationDecay = 1.0; - + for(int i=0; i < NUM_SAMPLES ; i++) { textCoo -= deltaTextCoord; @@ -28,6 +26,6 @@ illuminationDecay *= decay; } - + gl_FragColor *= exposure; -} \ No newline at end of file +} diff --git a/src/filters/gray/gray.frag b/src/filters/gray/gray.frag index 8bd3a3b..2a1d3b1 100644 --- a/src/filters/gray/gray.frag +++ b/src/filters/gray/gray.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/extras/webgl/tilingSprite.frag b/src/extras/webgl/tilingSprite.frag index 5da42e1..cad664a 100644 --- a/src/extras/webgl/tilingSprite.frag +++ b/src/extras/webgl/tilingSprite.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/extras/webgl/tilingSprite.vert b/src/extras/webgl/tilingSprite.vert index 571f1f7..7589b04 100644 --- a/src/extras/webgl/tilingSprite.vert +++ b/src/extras/webgl/tilingSprite.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/FXAA/FXAA.frag b/src/filters/FXAA/FXAA.frag index 4dd287d..bb6b18b 100755 --- a/src/filters/FXAA/FXAA.frag +++ b/src/filters/FXAA/FXAA.frag @@ -1,6 +1,3 @@ -precision %PRECISION% float; - - /** Basic FXAA implementation based on the code on geeks3d.com with the modification that the texture2DLod stuff was removed since it's diff --git a/src/filters/FXAA/FXAA.vert b/src/filters/FXAA/FXAA.vert index b0c1860..9d1db9b 100755 --- a/src/filters/FXAA/FXAA.vert +++ b/src/filters/FXAA/FXAA.vert @@ -1,6 +1,3 @@ - -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/blur/generateBlurFragSource.js b/src/filters/blur/generateBlurFragSource.js index 10610a1..480ff4d 100644 --- a/src/filters/blur/generateBlurFragSource.js +++ b/src/filters/blur/generateBlurFragSource.js @@ -8,9 +8,6 @@ }; var fragTemplate = [ - - 'precision mediump float;', - 'varying vec2 vBlurTexCoords[%size%];', 'uniform sampler2D uSampler;', diff --git a/src/filters/colormatrix/colorMatrix.frag b/src/filters/colormatrix/colorMatrix.frag index 166857b..3aaf2b3 100644 --- a/src/filters/colormatrix/colorMatrix.frag +++ b/src/filters/colormatrix/colorMatrix.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; uniform float m[20]; diff --git a/src/filters/colormatrix/colorMatrix.vert b/src/filters/colormatrix/colorMatrix.vert index 87b6f2a..787220d 100644 --- a/src/filters/colormatrix/colorMatrix.vert +++ b/src/filters/colormatrix/colorMatrix.vert @@ -1,5 +1,3 @@ -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; @@ -9,4 +7,4 @@ void main(void){ gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); vTextureCoord = aTextureCoord; -} \ No newline at end of file +} diff --git a/src/filters/displacement/displacement.frag b/src/filters/displacement/displacement.frag index 3850c1a..5f3518a 100644 --- a/src/filters/displacement/displacement.frag +++ b/src/filters/displacement/displacement.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vMapCoord; varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/filters/godray/godray.frag b/src/filters/godray/godray.frag index b5a63b4..3dbd533 100644 --- a/src/filters/godray/godray.frag +++ b/src/filters/godray/godray.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform float exposure; uniform float decay; @@ -16,7 +14,7 @@ vec2 textCoo = vTextureCoord; deltaTextCoord *= 1.0 / float(NUM_SAMPLES) * density; float illuminationDecay = 1.0; - + for(int i=0; i < NUM_SAMPLES ; i++) { textCoo -= deltaTextCoord; @@ -28,6 +26,6 @@ illuminationDecay *= decay; } - + gl_FragColor *= exposure; -} \ No newline at end of file +} diff --git a/src/filters/gray/gray.frag b/src/filters/gray/gray.frag index 8bd3a3b..2a1d3b1 100644 --- a/src/filters/gray/gray.frag +++ b/src/filters/gray/gray.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; diff --git a/src/filters/gray/gray.vert b/src/filters/gray/gray.vert index 3df85a3..787220d 100644 --- a/src/filters/gray/gray.vert +++ b/src/filters/gray/gray.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/extras/webgl/tilingSprite.frag b/src/extras/webgl/tilingSprite.frag index 5da42e1..cad664a 100644 --- a/src/extras/webgl/tilingSprite.frag +++ b/src/extras/webgl/tilingSprite.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/extras/webgl/tilingSprite.vert b/src/extras/webgl/tilingSprite.vert index 571f1f7..7589b04 100644 --- a/src/extras/webgl/tilingSprite.vert +++ b/src/extras/webgl/tilingSprite.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/FXAA/FXAA.frag b/src/filters/FXAA/FXAA.frag index 4dd287d..bb6b18b 100755 --- a/src/filters/FXAA/FXAA.frag +++ b/src/filters/FXAA/FXAA.frag @@ -1,6 +1,3 @@ -precision %PRECISION% float; - - /** Basic FXAA implementation based on the code on geeks3d.com with the modification that the texture2DLod stuff was removed since it's diff --git a/src/filters/FXAA/FXAA.vert b/src/filters/FXAA/FXAA.vert index b0c1860..9d1db9b 100755 --- a/src/filters/FXAA/FXAA.vert +++ b/src/filters/FXAA/FXAA.vert @@ -1,6 +1,3 @@ - -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/blur/generateBlurFragSource.js b/src/filters/blur/generateBlurFragSource.js index 10610a1..480ff4d 100644 --- a/src/filters/blur/generateBlurFragSource.js +++ b/src/filters/blur/generateBlurFragSource.js @@ -8,9 +8,6 @@ }; var fragTemplate = [ - - 'precision mediump float;', - 'varying vec2 vBlurTexCoords[%size%];', 'uniform sampler2D uSampler;', diff --git a/src/filters/colormatrix/colorMatrix.frag b/src/filters/colormatrix/colorMatrix.frag index 166857b..3aaf2b3 100644 --- a/src/filters/colormatrix/colorMatrix.frag +++ b/src/filters/colormatrix/colorMatrix.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; uniform float m[20]; diff --git a/src/filters/colormatrix/colorMatrix.vert b/src/filters/colormatrix/colorMatrix.vert index 87b6f2a..787220d 100644 --- a/src/filters/colormatrix/colorMatrix.vert +++ b/src/filters/colormatrix/colorMatrix.vert @@ -1,5 +1,3 @@ -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; @@ -9,4 +7,4 @@ void main(void){ gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); vTextureCoord = aTextureCoord; -} \ No newline at end of file +} diff --git a/src/filters/displacement/displacement.frag b/src/filters/displacement/displacement.frag index 3850c1a..5f3518a 100644 --- a/src/filters/displacement/displacement.frag +++ b/src/filters/displacement/displacement.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vMapCoord; varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/filters/godray/godray.frag b/src/filters/godray/godray.frag index b5a63b4..3dbd533 100644 --- a/src/filters/godray/godray.frag +++ b/src/filters/godray/godray.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform float exposure; uniform float decay; @@ -16,7 +14,7 @@ vec2 textCoo = vTextureCoord; deltaTextCoord *= 1.0 / float(NUM_SAMPLES) * density; float illuminationDecay = 1.0; - + for(int i=0; i < NUM_SAMPLES ; i++) { textCoo -= deltaTextCoord; @@ -28,6 +26,6 @@ illuminationDecay *= decay; } - + gl_FragColor *= exposure; -} \ No newline at end of file +} diff --git a/src/filters/gray/gray.frag b/src/filters/gray/gray.frag index 8bd3a3b..2a1d3b1 100644 --- a/src/filters/gray/gray.frag +++ b/src/filters/gray/gray.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; diff --git a/src/filters/gray/gray.vert b/src/filters/gray/gray.vert index 3df85a3..787220d 100644 --- a/src/filters/gray/gray.vert +++ b/src/filters/gray/gray.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; diff --git a/src/filters/twist/twist.frag b/src/filters/twist/twist.frag index 0ef65a3..22e1b00 100644 --- a/src/filters/twist/twist.frag +++ b/src/filters/twist/twist.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/extras/webgl/tilingSprite.frag b/src/extras/webgl/tilingSprite.frag index 5da42e1..cad664a 100644 --- a/src/extras/webgl/tilingSprite.frag +++ b/src/extras/webgl/tilingSprite.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/extras/webgl/tilingSprite.vert b/src/extras/webgl/tilingSprite.vert index 571f1f7..7589b04 100644 --- a/src/extras/webgl/tilingSprite.vert +++ b/src/extras/webgl/tilingSprite.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/FXAA/FXAA.frag b/src/filters/FXAA/FXAA.frag index 4dd287d..bb6b18b 100755 --- a/src/filters/FXAA/FXAA.frag +++ b/src/filters/FXAA/FXAA.frag @@ -1,6 +1,3 @@ -precision %PRECISION% float; - - /** Basic FXAA implementation based on the code on geeks3d.com with the modification that the texture2DLod stuff was removed since it's diff --git a/src/filters/FXAA/FXAA.vert b/src/filters/FXAA/FXAA.vert index b0c1860..9d1db9b 100755 --- a/src/filters/FXAA/FXAA.vert +++ b/src/filters/FXAA/FXAA.vert @@ -1,6 +1,3 @@ - -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/blur/generateBlurFragSource.js b/src/filters/blur/generateBlurFragSource.js index 10610a1..480ff4d 100644 --- a/src/filters/blur/generateBlurFragSource.js +++ b/src/filters/blur/generateBlurFragSource.js @@ -8,9 +8,6 @@ }; var fragTemplate = [ - - 'precision mediump float;', - 'varying vec2 vBlurTexCoords[%size%];', 'uniform sampler2D uSampler;', diff --git a/src/filters/colormatrix/colorMatrix.frag b/src/filters/colormatrix/colorMatrix.frag index 166857b..3aaf2b3 100644 --- a/src/filters/colormatrix/colorMatrix.frag +++ b/src/filters/colormatrix/colorMatrix.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; uniform float m[20]; diff --git a/src/filters/colormatrix/colorMatrix.vert b/src/filters/colormatrix/colorMatrix.vert index 87b6f2a..787220d 100644 --- a/src/filters/colormatrix/colorMatrix.vert +++ b/src/filters/colormatrix/colorMatrix.vert @@ -1,5 +1,3 @@ -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; @@ -9,4 +7,4 @@ void main(void){ gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); vTextureCoord = aTextureCoord; -} \ No newline at end of file +} diff --git a/src/filters/displacement/displacement.frag b/src/filters/displacement/displacement.frag index 3850c1a..5f3518a 100644 --- a/src/filters/displacement/displacement.frag +++ b/src/filters/displacement/displacement.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vMapCoord; varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/filters/godray/godray.frag b/src/filters/godray/godray.frag index b5a63b4..3dbd533 100644 --- a/src/filters/godray/godray.frag +++ b/src/filters/godray/godray.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform float exposure; uniform float decay; @@ -16,7 +14,7 @@ vec2 textCoo = vTextureCoord; deltaTextCoord *= 1.0 / float(NUM_SAMPLES) * density; float illuminationDecay = 1.0; - + for(int i=0; i < NUM_SAMPLES ; i++) { textCoo -= deltaTextCoord; @@ -28,6 +26,6 @@ illuminationDecay *= decay; } - + gl_FragColor *= exposure; -} \ No newline at end of file +} diff --git a/src/filters/gray/gray.frag b/src/filters/gray/gray.frag index 8bd3a3b..2a1d3b1 100644 --- a/src/filters/gray/gray.frag +++ b/src/filters/gray/gray.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; diff --git a/src/filters/gray/gray.vert b/src/filters/gray/gray.vert index 3df85a3..787220d 100644 --- a/src/filters/gray/gray.vert +++ b/src/filters/gray/gray.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; diff --git a/src/filters/twist/twist.frag b/src/filters/twist/twist.frag index 0ef65a3..22e1b00 100644 --- a/src/filters/twist/twist.frag +++ b/src/filters/twist/twist.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; diff --git a/src/mesh/webgl/MeshShader.js b/src/mesh/webgl/MeshShader.js index 1e5c2f2..dda3e46 100644 --- a/src/mesh/webgl/MeshShader.js +++ b/src/mesh/webgl/MeshShader.js @@ -1,5 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader, - Const = require('../../core/const'); +var Shader = require('../../core/Shader'); /** * @class @@ -13,7 +12,6 @@ gl, // vertex shader [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -26,10 +24,8 @@ ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', ' vTextureCoord = aTextureCoord;', '}' - ].join('\n').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), + ].join('\n'), [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'uniform float alpha;', @@ -39,7 +35,7 @@ ' gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;', // ' gl_FragColor = vec4(1.0);', '}' - ].join('\n').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + ].join('\n') ); } diff --git a/src/core/Shader.js b/src/core/Shader.js new file mode 100644 index 0000000..5022a73 --- /dev/null +++ b/src/core/Shader.js @@ -0,0 +1,35 @@ +var GLShader = require('pixi-gl-core').GLShader; +var Const = require('./const'); + +function checkPrecision(src) { + if (src instanceof Array) { + if (src[0].substring(0,9) !== 'precision') { + var copy = src.slice(0); + copy.unshift('precision ' + Const.PRECISION.DEFAULT + ' float;'); + return copy; + } + } else { + if (src.substring(0,9) !== 'precision') { + return 'precision ' + Const.PRECISION.DEFAULT + ' float;\n' + src; + } + } + return src; +} + +/** + * Wrapper class, webGL Shader for Pixi. + * Adds precision string if vertexSrc or fragmentSrc have no mention of it. + * + * @class + * @memberof PIXI + * @param gl {WebGLRenderingContext} + * @param vertexSrc {string|string[]} The vertex shader source as an array of strings. + * @param fragmentSrc {string|string[]} The fragment shader source as an array of strings. + */ +var Shader = function(gl, vertexSrc, fragmentSrc) { + GLShader.call(this, gl, checkPrecision(vertexSrc), checkPrecision(fragmentSrc)); +}; + +Shader.prototype = Object.create(GLShader.prototype); +Shader.prototype.constructor = Shader; +module.exports = Shader; diff --git a/src/core/graphics/webgl/shaders/PrimitiveShader.js b/src/core/graphics/webgl/shaders/PrimitiveShader.js index 81c1893..76634ae 100644 --- a/src/core/graphics/webgl/shaders/PrimitiveShader.js +++ b/src/core/graphics/webgl/shaders/PrimitiveShader.js @@ -1,4 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../../Shader'); /** * This shader is used to draw simple primitive shapes for {@link PIXI.Graphics}. @@ -32,8 +32,6 @@ ].join('\n'), // fragment shader [ - 'precision mediump float;', - 'varying vec4 vColor;', 'void main(void){', diff --git a/src/core/index.js b/src/core/index.js index 464870a..42fc231 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -48,6 +48,7 @@ CanvasRenderTarget: require('./renderers/canvas/utils/CanvasRenderTarget'), // renderers - webgl + Shader: require('./Shader'), WebGLRenderer: require('./renderers/webgl/WebGLRenderer'), WebGLManager: require('./renderers/webgl/managers/WebGLManager'), ObjectRenderer: require('./renderers/webgl/utils/ObjectRenderer'), diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c1a46f4..6b74505 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,6 +1,5 @@ var extractUniformsFromSrc = require('./extractUniformsFromSrc'), utils = require('../../../utils'), - Const = require('../../../const'), SOURCE_KEY_MAP = {}; // var math = require('../../../math'); @@ -29,10 +28,6 @@ */ this.fragmentSrc = fragmentSrc || Filter.defaultFragmentSrc; - this.vertexSrc = this.vertexSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - - this.fragmentSrc = this.fragmentSrc.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - // pull out the vertex and shader uniforms if they are not specified.. // currently this does not extract structs only default types this.uniformData = uniforms || extractUniformsFromSrc( this.vertexSrc, this.fragmentSrc, 'projectionMatrix|uSampler'); @@ -85,7 +80,6 @@ * @constant */ Filter.defaultVertexSrc = [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -109,8 +103,6 @@ * @constant */ Filter.defaultFragmentSrc = [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying vec2 vFilterCoord;', diff --git a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag index 951f03f..325dd13 100644 --- a/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag +++ b/src/core/renderers/webgl/filters/spriteMask/spriteMaskFilter.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vMaskCoord; varying vec2 vTextureCoord; diff --git a/src/core/renderers/webgl/managers/FilterManager.js b/src/core/renderers/webgl/managers/FilterManager.js index 253e9e9..2f4cbba 100644 --- a/src/core/renderers/webgl/managers/FilterManager.js +++ b/src/core/renderers/webgl/managers/FilterManager.js @@ -3,7 +3,7 @@ RenderTarget = require('../utils/RenderTarget'), Quad = require('../utils/Quad'), math = require('../../../math'), - Shader = require('pixi-gl-core').GLShader, + Shader = require('../../../Shader'), filterTransforms = require('../filters/filterTransforms'), bitTwiddle = require('bit-twiddle'); diff --git a/src/core/sprites/webgl/generateMultiTextureShader.js b/src/core/sprites/webgl/generateMultiTextureShader.js index 1ac5853..f08d8be 100644 --- a/src/core/sprites/webgl/generateMultiTextureShader.js +++ b/src/core/sprites/webgl/generateMultiTextureShader.js @@ -1,9 +1,7 @@ -var Shader = require('pixi-gl-core').GLShader; var glslify = require('glslify'); -var Const = require('../../const'); +var Shader = require('../../Shader'); +var glslify = require('glslify'); var fragTemplate = [ - - 'precision %PRECISION% float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'varying float vTextureId;', @@ -18,8 +16,8 @@ function generateMultiTextureShader(gl, maxTextures) { - var vertexSrc = glslify('./texture.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); - var fragmentSrc = fragTemplate.replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT); + var vertexSrc = glslify('./texture.vert'); + var fragmentSrc = fragTemplate; fragmentSrc = fragmentSrc.replace(/%count%/gi, maxTextures); fragmentSrc = fragmentSrc.replace(/%forloop%/gi, generateSampleSrc(maxTextures)); diff --git a/src/core/sprites/webgl/texture.vert b/src/core/sprites/webgl/texture.vert index 56cf3d8..5ebe025 100644 --- a/src/core/sprites/webgl/texture.vert +++ b/src/core/sprites/webgl/texture.vert @@ -1,4 +1,3 @@ -precision %PRECISION% float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/extras/webgl/TilingShader.js b/src/extras/webgl/TilingShader.js index f3a8db2..ef1337f 100644 --- a/src/extras/webgl/TilingShader.js +++ b/src/extras/webgl/TilingShader.js @@ -1,6 +1,5 @@ -var Shader = require('pixi-gl-core').GLShader; +var Shader = require('../../core/Shader'); var glslify = require('glslify'); -var Const = require('../../core/const'); /** * @class @@ -12,8 +11,8 @@ { Shader.call(this, gl, - glslify('./tilingSprite.vert').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), - glslify('./tilingSprite.frag').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + glslify('./tilingSprite.vert'), + glslify('./tilingSprite.frag') ); } diff --git a/src/extras/webgl/tilingSprite.frag b/src/extras/webgl/tilingSprite.frag index 5da42e1..cad664a 100644 --- a/src/extras/webgl/tilingSprite.frag +++ b/src/extras/webgl/tilingSprite.frag @@ -1,5 +1,3 @@ -precision %PRECISION% float; - varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/extras/webgl/tilingSprite.vert b/src/extras/webgl/tilingSprite.vert index 571f1f7..7589b04 100644 --- a/src/extras/webgl/tilingSprite.vert +++ b/src/extras/webgl/tilingSprite.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/FXAA/FXAA.frag b/src/filters/FXAA/FXAA.frag index 4dd287d..bb6b18b 100755 --- a/src/filters/FXAA/FXAA.frag +++ b/src/filters/FXAA/FXAA.frag @@ -1,6 +1,3 @@ -precision %PRECISION% float; - - /** Basic FXAA implementation based on the code on geeks3d.com with the modification that the texture2DLod stuff was removed since it's diff --git a/src/filters/FXAA/FXAA.vert b/src/filters/FXAA/FXAA.vert index b0c1860..9d1db9b 100755 --- a/src/filters/FXAA/FXAA.vert +++ b/src/filters/FXAA/FXAA.vert @@ -1,6 +1,3 @@ - -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; attribute vec4 aColor; diff --git a/src/filters/blur/generateBlurFragSource.js b/src/filters/blur/generateBlurFragSource.js index 10610a1..480ff4d 100644 --- a/src/filters/blur/generateBlurFragSource.js +++ b/src/filters/blur/generateBlurFragSource.js @@ -8,9 +8,6 @@ }; var fragTemplate = [ - - 'precision mediump float;', - 'varying vec2 vBlurTexCoords[%size%];', 'uniform sampler2D uSampler;', diff --git a/src/filters/colormatrix/colorMatrix.frag b/src/filters/colormatrix/colorMatrix.frag index 166857b..3aaf2b3 100644 --- a/src/filters/colormatrix/colorMatrix.frag +++ b/src/filters/colormatrix/colorMatrix.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; uniform float m[20]; diff --git a/src/filters/colormatrix/colorMatrix.vert b/src/filters/colormatrix/colorMatrix.vert index 87b6f2a..787220d 100644 --- a/src/filters/colormatrix/colorMatrix.vert +++ b/src/filters/colormatrix/colorMatrix.vert @@ -1,5 +1,3 @@ -precision mediump float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; @@ -9,4 +7,4 @@ void main(void){ gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); vTextureCoord = aTextureCoord; -} \ No newline at end of file +} diff --git a/src/filters/displacement/displacement.frag b/src/filters/displacement/displacement.frag index 3850c1a..5f3518a 100644 --- a/src/filters/displacement/displacement.frag +++ b/src/filters/displacement/displacement.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vMapCoord; varying vec2 vTextureCoord; varying vec4 vColor; diff --git a/src/filters/godray/godray.frag b/src/filters/godray/godray.frag index b5a63b4..3dbd533 100644 --- a/src/filters/godray/godray.frag +++ b/src/filters/godray/godray.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform float exposure; uniform float decay; @@ -16,7 +14,7 @@ vec2 textCoo = vTextureCoord; deltaTextCoord *= 1.0 / float(NUM_SAMPLES) * density; float illuminationDecay = 1.0; - + for(int i=0; i < NUM_SAMPLES ; i++) { textCoo -= deltaTextCoord; @@ -28,6 +26,6 @@ illuminationDecay *= decay; } - + gl_FragColor *= exposure; -} \ No newline at end of file +} diff --git a/src/filters/gray/gray.frag b/src/filters/gray/gray.frag index 8bd3a3b..2a1d3b1 100644 --- a/src/filters/gray/gray.frag +++ b/src/filters/gray/gray.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; diff --git a/src/filters/gray/gray.vert b/src/filters/gray/gray.vert index 3df85a3..787220d 100644 --- a/src/filters/gray/gray.vert +++ b/src/filters/gray/gray.vert @@ -1,5 +1,3 @@ -precision %PRECISION% float; - attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; diff --git a/src/filters/twist/twist.frag b/src/filters/twist/twist.frag index 0ef65a3..22e1b00 100644 --- a/src/filters/twist/twist.frag +++ b/src/filters/twist/twist.frag @@ -1,5 +1,3 @@ -precision mediump float; - varying vec2 vTextureCoord; uniform sampler2D uSampler; diff --git a/src/mesh/webgl/MeshShader.js b/src/mesh/webgl/MeshShader.js index 1e5c2f2..dda3e46 100644 --- a/src/mesh/webgl/MeshShader.js +++ b/src/mesh/webgl/MeshShader.js @@ -1,5 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader, - Const = require('../../core/const'); +var Shader = require('../../core/Shader'); /** * @class @@ -13,7 +12,6 @@ gl, // vertex shader [ - 'precision %PRECISION% float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', @@ -26,10 +24,8 @@ ' gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);', ' vTextureCoord = aTextureCoord;', '}' - ].join('\n').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), + ].join('\n'), [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'uniform float alpha;', @@ -39,7 +35,7 @@ ' gl_FragColor = texture2D(uSampler, vTextureCoord) * alpha ;', // ' gl_FragColor = vec4(1.0);', '}' - ].join('\n').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + ].join('\n') ); } diff --git a/src/particles/webgl/ParticleShader.js b/src/particles/webgl/ParticleShader.js index 122b2d3..4c98aab 100644 --- a/src/particles/webgl/ParticleShader.js +++ b/src/particles/webgl/ParticleShader.js @@ -1,5 +1,4 @@ -var Shader = require('pixi-gl-core').GLShader, - Const = require('../../core/const'); +var Shader = require('../../core/Shader'); /** * @class @@ -38,11 +37,9 @@ ' vTextureCoord = aTextureCoord;', ' vColor = aColor;', '}' - ].join('\n').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT), + ].join('\n'), // hello [ - 'precision %PRECISION% float;', - 'varying vec2 vTextureCoord;', 'varying float vColor;', @@ -54,7 +51,7 @@ ' if (color.a == 0.0) discard;', ' gl_FragColor = color;', '}' - ].join('\n').replace(/%PRECISION%/gi, Const.PRECISION.DEFAULT) + ].join('\n') ); // TEMP HACK