рдореИрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╢реЗрдбрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
VertexArrayObject.js:171 Uncaught TypeError: Cannot read property 'location' of undefined
at VertexArrayObject.addAttribute (VM1006 pixi.js:2348)
at Quad.initVao (VM1006 pixi.js:19874)
at FilterManager.applyFilter (VM1006 pixi.js:18947)
at Filter.apply (VM1006 pixi.js:18420)
at FilterManager.popFilter (VM1006 pixi.js:18877)
at Container.renderAdvancedWebGL (VM1006 pixi.js:9423)
at Container.renderWebGL (VM1006 pixi.js:9360)
at Container.renderWebGL (VM1006 pixi.js:9366)
at WebGLRenderer.render (VM1006 pixi.js:17563)
at Application.render (VM1006 pixi.js:8043)
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рднреА рдЗрд╕ рдмрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ:
http://pixijs.io/examples/#/filters/filter -mouse.js
рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреБрдЫ рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдиреБрдХреВрд▓рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬрд╣рд╛рдВ glslify рдиреЗ рдХреБрдЫ рдЕрдкреНрд░рдпреБрдХреНрдд рд╡рд░реНрджреА рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдкрд┐рдХреНрд╕реА рдиреЗ рдЕрднреА рднреА рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд░реНрджреА рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ fragShader рдХреЗ рд╕рд╛рде рднреА рд╣реЛрддрд╛ рд╣реИред gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0)
рдЙрджрд╛рд╣рд░рдг рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдХрд┐рд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЖрдкрдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
Google рдХреНрд░реЛрдо рд╕рдВрд╕реНрдХрд░рдг 62.0.3202.94 (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдмрд┐рд▓реНрдб) (64-рдмрд┐рдЯ)
рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреНрд╡рд╛рдВрдЯрдо 57.0 (64-рдмрд┐рдЯ)
рдУрдПрд╕: рдЙрдмреБрдВрдЯреВ 17.10 рдХрд▓рд╛рддреНрдордХ
@doebi рдЕрдЪреНрдЫрд╛ рдХреИрдЪ! рд╣рд╛рдБ, рдЕрдиреБрдХреВрд▓рди рдиреЗ рдХреБрдЫ рд╣рдЯрд╛ рджрд┐рдпрд╛ (рдореИрдВ рдЗрд╕рдХреЗ рдирдореВрдиреЗ рдХреЛ рд╢рд░реНрдд рд▓рдЧрд╛рддрд╛ рд╣реВрдВ) рдФрд░ рд╣рдо рдЗрд╕реЗ рдЬрд╛рдВрдЪрдирд╛ рднреВрд▓ рдЧрдПред
рдЕрднреА рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рд╕реИрдореНрдкрд▓рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ https://github.com/pixijs/pixi-plugin-example рдЬреИрд╕реЗ рд░реЗрдВрдбрд░рд░ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ?
рдЗрд╕ рджрд┐рди рджреВрд╕рд░реА рдмрд╛рд░, рдореБрдЭреЗ рдЗрд╕ рдЧрдбрд╝рдмрдбрд╝реА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ рдХрд┐ рд╢реЗрдбрд░ рдФрд░ рдлрд┐рд▓реНрдЯрд░ v4 рдореЗрдВ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ v5 рдореЗрдВ рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗред
рд╕рдЪ рдХрд╣реВрдВ рддреЛ, рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЦреБрджрд╛рдИ рдирд╣реАрдВ рдХреА рд╣реИред рдмрд╕ рдЙрд╕ рдлреАрдЪрд░ рдХреЗ рд╕рд╛рде рджреВрд╕рд░реЗ рджрд┐рди рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореИрдВ рд░реЗрдВрдбрд░рд░ рдкреНрд▓рдЧрдЗрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░реВрдВрдЧрд╛ред рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдХреНрдпрд╛ v5 рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ ETA рд╣реИ?
2 рдорд╣реАрдиреЗ рдпрд╛ рддреЛ :)
рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рддрд░рдХреАрдмреЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд╣ рд▓реЗрдЦ рдмрдирд╛рдпрд╛ рд╣реИ: https://github.com/pixijs/pixi.js/wiki/v4-Creating-Filters
@ivanpopelyshev рдЖрдкрдХреЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЙрд╕реА рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИрдХреА рдкреИрдЪ рдХреЛ pixi.js рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред
diff --git a/js/pixi.js b/js/pixi.js
index 363f09c..d0a321b 100644
--- a/js/pixi.js
+++ b/js/pixi.js
@@ -2344,6 +2344,9 @@ VertexArrayObject.prototype.activate = function()
*/
VertexArrayObject.prototype.addAttribute = function(buffer, attribute, type, normalized, stride, start)
{
+ if (!attribute) {
+ return this;
+ }
this.attributes.push({
buffer: buffer,
attribute: attribute,
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ v4 рдореЗрдВ рд╢реЗрдбрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ v5 рдмрд╛рд╣рд░ рди рд╣реЛ рдЬрд╛рдПред (рд╕рдВрднрд╡рддрдГ рдПрдХ рдмреЗрд╣рддрд░ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде) :)
рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реИрдХ рд╣реИ!
рдЖрдк рдЗрд╕реЗ рдЕрд▓рдЧ рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
PIXI.glCore.VertexArrayObject.prototype.addAttribute = ...
рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реБрдИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЙрдмрдВрдЯреВ 17.10 рдЖрд░реНрдЯрдлреБрд▓ рдХреЗ рд╕рд╛рдеред рдХреНрдпрд╛ Pixi.js рдореЗрдВ рд╢реЗрдбрд░реНрд╕ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕реНрдерд┐рд░ рд╣реИрдВ? рдХреНрдпрд╛ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдореИрдВ рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбрд░ рдХреИрд╕реЗ рдЖрдпрд╛рдд рдХрд░реВрдВ?
рдпрд╛ рддреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рддреЛ рд░реЗрдВрдбрд░рд░ рдкреНрд▓рдЧрдЗрди рдХреЗ рд░реВрдк рдореЗрдВред рд╡реЗ рд╕реНрдерд┐рд░ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╡реЗрдмрд▓реЙрдЧ рдФрд░ рдкрд┐рдХреНрд╕реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рджреЛрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрдВрднреАрд░ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
https://github.com/pixijs/pixi.js/wiki/v4-Creating-Filters
https://github.com/pixijs/pixi-plugin-example/
рдПрди-рд╡реЗрдВ рд╕рдордп рдХреЗ рд▓рд┐рдП рдореИрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ v5 рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
const filterCode = `void main(){
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}`;
const filter = new PIXI.Filter(null, filterCode);
someSprite.filters = [filter];
рдЗрддрдирд╛ рдХреЛрдб рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдореБрдЭреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдПрдХ рдЕрд▓рдЧ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рдореБрдЭреЗ рдХреБрдЫ рдХреЗ рд╕рд╛рде рд╢реВрдиреНрдп рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрдирд╛рд╡рдЯ рд╕рдордиреНрд╡рдп рдФрд░ рдирдореВрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ FilterManager рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╕реНрдерд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
рд░реЗрдВрдбрд░рд░ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рд╡рд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдЖрдЬрдорд╛рдПрдВред рд╣рд╛рдБ, рдЗрд╕рдХреА рдмрдбрд╝реА рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯред
рдЙрд╕ рдЪреАрдЬрд╝ рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдБ: https://github.com/TazOen/createShaderPlugin ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмрдирд╛рд╡рдЯ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рдХреЛрдИ bindTexture
рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдмрдирд╛рд╡рдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рд╕рдВрдкреВрд░реНрдг рдкрд┐рдХреНрд╕реА-рдкреНрд▓рдЧрдЗрди-рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВред
рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдмрдирд╛рд╡рдЯ рдХреЗ рддрд╛рд░ рдФрд░ "рдирдореВрдирд╛" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирдореВрдирд╛ рдерд╛ рдпрд╛ рдирдореВрдирд╛? рдПрдХ рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐?
рдореИрдВ рдЗрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдорджрдж рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рдиред рдпрд╣ рдкреГрд╖реНрда рдЗрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?
http://pixijs.io/examples/#/basics/custom -filter.js
рдирдореВрдирд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреА рд╡рд░реНрджреА рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреЛрдИ рдЗрд╕реЗ рдорд┐рд╕ рдХрд░реЗрдЧрд╛ред рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдХрд░рддрд╛ рд╣реИ :) https://github.com/pixijs/pixi.js/wiki/v4-Creating-Filters#cannot -read-property-location-of-undefined
рдУрд╣, рддреЛ рд╡рд╣ рд╡рд╣реАрдВ рдерд╛ред рдореБрдЭреЗ рд╡рд┐рдХреА рдпрд╛рдж рдЖ рдЧрдИред
рдЖрдкрдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдХрд░рддрд╛ рд╣реИ
рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрднреА рдЬреЛрдбрд╝рд╛ рд╣реИред
рдлрд┐рд▓реНрдЯрд░-рдорд╛рдЙрд╕ рдбреЗрдореЛ рдореЗрдВ рднреА рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдиреЛрдЯрд┐рд╕ред рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреЛ v4 рдореЗрдВ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ v5 рдореЗрдВ рдХреБрдЫ рдХрд░реЗрдВрдЧреЗред
рдРрд╕рд╛ рддрдм рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдлрд╝рд┐рд▓реНрдЯрд░ рдкреНрд░рдмрдВрдзрдХ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реЗрдбрд░ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрди рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╡рд╣рд╛рдВ рдХреИрд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдП?
рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛, aTextureCoord -> vTextureCoord
рдпрд╣ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдпрд╣ рдХреЛрдб рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
varying vec2 vTextureCoord;
varying vec4 vColor;
uniform sampler2D uSampler;
uniform vec4 uTextureClamp;
uniform vec4 uColor;
void main(void)
{
gl_FragColor = texture2D(uSampler, vTextureCoord);
gl_FragColor.r = 0.0;
gl_FragColor.g = 0.0;
gl_FragColor.b = 0.0;
}
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЕрдВрдд рдореЗрдВ gl_FragColor.a = 0.0;
рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ Cannot read property 'location' of undefined
рдХрд╣рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдореИрдВ рдЕрдзрд┐рдХрддрдо 4 рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ 3 рдХреЛрд░реНрдбреНрд╕ рд╣реА рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдБред рдпрд╣ рдХреНрдпрд╛ рд╣реИ? рдЧрд▓рдд рдХреНрдпрд╛ рд╣реИ?
@ рдЬрд░реНрдордирд╕реЛрдХреЛрд▓реЛрд╡13 рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдмрд╕ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореИ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛:
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдореВрд▓ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╢реЗрдбрд░ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ glsify рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреА рд╣реИред
рдпрджрд┐ рдЖрдк gl_FragColor.a = 0.0;
рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдХреЙрд▓ рдХреЛ texture2D
рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рддрдХ рдпрд╣ texture2D
рд╕реЗ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рд▓реЗрддрд╛ рд╣реИред
рдпрджрд┐ glsify рдХреЙрд▓ рдХреЛ рдмрдирд╛рд╡рдЯ 2D рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ webgl uSampler
рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдкрд┐рдХреНрд╕реА рдЙрд╕ рд╡рд░реНрджреА рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХреЗ рд▓рд┐рдП рдмрд╕ рдХреЛрдИ рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИред
рдЖрдкрдХреЛ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рдорд┐рд▓реЗ рд╣реИрдВ:
рдЙрдореНрдореАрдж рд╣реИ, рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдЕрдЪреНрдЫрд╛ рдХреИрдЪ, @doebi!
рдпрд╛ рд░реЗрдВрдбрд░рд░ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдУрд╣, рдЕрдм рдореИрдВ рдЙрд╕реЗ рд╕рдордЭ рдЧрдпрд╛! рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ Pixi.js рдХреА рдЕрдЧрд▓реА рдЫреЛрдЯреА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ Doebi рдХрд╛ рдкреИрдЪ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдореБрдЭреЗ рдкреАрдЖрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
рд╣рд╛рдВ, рдкреАрдЖрд░, рд▓реЗрдХрд┐рди рдЕрд▓рдЧ рдЬрдЧрд╣ред
https://github.com/pixijs/pixi.js/blob/dev/src/core/renderers/webgl/utils/Quad.js#L93
https://github.com/pixijs/pixi.js/blob/dev/src/core/renderers/webgl/managers/FilterManager.js#L242
рдореИрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд░реНрдЧ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ FilterManager рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирдорд╕реНрддреЗ,
рдореБрдЭреЗ рдЕрдкрдиреЗ рд╢реЗрдбрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ BlurYFilter рд╢реЗрдбрд░ рдХреЛрдб рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдХрд░реНрдиреЗрд▓ рдФрд░ рдЧрд╛рдКрд╕реА рдЪрд░ рдкрд░ рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рднрд┐рдиреНрдирддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдпрд╣ рд╡рд┐рдВрдбреЛрдЬрд╝, рдореИрдХреЛрдЬрд╝ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдЖрдИрдУрдПрд╕ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред
рдпрд╣рд╛рдБ рд╢реЗрдбрд░ рдХреЛрдб рд╣реИ:
рд╢реАрд░реНрд╖:
attribute vec2 aVertexPosition;
attribute vec2 aTextureCoord;
uniform float strength;
uniform mat3 projectionMatrix;
varying vec2 vBlurTexCoords[15];
void main(void){
gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);
vBlurTexCoords[0] = aTextureCoord + vec2(0.0, -7.0 * strength);
vBlurTexCoords[1] = aTextureCoord + vec2(0.0, -6.0 * strength);
vBlurTexCoords[2] = aTextureCoord + vec2(0.0, -5.0 * strength);
vBlurTexCoords[3] = aTextureCoord + vec2(0.0, -4.0 * strength);
vBlurTexCoords[4] = aTextureCoord + vec2(0.0, -3.0 * strength);
vBlurTexCoords[5] = aTextureCoord + vec2(0.0, -2.0 * strength);
vBlurTexCoords[6] = aTextureCoord + vec2(0.0, -1.0 * strength);
vBlurTexCoords[7] = aTextureCoord + vec2(0.0, 0.0 * strength);
vBlurTexCoords[8] = aTextureCoord + vec2(0.0, 1.0 * strength);
vBlurTexCoords[9] = aTextureCoord + vec2(0.0, 2.0 * strength);
vBlurTexCoords[10] = aTextureCoord + vec2(0.0, 3.0 * strength);
vBlurTexCoords[11] = aTextureCoord + vec2(0.0, 4.0 * strength);
vBlurTexCoords[12] = aTextureCoord + vec2(0.0, 5.0 * strength);
vBlurTexCoords[13] = aTextureCoord + vec2(0.0, 6.0 * strength);
vBlurTexCoords[14] = aTextureCoord + vec2(0.0, 7.0 * strength);
}
рдЯреБрдХрдбрд╝рд╛:
varying vec2 vBlurTexCoords[15];
uniform sampler2D uSampler;
void main(void){
gl_FragColor = vec4(0.0);
gl_FragColor += texture2D(uSampler, vBlurTexCoords[0]) * 0.013068780984604511;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[1]) * 0.013907007172070673;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[2]) * 0.017439264394216315;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[3]) * 0.028762309061254498;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[4]) * 0.05603114255667656;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[5]) * 0.10421702583793174;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[6]) * 0.163461199220823;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[7]) * 0.2062265415448454;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[8]) * 0.163461199220823;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[9]) * 0.10421702583793174;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[10]) * 0.05603114255667656;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[11]) * 0.028762309061254498;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[12]) * 0.017439264394216315;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[13]) * 0.013907007172070673;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[14]) * 0.013068780984604511;
}
рдпрд╣рд╛рдБ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ BlurYFilter рдХреЗ рд╢реЗрдбреНрд╕ рд╣реИрдВ:
рд▓рдВрдмрд╡рдд:
attribute vec2 aVertexPosition;
attribute vec2 aTextureCoord;
uniform float strength;
uniform mat3 projectionMatrix;
varying vec2 vBlurTexCoords[5];
void main(void)
{
gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);
vBlurTexCoords[0] = aTextureCoord + vec2(0.0, -2.0 * strength);
vBlurTexCoords[1] = aTextureCoord + vec2(0.0, -1.0 * strength);
vBlurTexCoords[2] = aTextureCoord + vec2(0.0, 0.0 * strength);
vBlurTexCoords[3] = aTextureCoord + vec2(0.0, 1.0 * strength);
vBlurTexCoords[4] = aTextureCoord + vec2(0.0, 2.0 * strength);
}
рдЯреБрдХрдбрд╝рд╛:
varying vec2 vBlurTexCoords[5];
uniform sampler2D uSampler;
void main(void)
{
gl_FragColor = vec4(0.0);
gl_FragColor += texture2D(uSampler, vBlurTexCoords[0]) * 0.153388;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[1]) * 0.221461;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[2]) * 0.250301;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[3]) * 0.221461;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[4]) * 0.153388;
}
рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд▓рдд рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
@tyleet рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╣реА рдореБрджреНрджрд╛ рд╣реИ? рдЖрдк рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ?
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 15 рдХрд╛ рдХрд░реНрдиреЗрд▓ рдЖрдХрд╛рд░ рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ, рдЕрдЧрд░ рдореИрдВ рдХрд░реНрдиреЗрд▓ рдЖрдХрд╛рд░ рдХреЛ 7 рддрдХ рдХрдо рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
<----- рдореВрд▓ рдкреЛрд╕реНрдЯ --------->
рдирдорд╕реНрддреЗ,
рджреЗрд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рдореИрдВ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдореЗрдВ рдХреБрдЫ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ред рдпрд╣ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред "рд╡рд┐рд╢реЗрд╖рддрд╛" рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рд░рд┐рдореЛрдЯ рдХрдВрд╕реЛрд▓ рд╕реЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ:
@ivanpopelyshev рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдВрдЧреЗ рддрд╛рдХрд┐ рджреВрд╕рд░реЛрдВ рдХреЛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рд╕реЗ рдЗрд╕реЗ рдЧрд░реНрдо рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗ?
рдореИрдВ рдЗрд╕реЗ рдЕрдм рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рдорд╛рдиреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЖрдкрдХрд╛ рд╡рд╛рджрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рдХрд┐ рдЗрд╕реЗ v5 рдореЗрдВ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
@doebi рдмрдВрджред
@tyleet рдмрдирд╛рд╡рдЯ рд╕реЗ рд▓рд┐рдП рдЧрдП рдирдореВрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рд╕реАрдорд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдЗрд╕ рдереНрд░реЗрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЙрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдХреГрдкрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред