Three.js: SMAAPass: Texture marquée pour mise à jour mais l'image est incomplète

Créé le 29 oct. 2018  ·  4Commentaires  ·  Source: mrdoob/three.js

description du problème

Lors de l'utilisation du SMAAPass, un avertissement est enregistré:
THREE.WebGLRenderer: Texture marked for update but image is incomplete
Cet avertissement se produit car Image.complete est faux, après avoir défini Image.complete il semble qu'il est asynchrone.

Veuillez également inclure un exemple en direct si possible. Vous pouvez partir de ces modèles:

Version Three.js
  • [] Dev
  • [x] r97
  • [] ...
Le navigateur
  • [x] Tous
  • [] Chrome
  • [] Firefox
  • [ ] Internet Explorer
OS
  • [x] Tous
  • [ ] Les fenêtres
  • [] macOS
  • [] Linux
  • [ ] Android
  • [] iOS
Configuration matérielle requise (carte graphique, périphérique VR, ...)
Bug

Commentaire le plus utile

Cela ressemble à un hack pour moi. Veuillez considérer un modèle plus conventionnel:

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

var texture = new THREE.Texture( image );

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

Tous les 4 commentaires

Tu as raison. Un correctif simple pourrait ressembler à la section de code suivante. Idéalement, il serait placé après cette ligne dans 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 );

Souhaitez-vous faire un PR avec les changements?

Cela ressemble à un hack pour moi. Veuillez considérer un modèle plus conventionnel:

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

var texture = new THREE.Texture( image );

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

En effet, c'est mieux 👍

Je vais le changer pour les rappels onload.

Cette page vous a été utile?
0 / 5 - 0 notes