рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╡реАрдбрд┐рдпреЛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдХрд╛ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рддреЗрдЬреА рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЧрдпрд╛ рд╣реИ - рдЖрдзреБрдирд┐рдХ рдкреАрд╕реА рдХреА рд╢рдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓рдЧрднрдЧ рд╣рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдареАрдХ рджреЗрдЦрддреЗ рд╕рдордп рдПрдХ рдЬрдЯрд┐рд▓ рдлрд┐рд▓реНрдЯрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡реАрдбрд┐рдпреЛ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреВрд░реНрдг- рдЧрддрд┐ рд╡рд╛рд▓реЗ рд╡реАрдбрд┐рдпреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ рдзреАрдореЗ рдФрд░ рдЬрдЯрд┐рд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред



рдпрд╣ рдХреНрд╖реЗрддреНрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - ffdshow рдХрдЪреНрдЪреЗ рд╡реАрдбрд┐рдпреЛ рдлрд┐рд▓реНрдЯрд░ рдФрд░ madVR рдЬреИрд╕реЗ рдлрд┐рд▓реНрдЯрд░ рдЖрдкрдХреЛ рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рд╕реБрдЦрдж рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡реЗрдм рдПрдХ рд╕рдорд╛рди рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдпрд╛ рддреЛ YouTube рдкрд░ рдЕрдЧрд▓реЗ рд╡реАрдбрд┐рдпреЛ рдХреА рд╕рднреА рдХрдорд┐рдпреЛрдВ рдХрд╛ рдЖрдирдВрдж рд▓реЗрддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕реЗ рдПрдордкреАрд╕реА-рдмреАрдИ рдЬреИрд╕реЗ рдмрд╛рд╣рд░реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдФрд░ рдПрдХ рдЬрд╛рджреВ рдХрд╛ рдмрдЯрди рд▓рдЧрд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдЖрдкрдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВред



рдпрд╣ рдкреЛрд╕реНрдЯ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдореЗрд░реЗ рд╢реЛрдз рдХреА рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░рд┐рдкреЛрд░реНрдЯ рд╣реИ, рдЬрд╣рд╛рдВ рдЕрдВрддрд┐рдо рд▓рдХреНрд╖реНрдп 1920x1080 рдХреЗ рдиреНрдпреВрдирддрдо рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЛ рдЫрд╛рдирдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдЖрдХрд▓рди рдХрд░рдирд╛ рдерд╛ред



рдЯрд┐рдкреНрдкрдгреА



рдПрдХ рд▓реЗрдЦ рдкрдврд╝рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

  1. рджрд┐рдЦрд╛рдП рдЧрдП рд╕рднреА рдбреЗрдореЛ рд▓реВрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде html5 рд╡реАрдбрд┐рдпреЛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рдЗрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреА рдЧрд▓рддреА рдХреЗ рдХрд╛рд░рдг , рдХреБрдЫ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдпрд╣ рд╡реАрдбрд┐рдпреЛ рдмрд╣реБрдд рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдЭрдЯрдХрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИ ред рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреАред
  2. рдпрджрд┐ рджреЛрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рд╡реАрдбрд┐рдпреЛ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк GET рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд▓реВрдк = рдЧрд▓рдд рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
  3. рдбреЗрдореЛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╡рд▓ рдХреНрд░реЛрдо, рд▓реЛрдордбрд╝реА рдФрд░ IE11 рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  4. рд╕рднреА рдбреЗрдореЛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реАрдзреЗ рдирд┐рд░реНрднрд░ HTML рдкреГрд╖реНрдареЛрдВ рдХреЗ рдЕрдВрджрд░ рд╣реИ, рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрд┐рдирд╛ред
  5. рдкрд╛рда рдореЗрдВ рдХрдИ рд╡рд┐рдХреГрдд рдЕрдВрдЧреНрд░реЗрдЬреА рд╢рдмреНрдж рдФрд░ рдЕрдирд╛рдбрд╝реА рдЕрдиреБрд╡рд╛рдж рд╣реИрдВред рдореИрдВ рд░реВрд╕реА рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдирд┐рдкреБрдг рд╣реВрдВ, рд╕реБрдзрд╛рд░реЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
  6. рд╣рдо CORS, рдлреНрд▓реИрд╢-рд╡реАрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдЗрдЯреЛрдВ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдБрдЦ рдмрдВрдж рдХрд░ рд▓реЗрддреЗ рд╣реИрдВред рд╡реИрдХреНрдпреВрдо рдореЗрдВ рдХреЗрд╡рд▓ рдЧреЛрд▓рд╛рдХрд╛рд░ рдкрд░реАрдХреНрд╖рдгред
  7. рдореИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реВрдБ, рдЗрд╕рд▓рд┐рдП рдмрд╣реБрдд рдиреАрдЪреЗ рдкрд╛рда рдкрд░ рднрд░реЛрд╕рд╛ рдордд рдХрд░реЛред рдЕрдзрд┐рдХ рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк рджрд┐рдП рдЧрдП рд╕рдордп рдХреЛ 2 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдФрд░ рд╕реБрдЭрд╛рд╡ рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред


рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд



рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рдЬреЛ рд╕рднреА рд▓рдХреНрд╖реНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ (рдХреНрд░реЛрдо рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ) рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИред Google Chrome рдореВрд▓ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдХрд▓реНрдк, рдЕрдЪрд╛рдирдХ, рдХреЗрд╡рд▓ Chrome рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореЛрдЬрд╝рд┐рд▓рд╛ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ NaCl рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдкреГрд╖реНрда рдкрд░ NaCl рдХреЗ рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ - рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред



(рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ) рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдореВрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдкреГрд╖реНрда рдкрд░ рд╡реАрдбрд┐рдпреЛ рддрддреНрд╡ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ, рдЗрд╕реЗ рдЫрд┐рдкрд╛рдПрдВ, рдФрд░ рдЗрд╕рдХреЗ рдКрдкрд░ рдПрдХ рдХреИрдирд╡рд╛рд╕ рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░реНрдб рдлрд╝реНрд░реЗрдо рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЕрдм рддрдХ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред



рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднрд╛рд╖рд╛ рд╣реИ - рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рднрд╛рд╖рд╛ рдЧрдВрднреАрд░ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛! рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрдпрд╛рд░ рдФрд░ рдЕрдиреБрдХреВрд▓рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдХрд╛рдлреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ рдЬреЛ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬреЗрдПрд╕ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рднрд╛рд╖рд╛ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рд╡реЗрдм рдкрд░ рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рдирдИ рддрдХрдиреАрдХреЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ asm.js, SIMD.js, WebGL рдФрд░ WebCL, рдЬреЛ рдХрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдкрдиреА рджрд┐рд▓ рдХреА рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдХреЗрд╡рд▓ рдореВрд▓ рд╕реЗ рдереЛрдбрд╝реА рдХрдо рдЧрддрд┐ рдкрд░ рд╣реИред рддреЛ рд╣рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХреЛрдИ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП?



рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВред



рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ



рд╢реБрджреНрдз JS рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  1. рд╣рдо рджреЛрдиреЛрдВ рдЖрд╡рд╢реНрдпрдХ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ - рдПрдХ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╡реАрдбрд┐рдпреЛ рдФрд░ рдХреИрдирд╡рд╛рд╕, рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕реНрдерд┐рддред
  2. context.drawImage(video, 0, 0)



    рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрдирд╡рд╛рд╕ рдкрд░ рд╡реАрдбрд┐рдпреЛ рд╕реЗ рдПрдХ рдлреНрд░реЗрдо рдмрдирд╛рдПрдВред context.drawImage(video, 0, 0)



    , рдЬрд╣рд╛рдВ рд╕рдВрджрд░реНрдн рдХреИрдирд╡рд╛рд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд 2d рд╕рдВрджрд░реНрдн рд╣реИред
  3. рд╣рдо context.getImageData(0, 0, width, height)



    рдорд╛рдзреНрдпрдо рд╕реЗ рдлреНрд░реЗрдо рдмрдлрд╝рд░ (рд░рдВрдЧ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА) рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред context.getImageData(0, 0, width, height)



    ред
  4. рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдмрдлрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
  5. рд╣рдордиреЗ рдкреНрд░реЛрд╕реЗрд╕реНрдб рдРрд░реЗ рдХреЛ context.putImageData(imageData, 0, 0)



    рдЬрд░рд┐рдП рд╡рд╛рдкрд╕ рднреЗрдЬ рджрд┐рдпрд╛ рд╣реИред context.putImageData(imageData, 0, 0)



    ред


рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реАрдбрд┐рдпреЛ рдлрд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реА рдХреЗ рд╕рдорд╛рди рдХреЛрдб рдХреА рдиреНрдпреВрдирддрдо рд░рд╛рд╢рд┐ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЗрдирд╡рд░реНрдЯрд░ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рдореВрд▓ (рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ) рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛, рдЬреЛ рдлреНрд░реЗрдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ RGB рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ:

 outputContext.drawImage(video, 0, 0); var imageData = outputContext.getImageData(0, 0, width, height); var source = imageData.data; var length = source.length; for (var i = 0; i < length; i += 4) { source[i ] = 255 - source[i]; source[i+1] = 255 - source[i+1]; source[i+2] = 255 - source[i+2]; //   } outputContext.putImageData(imageData, 0, 0);
      
      





рдФрд░ рдпрджреНрдпрдкрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдбреЗрдореЛ рдФрд░ рд╕рд░рд▓ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдЬрд▓реНрджреА рдЙрдЪреНрдЪ рд╕рдВрдХрд▓реНрдк рдкрд░ "рдЙрдбрд╝рд╛" рдЬрд╛рддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, drawImage



рдХреЙрд▓ 1080p рдкрд░ рднреА рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ , getImageData



рдФрд░ putImageData



рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж , рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп 20-30 рдорд┐рд▓реАрд╕реЗрдХреЗрдВрдб рдкреНрд░рддрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ред рдКрдкрд░ рдкреВрд░реНрдг рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 35-40ms рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдЬреЛ рдХрд┐ PAL рд╡реАрдбрд┐рдпреЛ (25 рдлреНрд░реЗрдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб, 40ms рдкреНрд░рддрд┐ рдлреНрд░реЗрдо) рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ рд╣реИред рд╕рднреА рдорд╛рдк 4770k рдкрд░ рд▓рд┐рдП рдЧрдП рдереЗ, рдЬреЛ рдЗрд╕ рд╕рдордп рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реЛрдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдкрд┐рдЫрд▓реА рдкреАрдврд╝рд┐рдпреЛрдВ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЬрдЯрд┐рд▓ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд╕рдВрднрд╡ рд╣реИ , рдЪрд╛рд╣реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ ред рдХреЛрдИ рднреА, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмрд╣реБрдд рддреЗрдЬрд╝ рдХреЛрдб, рдХреИрдирд╡рд╛рд╕ рдХреЗ рднрдпрд╛рдирдХ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рд╣реА рдЖрд░рд╛рдо рдХрд░реЗрдЧрд╛ред



рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬ рдирд╣реАрдВ рд╣реИред рдпрджреНрдпрдкрд┐ LUT рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдирд╡рд░реНрдЯрд┐рдВрдЧ рдпрд╛ рд░рдирд┐рдВрдЧ рдЬреИрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдЙрдЪрд┐рдд рд╕рдордп рдореЗрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЬрдЯрд┐рд▓ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рдХрд╛рд░рдг рднрдпрд╛рдирдХ рд▓рддрд╛рдбрд╝ рд╣реЛрддреА рд╣реИред рд╢реЛрд░ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдореИрдеред рдЖрдпрд╛рдореА () * рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП 10) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 55 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдмреНрд▓реНрдпреВрдЕрд░ рдХреЗ рд▓рд┐рдП 3x3 рдХреЛрд░ , рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд, 400ms рдпрд╛ 2.5 рдлреНрд░реЗрдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд▓реЗрддрд╛ рд╣реИред

 function blur(source, width, height) { function blur_core(ptr, offset, stride) { return (ptr[offset - stride - 4] + ptr[offset - stride] + ptr[offset - stride + 4] + ptr[offset - 4] + ptr[offset] + ptr[offset + 4] + ptr[offset + stride - 4] + ptr[offset + stride] + ptr[offset + stride + 4] ) / 9; } var stride = width * 4; for (var y = 1; y < (height - 1); ++y) { var offset = y * stride; for (var x = 1; x < stride - 4; x += 4) { source[offset] = blur_core(source, offset, stride); source[offset + 1] = blur_core(source, offset + 1, stride); source[offset + 2] = blur_core(source, offset + 2, stride); offset += 4; } } }
      
      





рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 800 рдПрдордПрд╕ / рдкрд╛рд╕ рдХреЗ рд╕рд╛рде рдФрд░ рднреА рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИред рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ IE11 рдХреНрд░реЛрдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджреЛрдЧреБрдирд╛ рддреЗрдЬ рд╣реИ (рд▓реЗрдХрд┐рди рдХреИрдирд╡рд╛рд╕ рд╕реНрд╡рдпрдВ рдзреАрдорд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рд╣реЗрдЬрддрд╛ рдирд╣реАрдВ рд╣реИ)ред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдЧрд▓рдд рддрд░реАрдХрд╛ рд╣реИред



asm.js



Newfangled asm.js рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЛрдЬрд╝рд┐рд▓рд╛ рдХрд╛ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИред рдЙрддреНрдкрдиреНрди рдХреЛрдб рдЕрднреА рднреА рдХреНрд░реЛрдо рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдирд╣реАрдВ-рдЧрдВрднреАрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреА рдЙрдореНрдореАрдж рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ asm.js рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрднреА рддрдХ рдЬреЛрдбрд╝рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ ред



рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдЪрдпрдирд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ asm.js- рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред Emscripten рдПрдХ рд╕рд░рд▓ рджреЛ-рд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдХреЛрдб рдХреА рд▓рдЧрднрдЧ 4.5 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдЙрдЪрд┐рдд рд╕рдордп рдореЗрдВ рдЗрд╕рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдПред рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ asm.js рд▓рд┐рдЦрдирд╛ рдЕрднреА рднреА рдПрдХ рдЦреБрд╢реА рд╣реИ ред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, asm.js рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рдорд╛рди 2d рдХреИрдирд╡рд╛рд╕ рд╕рдВрджрд░реНрдн рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЪрд▓реЗрдЧрд╛ред



SIMD.js



SIMD.js рдЬреЗрдПрд╕-рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдореИрдиреБрдЕрд▓ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдирдИ рддрдХрдиреАрдХ рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдирд╛рдЗрдЯрд▓реА рдореЗрдВ "рд╕рдорд░реНрдерд┐рдд" рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЬрд▓реНрдж рд╕рднреА рд▓рдХреНрд╖реНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, API рдЕрдм рдХреЗрд╡рд▓ рджреЛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ , float32x4 рдФрд░ uint32x4, рдЬреЛ рдкреВрд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕рдмрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ 8-рдмрд┐рдЯ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдмреЗрдХрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Int32x4Array рдкреНрд░рдХрд╛рд░ рдЕрднреА рддрдХ рдирд╛рдЗрдЯрд▓реА рдореЗрдВ рднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрдореЛрд░реА рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдХреЛрдИ рднреА рд▓реЗрдЦрди рдФрд░ рдкрдврд╝рдирд╛ рдзреАрдорд╛ рдФрд░ рдбрд░рд╛рд╡рдирд╛ рд╣реЛрдЧрд╛ (рдЬрдм рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ )ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдПрдХ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЙрд▓рдЯрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ (рдЗрд╕ рд╕рдордп XOR рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛) рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛрдб рджреВрдВрдЧрд╛:

 function invert_frame_simd(source) { var fff = SIMD.int32x4.splat(0x00FFFFFF); var length = source.length / 4; var int32 = new Uint32Array(source.buffer); for (var i = 0; i < length; i += 4) { var src = SIMD.int32x4(int32[i], int32[i+1], int32[i+2], int32[i+3]); var dst = SIMD.int32x4.xor(src, fff); int32[i+0] = dst.x; int32[i+1] = dst.y; int32[i+2] = dst.z; int32[i+3] = dst.w; } }
      
      





рдлрд┐рд▓рд╣рд╛рд▓, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рд╢реБрджреНрдз JS - 1600ms / pass (Nighly рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдФрд░ рдбреЗрдореЛ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рд╕рд╛рде рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ 256-рдмрд┐рдЯ YMM рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (int32x4 SSE2 рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп 128-рдмрд┐рдЯ xmm рд╣реИ), рдФрд░ рдХреНрдпрд╛ SSSE3 рдЬреИрд╕реА рдирдИ рддрдХрдиреАрдХреЛрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗред рд╡реИрд╕реЗ, SIMD.js рдЖрдкрдХреЛ рдзреАрдореЗ рдХреИрдирд╡рд╛рд╕ рд╕реЗ рдирд╣реАрдВ рдмрдЪрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди SIMD рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХреБрдЫ рдкрд░рд┐рдЪрд┐рдд рдХреАрдбрд╝реЗ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ!



WebGL



рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХрд╛ рд╣реИ WebGL ред рдЕрдкрдиреА рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рд╕рдордЭ рдореЗрдВ, WebGL рджреЗрд╢реА OpenGL рддрдХрдиреАрдХ рдХреЗ рд▓рд┐рдП JS рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ GPU рдкрд░ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреЗрдо рдЖрджрд┐ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдЪрд┐рддреНрд░реЛрдВ рдпрд╛ рд╡реАрдбрд┐рдпреЛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред WebGL рдХреЛ рднреА getImageData рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ 20ms рдЕрдВрддрд░рд╛рд▓ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред



рд▓реЗрдХрд┐рди рдореБрдлреНрдд рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рд╡реЗрдмрдЬреАрдПрд▓ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреИрд░-рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рднрдпрд╛рдирдХ рджрд░реНрдж рд╣реИред рдЖрдкрдХреЛ рдмреЗрдХрд╛рд░ рдХреЗ рдХреЛрдиреЗ (рдЬреЛ рд╣рдореЗрд╢рд╛ рдкреВрд░реЗ рдлреНрд░реЗрдо рдХреЛ рдХрд╡рд░ рдХрд░реЗрдВрдЧреЗ) рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдирд╛рд╡рдЯ (рдЬреЛ рдкреВрд░реЗ рдлреНрд░реЗрдо рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧреА) рдХреЛ рд╕реНрдерд┐рддрд┐ рджреЗрдВ, рдФрд░ рдлрд┐рд░ рдмрдирд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╡реЗрдмрдЬреАрдПрд▓ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рдлрд╝реНрд░реЗрдо рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдорд╛рд░реНрдЯ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдХреНрд░реЛрдо рдФрд░ рд▓реЛрдордбрд╝реА рдореЗрдВред IE11 WEBGL11072: INVALID_VALUE: texImage2D: This texture source is not supported



рддреНрд░реБрдЯрд┐ рдХреЗ WEBGL11072: INVALID_VALUE: texImage2D: This texture source is not supported



рдЬрд╛рдПрдЧрд╛ WEBGL11072: INVALID_VALUE: texImage2D: This texture source is not supported



ред



рдЕрдВрдд рдореЗрдВ, рдлрд┐рд▓реНрдЯрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдереЛрдбрд╝реА рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рдЬреАрдПрд▓рдПрд╕рдПрд▓ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╢реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ (рдХрдо рд╕реЗ рдХрдо рд╡реЗрдмрдЬреАрдПрд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ) рдирд┐рд░рдВрддрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╡рд░реНрджреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░) рдпрд╛ рднрд╛рд░рддреАрдп рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 float core1[9]; core1[0] = 1.0; core1[1] = 1.0; core1[2] = 0.0; core1[3] = 1.0; core1[4] = 0.0; core1[5] = -1.0; core1[6] = 0.0; core1[7] = -1.0; core1[8] = -1.0;
      
      





рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкрд┐рдХреНрд╕реЗрд▓ shader рдПрдХ рдПрдХрд▓ рдорд╛рди рд▓реМрдЯрд╛рдП - рд╡рд░реНрддрдорд╛рди рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рд░рдВрдЧ, рдЬреЛ рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдХрдИ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ (рдПрдХ рд╣реА рдЕрд╡рд░реБрджреНрдз рджрдорди)ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрд┐рд▓реНрдЯрд░ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред



рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, CUDA рдФрд░ OpenCL рдЬреИрд╕реА рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдЕрдЪреНрдЫреЗ рдЬреАрд╡рди рд╕реЗ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред



WebGL рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрджреНрднреБрдд рд╡реЗрдм рдкреНрд░рджрд░реНрд╢рди рд╣реИ ( рдЬрд┐рд╕реЗ рдЖрдк рдорд╛рдк рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ )ред рдХрдо рд╕реЗ рдХрдо, рдпрд╣ рдкреНрд░реАрд╡рд┐рдЯ рдлрд┐рд▓реНрдЯрд░ рдХреЛ рдорд╛рд╕реНрдХрдЯреВрд▓ (рдЪрд╛рд░ 3x3 рдХреЛрд░ рдХреЗ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рдХрд╛ рдЪрдпрди) рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ 1080p рдФрд░ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЦреБрдж рд╕реЗ рдирдлрд░рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдереЛрдбрд╝рд╛ рдЕрд╕рдорд░реНрдерд┐рдд рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдбрд░рддреЗ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ WebGL рдЖрдкрдХреЛ рд╡реАрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЧрдВрднреАрд░рддрд╛ рд╕реЗ .js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ WebGL рдХреЛрдб рдХреЗ рднрд╛рдЧ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдпрд╛ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЙрдиреНрдирдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред



рдпрджрд┐ рдЖрдк рдЦреБрдж рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк WebCL рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред



WebCL



рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд░реНрд╖ рдХреА 19 рдорд╛рд░реНрдЪ рдХреЛ рд╡реЗрдмрд╕реАрдПрд▓ 1.0 рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рд╕реЗ рддрдХрдиреАрдХ рдкреВрд░реА рд╕реВрдЪреА рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдереА, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ SIMD.js. рдФрд░, SIMD.js рдХреЗ рд╡рд┐рдкрд░реАрдд, рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рдореИрдВрдиреЗ рдХреНрд░реЛрдо рдХреЗ рд▓рд┐рдП рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣реАрдВ рдкрдврд╝рд╛, рд▓реЗрдХрд┐рди рд▓рд┐рдВрдХ рдЦреЛ рджрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП WebCL рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рднрд╡рд┐рд╖реНрдп рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдореГрдд рддрдХрдиреАрдХ рд╣реИред



рдирд┐рд╖реНрдХрд░реНрд╖



рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рд╡реАрдбрд┐рдпреЛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рдВрднрд╡ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдм рд╡реЗрдмрд▓реЙрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХрдорд╛рддреНрд░ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡реАрдбрд┐рдпреЛ рдлрд┐рд▓реНрдЯрд░, рдЬрд┐рд╕ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореИрд╕реЛрдЪрд┐рд╕реНрдЯреНрд╕ рдХрд╛ рдПрдХ рд╡реНрдпрд╡рд╕рд╛рдп рдпреЛрдЧреНрдп рд╣реИред рдЕрдиреНрдп рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ 2d рдХреИрдирд╡рд╛рд╕ рд╕рдВрджрд░реНрдн рдХреЗ рднрдпрд╛рдирдХ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЖрд░рд╛рдо рдХрд░рддреА рд╣реИрдВ, рдФрд░ рд╡реЗ рд╕реНрд╡рдпрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдХреЗ рд╕рд╛рде рдЪрдордХрддреЗ рдирд╣реАрдВ рд╣реИрдВред рдРрд╕реА рджреБрдЦрдж рдмрд╛рддреЗрдВред



All Articles