diff --git a/src/filters/ascii/AsciiFilter.js b/src/filters/ascii/AsciiFilter.js index cd02f7b..ac64fd1 100644 --- a/src/filters/ascii/AsciiFilter.js +++ b/src/filters/ascii/AsciiFilter.js @@ -1,5 +1,4 @@ var core = require('../../core'); -// @see https://github.com/substack/brfs/issues/25 var glslify = require('glslify'); // TODO (cengler) - The Y is flipped in this shader for some reason. diff --git a/src/filters/ascii/AsciiFilter.js b/src/filters/ascii/AsciiFilter.js index cd02f7b..ac64fd1 100644 --- a/src/filters/ascii/AsciiFilter.js +++ b/src/filters/ascii/AsciiFilter.js @@ -1,5 +1,4 @@ var core = require('../../core'); -// @see https://github.com/substack/brfs/issues/25 var glslify = require('glslify'); // TODO (cengler) - The Y is flipped in this shader for some reason. diff --git a/src/filters/crosshatch/CrossHatchFilter.js b/src/filters/crosshatch/CrossHatchFilter.js new file mode 100644 index 0000000..a8da95d --- /dev/null +++ b/src/filters/crosshatch/CrossHatchFilter.js @@ -0,0 +1,23 @@ +var core = require('../../core'); +var glslify = require('glslify'); + +/** + * A Cross Hatch effect filter. + * + * @class + * @extends PIXI.Filter + * @memberof PIXI.filters + */ +function CrossHatchFilter() +{ + core.Filter.call(this, + // vertex shader + glslify('../fragments/default.vert'), + // fragment shader + glslify('./crosshatch.frag') + ); +} + +CrossHatchFilter.prototype = Object.create(core.Filter.prototype); +CrossHatchFilter.prototype.constructor = CrossHatchFilter; +module.exports = CrossHatchFilter; diff --git a/src/filters/ascii/AsciiFilter.js b/src/filters/ascii/AsciiFilter.js index cd02f7b..ac64fd1 100644 --- a/src/filters/ascii/AsciiFilter.js +++ b/src/filters/ascii/AsciiFilter.js @@ -1,5 +1,4 @@ var core = require('../../core'); -// @see https://github.com/substack/brfs/issues/25 var glslify = require('glslify'); // TODO (cengler) - The Y is flipped in this shader for some reason. diff --git a/src/filters/crosshatch/CrossHatchFilter.js b/src/filters/crosshatch/CrossHatchFilter.js new file mode 100644 index 0000000..a8da95d --- /dev/null +++ b/src/filters/crosshatch/CrossHatchFilter.js @@ -0,0 +1,23 @@ +var core = require('../../core'); +var glslify = require('glslify'); + +/** + * A Cross Hatch effect filter. + * + * @class + * @extends PIXI.Filter + * @memberof PIXI.filters + */ +function CrossHatchFilter() +{ + core.Filter.call(this, + // vertex shader + glslify('../fragments/default.vert'), + // fragment shader + glslify('./crosshatch.frag') + ); +} + +CrossHatchFilter.prototype = Object.create(core.Filter.prototype); +CrossHatchFilter.prototype.constructor = CrossHatchFilter; +module.exports = CrossHatchFilter; diff --git a/src/filters/crosshatch/crosshatch.frag b/src/filters/crosshatch/crosshatch.frag new file mode 100644 index 0000000..635ba4b --- /dev/null +++ b/src/filters/crosshatch/crosshatch.frag @@ -0,0 +1,44 @@ +precision mediump float; + +varying vec2 vTextureCoord; + +uniform sampler2D uSampler; + +void main(void) +{ + float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb); + + gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); + + if (lum < 1.00) + { + if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) + { + gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + } + } + + if (lum < 0.75) + { + if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0) + { + gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + } + } + + if (lum < 0.50) + { + if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0) + { + gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + } + } + + if (lum < 0.3) + { + if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0) + { + gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + } + } +} diff --git a/src/filters/ascii/AsciiFilter.js b/src/filters/ascii/AsciiFilter.js index cd02f7b..ac64fd1 100644 --- a/src/filters/ascii/AsciiFilter.js +++ b/src/filters/ascii/AsciiFilter.js @@ -1,5 +1,4 @@ var core = require('../../core'); -// @see https://github.com/substack/brfs/issues/25 var glslify = require('glslify'); // TODO (cengler) - The Y is flipped in this shader for some reason. diff --git a/src/filters/crosshatch/CrossHatchFilter.js b/src/filters/crosshatch/CrossHatchFilter.js new file mode 100644 index 0000000..a8da95d --- /dev/null +++ b/src/filters/crosshatch/CrossHatchFilter.js @@ -0,0 +1,23 @@ +var core = require('../../core'); +var glslify = require('glslify'); + +/** + * A Cross Hatch effect filter. + * + * @class + * @extends PIXI.Filter + * @memberof PIXI.filters + */ +function CrossHatchFilter() +{ + core.Filter.call(this, + // vertex shader + glslify('../fragments/default.vert'), + // fragment shader + glslify('./crosshatch.frag') + ); +} + +CrossHatchFilter.prototype = Object.create(core.Filter.prototype); +CrossHatchFilter.prototype.constructor = CrossHatchFilter; +module.exports = CrossHatchFilter; diff --git a/src/filters/crosshatch/crosshatch.frag b/src/filters/crosshatch/crosshatch.frag new file mode 100644 index 0000000..635ba4b --- /dev/null +++ b/src/filters/crosshatch/crosshatch.frag @@ -0,0 +1,44 @@ +precision mediump float; + +varying vec2 vTextureCoord; + +uniform sampler2D uSampler; + +void main(void) +{ + float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb); + + gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); + + if (lum < 1.00) + { + if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) + { + gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + } + } + + if (lum < 0.75) + { + if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0) + { + gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + } + } + + if (lum < 0.50) + { + if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0) + { + gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + } + } + + if (lum < 0.3) + { + if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0) + { + gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + } + } +} diff --git a/src/filters/index.js b/src/filters/index.js index 74d6478..3f37abc 100644 --- a/src/filters/index.js +++ b/src/filters/index.js @@ -14,7 +14,7 @@ // BlurDirFilter: require('./blur/BlurDirFilter'), // ColorStepFilter: require('./color/ColorStepFilter'), // ConvolutionFilter: require('./convolution/ConvolutionFilter'), - // CrossHatchFilter: require('./crosshatch/CrossHatchFilter'), + CrossHatchFilter: require('./crosshatch/CrossHatchFilter'), // DotScreenFilter: require('./dot/DotScreenFilter'), // DropShadowFilter: require('./dropshadow/DropShadowFilter'), // InvertFilter: require('./invert/InvertFilter'),