Three.js: SMAAPass: textura marcada para actualización, pero la imagen está incompleta

Creado en 29 oct. 2018  ·  4Comentarios  ·  Fuente: mrdoob/three.js

Descripción del problema

Cuando se utiliza el SMAAPass, se registra una advertencia:
THREE.WebGLRenderer: Texture marked for update but image is incomplete
Esta advertencia ocurre porque Image.complete es falso, después de configurar Image.complete parece que es asincrónico.

Incluya también un ejemplo en vivo si es posible. Puede comenzar con estas plantillas:

Versión Three.js
  • [] Desarrollo
  • [x] r97
  • [] ...
Navegador
  • [x] Todos ellos
  • [ ] Cromo
  • [] Firefox
  • [ ] Explorador de Internet
SO
  • [x] Todos ellos
  • [] Windows
  • [ ] Mac OS
  • [] Linux
  • [] Android
  • [] iOS
Requisitos de hardware (tarjeta gráfica, dispositivo VR, ...)
Bug

Comentario más útil

Eso me parece un truco. Considere un patrón más convencional:

var image = new Image();
image.src = dataURL;

var texture = new THREE.Texture( image );

image.onload = function () {
    texture.needsUpdate = true;
};

Todos 4 comentarios

Tienes razón. Una solución simple podría parecerse a la siguiente sección de código. Lo ideal sería colocarlo después de esta línea en SMAAPass :

var self = this;

setTimeout( function () {

        // assigning data to HTMLImageElement.src is asynchronous (see #15162)
        // using setTimeout() avoids the warning "Texture marked for update but image is incomplete"

    self.searchTexture.needsUpdate = true;
    self.areaTexture.needsUpdate = true;

}, 0 );

¿Le gustaría hacer un PR con los cambios?

Eso me parece un truco. Considere un patrón más convencional:

var image = new Image();
image.src = dataURL;

var texture = new THREE.Texture( image );

image.onload = function () {
    texture.needsUpdate = true;
};

De hecho, eso es mejor 👍

Lo cambiaré para cargar devoluciones de llamada.

¿Fue útil esta página
0 / 5 - 0 calificaciones