diff --git a/src/filters/bloom/BloomFilter.js b/src/filters/bloom/BloomFilter.js new file mode 100644 index 0000000..1a9c713 --- /dev/null +++ b/src/filters/bloom/BloomFilter.js @@ -0,0 +1,97 @@ +var core = require('../../core'), + BlurXFilter = require('../blur/BlurXFilter'), + BlurYFilter = require('../blur/BlurYFilter'); + VoidFilter = require('../void/VoidFilter'); + +/** + * The BloomFilter applies a Gaussian blur to an object. + * The strength of the blur can be set for x- and y-axis separately. + * + * @class + * @extends PIXI.Filter + * @memberof PIXI.filters + */ +function BloomFilter() +{ + core.Filter.call(this); + + this.blurXFilter = new BlurXFilter(); + this.blurYFilter = new BlurYFilter(); + + this.blurYFilter.blendMode = core.BLEND_MODES.SCREEN; + + this.defaultFilter = new VoidFilter(); +} + +BloomFilter.prototype = Object.create(core.Filter.prototype); +BloomFilter.prototype.constructor = BloomFilter; +module.exports = BloomFilter; + +BloomFilter.prototype.apply = function (filterManager, input, output) +{ + var renderTarget = filterManager.getRenderTarget(true); + + //TODO - copyTexSubImage2D could be used here? + this.defaultFilter.apply(filterManager, input, output); + + this.blurXFilter.apply(filterManager, input, renderTarget); + this.blurYFilter.apply(filterManager, renderTarget, output); + + filterManager.returnRenderTarget(renderTarget); +}; + +Object.defineProperties(BloomFilter.prototype, { + /** + * Sets the strength of both the blurX and blurY properties simultaneously + * + * @member {number} + * @memberOf PIXI.filters.BloomFilter# + * @default 2 + */ + blur: { + get: function () + { + return this.blurXFilter.blur; + }, + set: function (value) + { + this.blurXFilter.blur = this.blurYFilter.blur = value; + } + }, + + /** + * Sets the strength of the blurX property + * + * @member {number} + * @memberOf PIXI.filters.BloomFilter# + * @default 2 + */ + blurX: { + get: function () + { + return this.blurXFilter.blur; + }, + set: function (value) + { + this.blurXFilter.blur = value; + } + }, + + /** + * Sets the strength of the blurY property + * + * @member {number} + * @memberOf PIXI.filters.BloomFilter# + * @default 2 + */ + blurY: { + get: function () + { + return this.blurYFilter.blur; + }, + set: function (value) + { + this.blurYFilter.blur = value; + } + } +}); diff --git a/src/filters/bloom/BloomFilter.js b/src/filters/bloom/BloomFilter.js new file mode 100644 index 0000000..1a9c713 --- /dev/null +++ b/src/filters/bloom/BloomFilter.js @@ -0,0 +1,97 @@ +var core = require('../../core'), + BlurXFilter = require('../blur/BlurXFilter'), + BlurYFilter = require('../blur/BlurYFilter'); + VoidFilter = require('../void/VoidFilter'); + +/** + * The BloomFilter applies a Gaussian blur to an object. + * The strength of the blur can be set for x- and y-axis separately. + * + * @class + * @extends PIXI.Filter + * @memberof PIXI.filters + */ +function BloomFilter() +{ + core.Filter.call(this); + + this.blurXFilter = new BlurXFilter(); + this.blurYFilter = new BlurYFilter(); + + this.blurYFilter.blendMode = core.BLEND_MODES.SCREEN; + + this.defaultFilter = new VoidFilter(); +} + +BloomFilter.prototype = Object.create(core.Filter.prototype); +BloomFilter.prototype.constructor = BloomFilter; +module.exports = BloomFilter; + +BloomFilter.prototype.apply = function (filterManager, input, output) +{ + var renderTarget = filterManager.getRenderTarget(true); + + //TODO - copyTexSubImage2D could be used here? + this.defaultFilter.apply(filterManager, input, output); + + this.blurXFilter.apply(filterManager, input, renderTarget); + this.blurYFilter.apply(filterManager, renderTarget, output); + + filterManager.returnRenderTarget(renderTarget); +}; + +Object.defineProperties(BloomFilter.prototype, { + /** + * Sets the strength of both the blurX and blurY properties simultaneously + * + * @member {number} + * @memberOf PIXI.filters.BloomFilter# + * @default 2 + */ + blur: { + get: function () + { + return this.blurXFilter.blur; + }, + set: function (value) + { + this.blurXFilter.blur = this.blurYFilter.blur = value; + } + }, + + /** + * Sets the strength of the blurX property + * + * @member {number} + * @memberOf PIXI.filters.BloomFilter# + * @default 2 + */ + blurX: { + get: function () + { + return this.blurXFilter.blur; + }, + set: function (value) + { + this.blurXFilter.blur = value; + } + }, + + /** + * Sets the strength of the blurY property + * + * @member {number} + * @memberOf PIXI.filters.BloomFilter# + * @default 2 + */ + blurY: { + get: function () + { + return this.blurYFilter.blur; + }, + set: function (value) + { + this.blurYFilter.blur = value; + } + } +}); diff --git a/src/filters/index.js b/src/filters/index.js index a16f87e..e480166 100644 --- a/src/filters/index.js +++ b/src/filters/index.js @@ -10,7 +10,7 @@ */ module.exports = { // AsciiFilter: require('./ascii/AsciiFilter'), - // BloomFilter: require('./bloom/BloomFilter'), + BloomFilter: require('./bloom/BloomFilter'), // BlurDirFilter: require('./blur/BlurDirFilter'), // ColorStepFilter: require('./color/ColorStepFilter'), // ConvolutionFilter: require('./convolution/ConvolutionFilter'),