9 Stimmen

Löschen von WebGL-Kontexten

Ich habe eine Seite, die viele Webgl-Kontexte verwendet, einen pro Leinwand. Leinwände können neu geladen, verkleinert usw. werden, wodurch jedes Mal neue Kontexte erstellt werden. Es funktioniert für mehrere Neuladungen, aber letztendlich, wenn ich versuche, einen neuen Kontext zu erstellen, wird ein Nullwert zurückgegeben. Ich gehe davon aus, dass mir der Speicher ausgeht.

Ich würde gerne die Kontexte löschen können, die ich nicht mehr verwende, um den Speicher wiederherzustellen und ihn für meine neuen Kontexte zu verwenden. Gibt es eine Möglichkeit, dies zu tun? Oder gibt es einen besseren Weg, um mit vielen Leinwänden umzugehen?

Danke.

7voto

gman Punkte 91048

Dies ist ein langjähriger Fehler in Chrome und WebKit

http://code.google.com/p/chromium/issues/detail?id=124238

Es gibt keine Möglichkeit, einen Kontext in WebGL "zu löschen". Kontexte werden durch die Garbage Collection gelöscht, wann immer das System dazu kommt. Alle Ressourcen werden zu diesem Zeitpunkt freigegeben, aber es ist am besten, wenn Sie Ihre eigenen Ressourcen löschen, anstatt darauf zu warten, dass der Browser sie löscht.

Wie gesagt, dies ist ein Fehler. Es wird irgendwann behoben, aber ich habe keine geschätzte Zeit.

Ich würde vorschlagen, keine Leinwände zu löschen. Behalten Sie sie und verwenden Sie sie erneut.

Ein weiterer Vorschlag wäre uns mitzuteilen, warum Sie 200 Leinwände benötigen. Vielleicht ließe sich das Problem, das Sie lösen möchten, auf eine andere Art und Weise besser lösen.

4voto

Aesthete Punkte 17984

Ich würde annehmen, dass bis Sie alle Ressourcen freigeben, die mit Ihrem Kontext verbunden sind, etwas immer noch Referenzen darauf hält und es daher noch existieren wird.

Ein paar Dinge, die Sie ausprobieren können:

  • Hier ist etwas Debug-GL-Code. Es gibt eine Funktion, um einen Kontext auf seinen Ursprungszustand zurückzusetzen. Versuchen Sie das, bevor Sie das dazugehörige Canvas löschen.

  • Es ist möglich, dass irgendein Ereignissystem Referenzen auf Ihre Kontexte hält und sie in einem Zombie-Zustand lässt.

  • Löschen Sie Ihre Canvases aus dem DOM? Ich bin sicher, es gibt eine Begrenzung für die Ressourcen, die die Seite in einer Instanz aufrechterhalten kann.

SO hat sich beschwert, dass unser Kommentarthread etwas lang wurde. Versuchen Sie diese Dinge zuerst und lassen Sie mich wissen, ob es hilft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X