diff --git a/src/core/renderers/webgl/ShaderManager.js b/src/core/renderers/webgl/ShaderManager.js index d0896b7..b4fdfc9 100644 --- a/src/core/renderers/webgl/ShaderManager.js +++ b/src/core/renderers/webgl/ShaderManager.js @@ -79,7 +79,7 @@ */ getGLShader() { - return this.shader.glShaders[this.renderer.CONTEXT_UID]; + return this.shader.program.glShaders[this.renderer.CONTEXT_UID]; } /** diff --git a/src/core/renderers/webgl/ShaderManager.js b/src/core/renderers/webgl/ShaderManager.js index d0896b7..b4fdfc9 100644 --- a/src/core/renderers/webgl/ShaderManager.js +++ b/src/core/renderers/webgl/ShaderManager.js @@ -79,7 +79,7 @@ */ getGLShader() { - return this.shader.glShaders[this.renderer.CONTEXT_UID]; + return this.shader.program.glShaders[this.renderer.CONTEXT_UID]; } /** diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c051375..2c3eaad 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,4 +1,5 @@ import Shader from '../../../shader/Shader'; +import Program from '../../../shader/Program'; import { BLEND_MODES } from '../../../const'; import settings from '../../../settings'; @@ -17,7 +18,9 @@ */ constructor(vertexSrc, fragmentSrc, uniforms) { - super(vertexSrc, fragmentSrc, uniforms); + const program = Program.from(vertexSrc, fragmentSrc); + + super(program, uniforms); this.blendMode = BLEND_MODES.NORMAL; diff --git a/src/core/renderers/webgl/ShaderManager.js b/src/core/renderers/webgl/ShaderManager.js index d0896b7..b4fdfc9 100644 --- a/src/core/renderers/webgl/ShaderManager.js +++ b/src/core/renderers/webgl/ShaderManager.js @@ -79,7 +79,7 @@ */ getGLShader() { - return this.shader.glShaders[this.renderer.CONTEXT_UID]; + return this.shader.program.glShaders[this.renderer.CONTEXT_UID]; } /** diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c051375..2c3eaad 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,4 +1,5 @@ import Shader from '../../../shader/Shader'; +import Program from '../../../shader/Program'; import { BLEND_MODES } from '../../../const'; import settings from '../../../settings'; @@ -17,7 +18,9 @@ */ constructor(vertexSrc, fragmentSrc, uniforms) { - super(vertexSrc, fragmentSrc, uniforms); + const program = Program.from(vertexSrc, fragmentSrc); + + super(program, uniforms); this.blendMode = BLEND_MODES.NORMAL; diff --git a/src/core/shader/Program.js b/src/core/shader/Program.js index 44d9b78..46cd06e 100644 --- a/src/core/shader/Program.js +++ b/src/core/shader/Program.js @@ -1,6 +1,7 @@ import extractUniformsFromSrc from './extractUniformsFromSrc'; import generateUniformsSync from './generateUniformsSync'; import glCore from 'pixi-gl-core'; +import { ProgramCache } from '../utils'; let UID = 0; @@ -228,6 +229,30 @@ return Program.testingContext; } + + /** + * A short hand function to create a program based of a vertex and fragment shader + * this method will also check to see if there is a cached program. + * + * @param {string} [vertexSrc] - The source of the vertex shader. + * @param {string} [fragmentSrc] - The source of the fragment shader. + * @param {object} [uniforms] - Custom uniforms to use to augment the built-in ones. + * + * @returns {PIXI.Shader} an shiney new pixi shader. + */ + static from(vertexSrc, fragmentSrc) + { + const key = vertexSrc + fragmentSrc; + + let program = ProgramCache[key]; + + if (!program) + { + ProgramCache[key] = program = new Program(vertexSrc, fragmentSrc); + } + + return program; + } } export default Program; diff --git a/src/core/renderers/webgl/ShaderManager.js b/src/core/renderers/webgl/ShaderManager.js index d0896b7..b4fdfc9 100644 --- a/src/core/renderers/webgl/ShaderManager.js +++ b/src/core/renderers/webgl/ShaderManager.js @@ -79,7 +79,7 @@ */ getGLShader() { - return this.shader.glShaders[this.renderer.CONTEXT_UID]; + return this.shader.program.glShaders[this.renderer.CONTEXT_UID]; } /** diff --git a/src/core/renderers/webgl/filters/Filter.js b/src/core/renderers/webgl/filters/Filter.js index c051375..2c3eaad 100644 --- a/src/core/renderers/webgl/filters/Filter.js +++ b/src/core/renderers/webgl/filters/Filter.js @@ -1,4 +1,5 @@ import Shader from '../../../shader/Shader'; +import Program from '../../../shader/Program'; import { BLEND_MODES } from '../../../const'; import settings from '../../../settings'; @@ -17,7 +18,9 @@ */ constructor(vertexSrc, fragmentSrc, uniforms) { - super(vertexSrc, fragmentSrc, uniforms); + const program = Program.from(vertexSrc, fragmentSrc); + + super(program, uniforms); this.blendMode = BLEND_MODES.NORMAL; diff --git a/src/core/shader/Program.js b/src/core/shader/Program.js index 44d9b78..46cd06e 100644 --- a/src/core/shader/Program.js +++ b/src/core/shader/Program.js @@ -1,6 +1,7 @@ import extractUniformsFromSrc from './extractUniformsFromSrc'; import generateUniformsSync from './generateUniformsSync'; import glCore from 'pixi-gl-core'; +import { ProgramCache } from '../utils'; let UID = 0; @@ -228,6 +229,30 @@ return Program.testingContext; } + + /** + * A short hand function to create a program based of a vertex and fragment shader + * this method will also check to see if there is a cached program. + * + * @param {string} [vertexSrc] - The source of the vertex shader. + * @param {string} [fragmentSrc] - The source of the fragment shader. + * @param {object} [uniforms] - Custom uniforms to use to augment the built-in ones. + * + * @returns {PIXI.Shader} an shiney new pixi shader. + */ + static from(vertexSrc, fragmentSrc) + { + const key = vertexSrc + fragmentSrc; + + let program = ProgramCache[key]; + + if (!program) + { + ProgramCache[key] = program = new Program(vertexSrc, fragmentSrc); + } + + return program; + } } export default Program; diff --git a/src/core/shader/Shader.js b/src/core/shader/Shader.js index 2a8cc78..3768f03 100644 --- a/src/core/shader/Shader.js +++ b/src/core/shader/Shader.js @@ -1,5 +1,4 @@ import Program from './Program'; -import { ProgramCache } from '../utils'; // let math = require('../../../math'); /** @@ -47,18 +46,10 @@ */ static from(vertexSrc, fragmentSrc, uniforms) { - const key = vertexSrc + fragmentSrc; - - let program = ProgramCache[key]; - - if (!program) - { - ProgramCache[key] = program = new Program(vertexSrc, fragmentSrc); - } + const program = Program.from(vertexSrc, fragmentSrc); return new Shader(program, uniforms); } - } export default Shader;