Pixi.js: рдкрд╛рд░рджрд░реНрд╢реА рд╡реЗрдмрдПрдо рд╡реАрдбрд┐рдпреЛ рдкрд┐рдЫрд▓реЗ рдЕрд▓реНрдлрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдлрд┐рдХреНрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ!)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдЬреВрди 2017  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pixijs/pixi.js

рдХреГрдкрдпрд╛ https://github.com/pixijs/pixi.js/issues/3526 рджреЗрдЦреЗрдВ

рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдпрд╣ рдлрд┐рдХреНрд╕ рдирд╡реАрдирддрдо рдкрд┐рдХреНрд╕реА.рдЬреЗрдПрд╕ рд░рд┐рд▓реАрдЬ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛ, рд╣рдо рдЦреБрдж рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдзрдиреНрдпрд╡рд╛рджред

Stale ЁЯТ╛ v4.x (Legacy) ЁЯХ╖ Bug

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдЕрдкрдиреА рд╣рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП GLTexture рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред V5 рдореЗрдВ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдЕрдкрд▓реЛрдбрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред

рдЕрднреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд░рдгрдиреАрддрд┐ DIY рд╣реИ:

PIXI.glCore.GLTexture.prototype.upload = function(source)
{
    this.bind();

    var gl = this.gl;

    gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, this.premultiplyAlpha);

        var isVideo = !!source.videoWidth;
    var newWidth = isVideo ? source.videoWidth : source.width;
    var newHeight = isVideo ? source.videoHeight : source.height;

    if(newHeight !== this.height || newWidth !== this.width || isVideo)
    {
        gl.texImage2D(gl.TEXTURE_2D, 0, this.format, this.format, this.type, source);
    }
    else
    {
        gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, this.format, this.type, source);
    }

    this.width = newWidth;
    this.height = newHeight;

};

рдЗрд╕реЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦреЗрдВ, рдЗрд╕реЗ "рдкрд┐рдХреНрд╕реА-рдкреИрдЪ.рдЬреЗрдПрд╕" рдирд╛рдо рджреЗрдВред рдореЗрд░реЗ рдкрд╛рд╕ рджрд╕рд┐рдпреЛрдВ рддрд░рд╣ рдХреЗ рдкреИрдЪ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

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

рдореИрдВ рдЕрдкрдиреА рд╣рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП GLTexture рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред V5 рдореЗрдВ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдЕрдкрд▓реЛрдбрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред

рдЕрднреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд░рдгрдиреАрддрд┐ DIY рд╣реИ:

PIXI.glCore.GLTexture.prototype.upload = function(source)
{
    this.bind();

    var gl = this.gl;

    gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, this.premultiplyAlpha);

        var isVideo = !!source.videoWidth;
    var newWidth = isVideo ? source.videoWidth : source.width;
    var newHeight = isVideo ? source.videoHeight : source.height;

    if(newHeight !== this.height || newWidth !== this.width || isVideo)
    {
        gl.texImage2D(gl.TEXTURE_2D, 0, this.format, this.format, this.type, source);
    }
    else
    {
        gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, this.format, this.type, source);
    }

    this.width = newWidth;
    this.height = newHeight;

};

рдЗрд╕реЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦреЗрдВ, рдЗрд╕реЗ "рдкрд┐рдХреНрд╕реА-рдкреИрдЪ.рдЬреЗрдПрд╕" рдирд╛рдо рджреЗрдВред рдореЗрд░реЗ рдкрд╛рд╕ рджрд╕рд┐рдпреЛрдВ рддрд░рд╣ рдХреЗ рдкреИрдЪ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо V5 рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдкрд▓реЛрдбрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдзреНрд╡рдЬ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, "рд╣рдореЗрд╢рд╛ texImage2D рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ"

@ рдХреБрд░реВрд░рдЬрд╝реЗрд▓ рдкрд┐рдВрдЧ

рдирдорд╕реНрддреЗ, рд╣рд╛рдБ рдпрд╣ рдареАрдХ рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдЬреИрд╕рд╛ рд╡реАрдбрд┐рдпреЛ рд╣реИ?

BTW, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рд░рдг рднреА рд╡реАрдбрд┐рдпреЛ рдмрдирд╛рд╡рдЯ рдмреЗрд╣рдж рдзреАрдореА рд╣реИ:

http://codeflow.org/issues/slow_video_to_texture/

@ivanpopelyshev рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдкрд╛рдЧрд▓ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рднреА upload рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╡рд┐рд▓рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

@englercj рдХреНрдпрд╛ рдореИрдВ рдЖрдкрдХреА рдкреБрд╖реНрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдиреЗ v5 рдХреЗ рд▓рд┐рдП texImage2D рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ? рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рднрд┐рдиреНрди рдкреАрдЖрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ v5 рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ v4 рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдЗрд╕реЗ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ! рдзрдиреНрдпрд╡рд╛рдж

рдпрд╣ рдкреИрдЪ рдХреНрд░реЛрдо 70 рдкрд░ рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ... рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ Pixi5 / chrome70 рдореВрд▓ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ

рдкреБрд╖реНрдЯрд┐ рдХреА рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдиреЗ рдХреНрд░реЛрдо 70 рд╕реЗ рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛ рдорд╢реАрди рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред OSX рдЕрднреА рднреА рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред @ivanpopelyshev рдХреНрдпрд╛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдореБрдЭреЗ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

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

рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ texSubImage2D рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рд╣реИред

рд▓рд┐рдВрдХ @saschagehlich рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЗрд╕ рдореЗрдВ рдЧрд╣рд░реА рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рдерд╛ред

PIXI v5 рдХреЗ рд▓рд┐рдП рдЕрдм рдЙрддреНрддрд░ / рдкреИрдЪ рдКрдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдордиреЗ рдПрдХ рд╕рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде BaseImageResource рдкреИрдЪ рдХрд┐рдпрд╛ред

import { resources } from 'pixi.js'

resources.BaseImageResource.prototype.upload = function(renderer, baseTexture, glTexture, source) {
  const gl = renderer.gl;
  const width = baseTexture.realWidth;
  const height = baseTexture.realHeight;

  source = source || this.source;

  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, baseTexture.premultiplyAlpha);

  // add this line, check for video
  const isVideo = !!source.videoWidth
  if (!isVideo && baseTexture.target === gl.TEXTURE_2D && glTexture.width === width && glTexture.height === height)
  {
    gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, baseTexture.format, baseTexture.type, source);
  }
  else
  {
    glTexture.width = width;
    glTexture.height = height;

    gl.texImage2D(baseTexture.target, 0, baseTexture.format, baseTexture.format, baseTexture.type, source);
  }

  return true
}

рдкрд░рд┐рдгрд╛рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рдХрдареЛрд░ рд╣реИрдВред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ
2019-09-11-082818_1058x748_scrot

рдЙрдкрд░рд╛рдВрдд
2019-09-11-082725_1058x748_scrot

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдмрд╛рд╕реА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдкрдиреА рдЯреЛрдкреА рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП texSubImage2D рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рд░рд┐рдВрдЧ рдореЗрдВ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЕрдиреНрдпрдерд╛ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЛрдВ рдФрд░ рд╡реАрдбрд┐рдпреЛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдХрд┐рд╕реА рдФрд░ рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред

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

рдореИрдВ рдЗрд╕реЗ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдЙрдЫрд╛рд▓ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдЕрднреА рднреА рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

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

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

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

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

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

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

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