Pixi.js: Safari рдкрд░ WebGL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд▓реНрдЯрд╛ рд░реЗрдВрдбрд░ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдЬрдире░ 2016  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pixijs/pixi.js

рдирдорд╕реНрддреЗ, рдпрд╣рд╛рдБ рд╕реНрдерд┐рддрд┐ рд╣реИ:

const filmObj = _getFilmObj() /* draw obj somewhere else */
const renderer_1 = PIXI.autoDetectRenderer(width, height)
renderer_1.render(filmObj)
const filmTexture = new PIXI.Texture(new PIXI.BaseTexture(renderer_1.view))
renderer_1.destroy()

const artboardObj = new PIXI.Sprite(filmTexture)
const renderer_2 = PIXI.autoDetectRenderer(width, height)
renderer_2.render(artboardObj)
const artboardTexture =new PIXI.Texture(new PIXI.BaseTexture(renderer_2.view))
renderer_2.destroy()

/* render artboardTexture somewhere else */

рдЬрдм рдкрд░реАрдХреНрд╖рдг рдпрд╣ рд╕рдлрд╛рд░реА (рдЖрдИрдУрдПрд╕ / рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕) рдкрд░, renderer_2.view рдЙрд▓реНрдЯрд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдиреАрдЪреЗ fliped рд╣реИ filmObj , рдЬрдмрдХрд┐ renderer_1.view рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ renderer_2 рдкрд░ рдЧрд▓рдд рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ renderer_1.view ред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЬрд╛рдВрдЪреЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рдЦрд░рд╛рдм рд╣реИ?

рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА:

  1. рдХреНрд░реЛрдо (рдбреЗрд╕реНрдХрдЯреЙрдк/рдореЛрдмрд╛рдЗрд▓) рдкрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ;
  2. CanvasRenderer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдлрд╛рд░реА рдкрд░ рднреА рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред

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

@redsend

рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ toDataURL рдФрд░ getImageData WebGL рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╕рд╛рдордЧреНрд░реА рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдпрд╣ рдорд╛рдирдХ рдореЗрдВ рднреА рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдкрд┐рдХреНрд╕реА рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

//if you want canvas
var canvas =renderer.extract.canvas(stage);
//if you want base64
var base64=renderer.extract.base64(stage);

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

рд╕рдлрд╛рд░реА/рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕/рдХреНрд░реЛрдо рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдиреАрдЪреЗ рдорд┐рд▓рд╛:
02 01 46

рдЕрдЬреАрдм! рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ ..

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдлрд╛рд░реА рдкрд░ рдХреИрдирд╡рд╛рд╕ рдХреЛ рдЙрд▓реНрдЯрд╛ рдлрд╝реНрд▓рд┐рдк рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрдмрдХрд┐ рдХреНрд░реЛрдо рдЗрд╕реЗ рд╕рд╣реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЕрдм рдореИрдВ рд╕рдлрд╛рд░реА рдкрд░ baseTexture.flipY = true рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдПрдХ рдЧрдВрджреЗ рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

diff --git a/src/core/renderers/webgl/WebGLRenderer.js b/src/core/renderers/webgl/WebGLRenderer.js
index 05258f6..82b1c84 100644
--- a/src/core/renderers/webgl/WebGLRenderer.js
+++ b/src/core/renderers/webgl/WebGLRenderer.js
@@ -396,6 +396,9 @@ WebGLRenderer.prototype.updateTexture = function (texture)

     gl.bindTexture(gl.TEXTURE_2D, texture._glTextures[gl.id]);

+    if (texture.flipY) {
+        gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1);
+    }
     gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultipliedAlpha);
     gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);

рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдХреЛ рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдХреИрдирд╡рд╛рд╕ рдХреЙрд▓ рдЯреВрдбрд╛рдЯрд╛рдпреВрдЖрд░рдПрд▓() рдкрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВред рд▓реМрдЯрд╛рдИ рдЧрдИ рдЫрд╡рд┐ рдирдИ рд╕рдлрд╛рд░реА рдкрд░ рд▓рдВрдмрд╡рдд рд░реВрдк рд╕реЗ рдлрд╝реНрд▓рд┐рдк рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрдмрдХрд┐ рдкреБрд░рд╛рдиреА рд╕рдлрд╛рд░реА (7.1 рдкрд░реАрдХреНрд╖рдг) рдФрд░ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ рдЧреИрд░ рдлрд╝реНрд▓рд┐рдк рдЫрд╡рд┐ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░реЗрдВ?

@holymonson рд╢рд╛рдпрдж рдкреБрд░рд╛рдиреА рд╕рдлрд╛рд░реА рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ?

рдЙрддреНрд╕реБрдХ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕реНрд░реЛрдд рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ?

рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдорд░рдиреЗ рдирд╣реАрдВ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП: рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдХреЛрдИ рд╣рд▓ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдФрд░ рдореБрдЭреЗ рдордЬрдмреВрд░ рдХреИрдирд╡рд╛рд╕ рдкреНрд░рддрд┐рдкрд╛рджрди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдкрдбрд╝рд╛ред

рдпрд╣ WebGL рдкреНрд░рд╕рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ premultipliedAlpha ; рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрджрд┐ premultipliedAlpha рджреВрд╕рд░реЗ рд░реЗрдВрдбрд░рд░ рдХреЗ рд▓рд┐рдП false ред рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреГрдердХ рдбреЗрдореЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдирдлрд░рдд рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдорд╛рдорд▓рд╛ рд╣реИ; рдХреЗрд╡рд▓ рд╕рдлрд╛рд░реА рдореЗрдВ toDataURL рд╕реЗ рдЙрддреНрдкрдиреНрди рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред
https://jsbin.com/qivife/14/edit?js ,output

рдХреНрдпрд╛ рдЫрд╡рд┐ рдХреЛ рдлрд╝реНрд▓рд┐рдк рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП toDataURL API рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

@redsend

рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ toDataURL рдФрд░ getImageData WebGL рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╕рд╛рдордЧреНрд░реА рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдпрд╣ рдорд╛рдирдХ рдореЗрдВ рднреА рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдкрд┐рдХреНрд╕реА рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

//if you want canvas
var canvas =renderer.extract.canvas(stage);
//if you want base64
var base64=renderer.extract.base64(stage);

var base64=renderer.extract.base64(stage); рдФрд░ рд╡рд░ рдХреИрдирд╡рд╛рд╕ =renderer.extract.canvas(stage); рдЙрд▓реНрдЯрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ рдмрдирд╛ рдирд╣реАрдВ рд░рд╣рддрд╛ рд╣реИред рдХреЛрдИ рд╕реБрдЭрд╛рд╡

рдореИрдВ PIXI.RenderTexture рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЫрд╡рд┐ рдЖрдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ рдЕрднреА рднреА рдЪрд┐рдкрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

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

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