Hai, inilah situasinya:
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 */
Saat mengujinya di Safari (iOS / Mac OS X), renderer_2.view
terbalik terhadap filmObj
, sedangkan renderer_1.view
adalah alami. Sepertinya renderer_2
merender koordinat yang salah pada renderer_1.view
. Tolong periksa apakah ada yang usang?
Info Tambahan:
CanvasRenderer
semuanya juga baik-baik saja, bahkan di Safari.Diuji di Safari / Firefox / Chrome dan dapatkan di bawah:
aneh! akan pastikan untuk melihat..
Saya sepertinya memiliki masalah yang sama dengan kanvas yang terbalik di Safari sedangkan Chrome menampilkannya dengan benar.
Sekarang saya mengatur baseTexture.flipY = true
di Safari dan menggunakan hack kotor di bawah ini untuk mengatasinya.
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);
Saya memiliki masalah serupa di mana saya menambahkan Sprite ke Sprite dan kemudian pada panggilan kanvas toDataURL(). Gambar yang dikembalikan dibalik secara vertikal pada safari yang lebih baru, sementara safari yang lebih lama (7.1 diuji) dan browser lain tampaknya mengembalikan gambar yang tidak dibalik. Ada saran bagaimana cara memperbaikinya?
@holymonson mungkin layak untuk diuji pada safari yang lebih lama untuk melihat apakah Anda memiliki perilaku serupa?
Ingin tahu apakah ada yang menemukan sumber masalah ini?
demi tidak membiarkan utas ini mati: Saya belum menemukan solusi untuk itu dan harus kembali ke rendering kanvas paksa.
Ini mungkin terkait dengan konteks WebGL premultipliedAlpha
; dalam kasus saya, saya hanya dapat mereproduksi masalah jika premultipliedAlpha
adalah false
untuk penyaji kedua. Perlu mengeluarkan demo terisolasi untuk memverifikasi.
Saya benci ide bagaimana itu bisa terjadi, tetapi saya harus mereproduksinya terlebih dahulu.
Berikut ini adalah kasus yang dapat direproduksi; hanya memengaruhi gambar yang dihasilkan dengan toDataURL
di Safari.
https://jsbin.com/qivife/14/edit?js ,output
apakah ada cara untuk mengekspor dengan toDataURL API gambar tidak dibalik?
@redsend
Itu tidak menjamin bahwa toDataURL dan getImageData mengembalikan hal-hal yang tepat untuk WebGL, bahkan tidak dalam standar. Anda harus menggunakan API ekstrak PIXI:
//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(tahap); dan var canvas =renderer.extract.canvas(tahap); perbaiki masalah terbalik Tapi kemudian ukuran kanvas telah berubah, dan warna latar belakang tidak bertahan. Ada saran?
Saya menggunakan PIXI.RenderTexture yang memperbaiki masalah ukuran gambar, tetapi warna latar belakang tetap tidak menempel
Utas ini telah dikunci secara otomatis karena tidak ada aktivitas terbaru setelah ditutup. Silakan buka edisi baru untuk bug terkait.
Komentar yang paling membantu
@redsend
Itu tidak menjamin bahwa toDataURL dan getImageData mengembalikan hal-hal yang tepat untuk WebGL, bahkan tidak dalam standar. Anda harus menggunakan API ekstrak PIXI: