Pixi.js: PIXI рдХрд╕реНрдЯрдо рд╢реЗрдбрд░ рдХреЛрдб рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдирд╡ре░ 2017  ┬╖  30рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pixijs/pixi.js

рдореИрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╢реЗрдбрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

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)

рд╕рднреА 30 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЙрджрд╛рд╣рд░рдг рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдХрд┐рд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЖрдкрдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

Google рдХреНрд░реЛрдо рд╕рдВрд╕реНрдХрд░рдг 62.0.3202.94 (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдмрд┐рд▓реНрдб) (64-рдмрд┐рдЯ)
2017-11-23-143829_667x172_scrot

рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреНрд╡рд╛рдВрдЯрдо 57.0 (64-рдмрд┐рдЯ)
2017-11-23-143957_741x236_scrot

рдУрдПрд╕: рдЙрдмреБрдВрдЯреВ 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 рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдкрд┐рдХреНрд╕реА рдЙрд╕ рд╡рд░реНрджреА рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХреЗ рд▓рд┐рдП рдмрд╕ рдХреЛрдИ рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИред

рдЖрдкрдХреЛ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рдорд┐рд▓реЗ рд╣реИрдВ:

  • рдЙрд╕реА рд╣реИрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛ (рдЕрднреА рдХреЗ рд▓рд┐рдП), рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рд╣реИ рдпрд╛ рдирд╣реАрдВред
  • uSampler рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП glsify рдЗрд╕реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  • рдпрд╛ рдмрд╕ v5 рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред

рдЙрдореНрдореАрдж рд╣реИ, рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдЕрдЪреНрдЫрд╛ рдХреИрдЪ, @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 рддрдХ рдХрдо рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

<----- рдореВрд▓ рдкреЛрд╕реНрдЯ --------->
рдирдорд╕реНрддреЗ,
рджреЗрд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рдореИрдВ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдореЗрдВ рдХреБрдЫ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ред рдпрд╣ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред "рд╡рд┐рд╢реЗрд╖рддрд╛" рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рд░рд┐рдореЛрдЯ рдХрдВрд╕реЛрд▓ рд╕реЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ:
image
image

@ivanpopelyshev рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдВрдЧреЗ рддрд╛рдХрд┐ рджреВрд╕рд░реЛрдВ рдХреЛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рд╕реЗ рдЗрд╕реЗ рдЧрд░реНрдо рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗ?
рдореИрдВ рдЗрд╕реЗ рдЕрдм рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рдорд╛рдиреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЖрдкрдХрд╛ рд╡рд╛рджрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рдХрд┐ рдЗрд╕реЗ v5 рдореЗрдВ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@doebi рдмрдВрджред

@tyleet рдмрдирд╛рд╡рдЯ рд╕реЗ рд▓рд┐рдП рдЧрдП рдирдореВрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рд╕реАрдорд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдЗрд╕ рдереНрд░реЗрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЙрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдХреГрдкрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Darker picture Darker  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

YuryKuvetski picture YuryKuvetski  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sntiagomoreno picture sntiagomoreno  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

neciszhang picture neciszhang  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MRVDH picture MRVDH  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ