์๋ ํ์ธ์, ์ํฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
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 */
Safari(iOS / Mac OS X)์์ ํ
์คํธํ ๋ renderer_2.view
๋ filmObj
์ ๋ํด ๊ฑฐ๊พธ๋ก ๋ค์งํ ๋ฐ๋ฉด renderer_1.view
๋ ์์ฐ์ค๋ฝ์ต๋๋ค. renderer_2
renderer_1.view
์์ ์๋ชป๋ ์ขํ๋ฅผ ๋ ๋๋งํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ฐฉ์ฉํ ๊ฒ์ด ์๋์ง ํ์ธํด ์ฃผ์๊ฒ ์ต๋๊น?
์ถ๊ฐ ์ ๋ณด:
CanvasRenderer
์ฌ์ฉํ๋ฉด Safari์์๋ ๋ชจ๋ ๊ฒ์ด ์ ์์
๋๋ค.Safari/Firefox/Chrome์์ ํ
์คํธํ ๊ฒฐ๊ณผ ์๋์ ๊ฐ์ต๋๋ค.
๊ธฐ์ด ํ! ๊ผญ ๋ณด์ธ์..
Safari์์ ์บ๋ฒ์ค๊ฐ ๊ฑฐ๊พธ๋ก ๋ค์งํ๋ ๊ฒ๊ณผ ๋น์ทํ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ง๋ง Chrome์์๋ ์ฌ๋ฐ๋ฅด๊ฒ ํ์๋ฉ๋๋ค.
์ด์ Safari์์ 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);
Sprites์ Sprites๋ฅผ ์ถ๊ฐํ ๋ค์ ์บ๋ฒ์ค ํธ์ถ toDataURL()์์ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ฐํ๋ ์ด๋ฏธ์ง๋ ์ต์ ์ฌํ๋ฆฌ์์ ์์ง์ผ๋ก ๋ค์งํ ๋ฐ๋ฉด, ๊ตฌํ ์ฌํ๋ฆฌ(7.1 ํ ์คํธ๋จ)์ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋ ๋ค์งํ์ง ์์ ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ์ ์ฌํญ์ด ์์ต๋๊น?
@holymonson ๋น์ทํ ํ๋์ด ์๋์ง ์์๋ณด๊ธฐ ์ํด ์ด์ ์ฌํ๋ฆฌ์์ ํ ์คํธํ ๊ฐ์น๊ฐ ์์ต๋๊น?
์ด ๋ฌธ์ ์ ์์ธ์ ์ฐพ์ ์ฌ๋์ด ์๋์ง ๊ถ๊ธํ์ญ๋๊น?
์ด ์ค๋ ๋๊ฐ ์ฃฝ์ง ์๋๋ก ํ๊ธฐ ์ํด: ๋๋ ๊ทธ๊ฒ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฐพ์ง ๋ชปํ๊ณ ๊ฐ์ ์บ๋ฒ์ค ๋ ๋๋ง์ผ๋ก ๋๋์๊ฐ์ผ ํ์ต๋๋ค.
์ด๊ฒ์ WebGL ์ปจํ
์คํธ์ ๊ด๋ จ์ด ์์ ์ ์์ต๋๋ค. premultipliedAlpha
; ์ ๊ฒฝ์ฐ์๋ premultipliedAlpha
๊ฐ ๋ ๋ฒ์งธ ๋ ๋๋ฌ์ ๋ํด false
๊ฒฝ์ฐ์๋ง ๋ฌธ์ ๋ฅผ ์ฌํํ ์ ์์ต๋๋ค. ํ์ธํ๋ ค๋ฉด ๊ฒฉ๋ฆฌ๋ ๋ฐ๋ชจ๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค.
์ด๋ป๊ฒ ๊ทธ๋ฐ ์ผ์ด ์ผ์ด๋ ์ ์๋์ง์ ๋ํ ์์ด๋์ด๊ฐ ์ซ์ง๋ง ๋จผ์ ์ฌํํด์ผ ํฉ๋๋ค.
๋ค์์ ์ฌํ ๊ฐ๋ฅํ ๊ฒฝ์ฐ์
๋๋ค. Safari์์ toDataURL
๋ก ์์ฑ๋ ์ด๋ฏธ์ง์๋ง ์ํฅ์ ์ค๋๋ค.
https://jsbin.com/qivife/14/edit?js ,์ถ๋ ฅ
์ด๋ฏธ์ง๊ฐ ๋ค์งํ์ง ์์ toDataURL API๋ก ๋ด๋ณด๋ด๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
@redsend
toDataURL ๋ฐ getImageData๊ฐ WebGL์ ๋ํ ์ฌ๋ฐ๋ฅธ ํญ๋ชฉ์ ๋ฐํํ๋ค๋ ๋ณด์ฅ์ ์์ผ๋ฉฐ ํ์ค์๋ ์์ต๋๋ค. PIXI ์ถ์ถ API๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
//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(๋จ๊ณ); ๋ฐ var ์บ๋ฒ์ค =renderer.extract.canvas(stage); ๊ฑฐ๊พธ๋ก ๋ ๋ฌธ์ ๋ฅผ ์์ ํ์ง๋ง ์บ๋ฒ์ค์ ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋๊ณ ๋ฐฐ๊ฒฝ์์ด ์ง์๋์ง ์์ต๋๋ค. ๋ชจ๋ ์ ์
์ด๋ฏธ์ง ํฌ๊ธฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ PIXI.RenderTexture๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ๋ฐฐ๊ฒฝ์์ด ์ฌ์ ํ ๊ณ ์ ๋์ง ์์ต๋๋ค.
์ด ์ค๋ ๋๋ ๋ซํ ํ ์ต๊ทผ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ ๊ฒผ์ต๋๋ค. ๊ด๋ จ ๋ฒ๊ทธ์ ๋ํ ์ ๋ฌธ์ ๋ฅผ ์ฌ์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@redsend
toDataURL ๋ฐ getImageData๊ฐ WebGL์ ๋ํ ์ฌ๋ฐ๋ฅธ ํญ๋ชฉ์ ๋ฐํํ๋ค๋ ๋ณด์ฅ์ ์์ผ๋ฉฐ ํ์ค์๋ ์์ต๋๋ค. PIXI ์ถ์ถ API๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.