Three.js: SMAAPass: Textur zum Aktualisieren markiert, aber das Bild ist unvollständig

Erstellt am 29. Okt. 2018  ·  4Kommentare  ·  Quelle: mrdoob/three.js

Beschreibung des Problems

Bei Verwendung des SMAAPass wird eine Warnung protokolliert:
THREE.WebGLRenderer: Texture marked for update but image is incomplete
Diese Warnung tritt auf, weil Image.complete falsch ist. Nach dem Festlegen von Image.complete sieht es so aus, als wäre es asynchron.

Bitte fügen Sie nach Möglichkeit auch ein Live-Beispiel bei. Sie können mit diesen Vorlagen beginnen:

Three.js Version
  • [] Dev
  • [x] r97
  • [] ...
Browser
  • [x] Alle von ihnen
  • [ ] Chrom
  • [ ] Feuerfuchs
  • [ ] Internet Explorer
Betriebssystem
  • [x] Alle von ihnen
  • [] Windows
  • [ ] Mac OS
  • [] Linux
  • [ ] Android
  • [] iOS
Hardwareanforderungen (Grafikkarte, VR-Gerät, ...)
Bug

Hilfreichster Kommentar

Das sieht für mich nach einem Hack aus. Bitte betrachten Sie ein konventionelleres Muster:

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

var texture = new THREE.Texture( image );

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

Alle 4 Kommentare

Du hast recht. Eine einfache Lösung könnte wie im folgenden Codeabschnitt aussehen. Idealerweise wird es nach dieser Zeile in 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 );

Möchten Sie mit den Änderungen PR machen?

Das sieht für mich nach einem Hack aus. Bitte betrachten Sie ein konventionelleres Muster:

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

var texture = new THREE.Texture( image );

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

In der Tat ist das schöner 👍

Ich werde es in Onload-Rückrufe ändern.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen