こんにちは、状況は次のとおりです。
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でテストされ、以下になりました。
変! 必ずご覧ください。
Chromeで正しく表示されるのに対し、Safariでキャンバスが上下逆さまになるという同様の問題があるようです。
今度は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);
スプライトをスプライトに追加してから、キャンバス上でtoDataURL()を呼び出すという同様の問題があります。 返される画像は新しいサファリでは垂直方向に反転しますが、古いサファリ(7.1テスト済み)や他のブラウザは反転していない画像を返すようです。 これを修正する方法の提案はありますか?
@holymonsonは、古いサファリでテストして、同様の動作があるかどうかを確認する価値がありますか?
誰かがこの問題の原因を見つけたかどうか興味がありますか?
このスレッドを死なせないために:私はそれに対する解決策を見つけられず、強制的なキャンバスレンダリングにフォールバックしなければなりませんでした。
これは、WebGLコンテキストpremultipliedAlpha
関連している可能性があります。 私の場合、2番目のレンダラーのpremultipliedAlpha
がfalse
である場合にのみ、問題を再現できます。 確認するには、分離されたデモを引き出す必要があります。
それがどのように起こるのかという考えは嫌いですが、最初にそれを再現する必要があります。
これが再現可能なケースです。 SafariでtoDataURL
で生成された画像にのみ影響します。
https://jsbin.com/qivife/14/edit?js、output
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(stage); およびvarcanvas = renderer.extract.canvas(stage); 逆さまの問題を修正しましたが、キャンバスのサイズが変更され、背景色が保持されません。 助言がありますか
画像サイズの問題を修正するPIXI.RenderTextureを使用していますが、背景色が固定されません
このスレッドは、閉じられた後に最近のアクティビティがないため、自動的にロックされています。 関連するバグについては、新しい問題を開いてください。
最も参考になるコメント
@redsend
toDataURLとgetImageDataがWebGLに適切なものを返すことは保証されていませんが、標準でもそうではありません。 PIXI抽出APIを使用する必要があります。