Pixi.js: SafariでWebGLを使用して逆さまにレンダリングする

作成日 2016年01月12日  ·  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 */

Safari(iOS / Mac OS X)でテストすると、 renderer_2.viewfilmObjに対して上下逆になりますが、 renderer_1.viewは自然です。 renderer_2renderer_1.view誤った座標をレンダリングしているようです。 摩耗がないか確認していただけますか?

追加情報:

  1. Chrome(デスクトップ/モバイル)では、すべて問題ありません。
  2. CanvasRendererすると、Safariでも問題ありません。

最も参考になるコメント

@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);

全てのコメント15件

Safari / Firefox / Chromeでテストされ、以下になりました。
02 01 46

変! 必ずご覧ください。

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番目のレンダラーのpremultipliedAlphafalseである場合にのみ、問題を再現できます。 確認するには、分離されたデモを引き出す必要があります。

それがどのように起こるのかという考えは嫌いですが、最初にそれを再現する必要があります。

これが再現可能なケースです。 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を使用していますが、背景色が固定されません

このスレッドは、閉じられた後に最近のアクティビティがないため、自動的にロックされています。 関連するバグについては、新しい問題を開いてください。

このページは役に立ちましたか?
0 / 5 - 0 評価