Привет, вот такая ситуация:
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 отображает его правильно.
Теперь я устанавливаю baseTexture.flipY = true
в Safari и использую грязный прием ниже, чтобы преодолеть это.
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
; в моем случае я могу воспроизвести проблему только в том случае, если premultipliedAlpha
равно false
для второго средства визуализации. Для проверки нужно будет вытащить изолированную демонстрацию.
Я ненавижу идею о том, как такое могло случиться, но сначала мне нужно воспроизвести ее.
Вот воспроизводимый случай; влияет только на изображения, созданные с помощью toDataURL
в Safari.
https://jsbin.com/qivife/14/edit?js , вывод
есть ли способ экспортировать с помощью toDataURL API изображение, которое не перевернуто?
@redsend
Не гарантируется, что toDataURL и getImageData вернут правильный материал для WebGL, даже не в стандарте. Вы должны использовать API извлечения 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 (этап); и var canvas = renderer.extract.canvas (stage); исправить проблему перевернутого изображения. Но затем размер холста изменился, и цвета фона не сохраняются. Какие-либо предложения
Я использую PIXI.RenderTexture, который устраняет проблему с размером изображения, но цвет фона по-прежнему не прилипает
Этот поток был автоматически заблокирован, поскольку после его закрытия в последнее время не было никаких действий. Пожалуйста, откройте новую проблему для связанных ошибок.
Самый полезный комментарий
@redsend
Не гарантируется, что toDataURL и getImageData вернут правильный материал для WebGL, даже не в стандарте. Вы должны использовать API извлечения PIXI: