Comment puis-je nettoyer et le déchargement d'un WebGL toile contexte de GPU après utilisation?
Comment nettoyer un contexte WebGL programme et décharger le programme, les tampons et tout de la GPU et dom-élément?
J'aimerais assurez-vous que nous ne sommes pas les détritus.
Aussi il serait bien de réutiliser la toile, si possible (et je ne sais pas si ce serait 2d
ou webgl
contexte).
la pile.gl a un joli paquet appelé gl-reset. Il nettoie le contexte webgl pour le ré-utiliser.
OriginalL'auteur Bartvds | 2014-05-11
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement perdre toute référence à votre gl contexte et tous gl objets et de la toile et de retirer la toile de la DOM. Malheureusement, parce que JavaScript est des ordures collectées on ne sait pas quand le navigateur ne fait libre de la mémoire. Il y a quelques tests de conformité pour essayer de tester ils le font correctement, mais si vous ne voulez pas juste espérer et prier ....
Gratuit toutes vos ressources en appelant
gl.deleteXXX
sur tout ce que vous avez créé et supprimez toutes les lier points. Cela signifie que pour chaque unité de texture appel gl.bindTexture sur toutes les cibles avec la valeur null, la même chose avec des tableaux, des tampons d'images et renderbuffers.Parce que vous ne pouvez pas lier la valeur null à un attribut, vous pouvez définir la taille de toutes vos tampons à 1 (zéro n'est pas admis) avant de les supprimer. Soit ça, ou faire un nouveau tampon et de l'attribuer à tous les attributs.
Exemple de la première
Ou faire un nouveau tampon et de l'attribuer à tous les attributs
Cette séparer le vieux tampons dans les attributs.
Enfin définir la taille du canevas de 1x1 pixel.
Ce n'est pas une solution parfaite, mais il permettra de libérer immédiatement tous les mais quelques k de mémoire, pas d'attente pour la collecte des ordures qui est hors de votre contrôle.
Comme pour la réutilisation de la toile à partir de zéro, vous ne pouvez pas. La toile de toujours avoir le même contexte de la première demande.
Voir aussi @Johan réponse sur
loseContext
gl.deleteXX
ressemble?Bonne explication, je l'ai utilisé mais je ne vois toujours pas arriver dégagé lorsque nous charger une nouvelle image sur le webgl contexte et de la nouvelle série de programmes se sont attachés. Vous pouvez prendre un coup d'oeil sur firefox shader editor
OriginalL'auteur gman
De perdre le contexte, l'utilisation de l'extension WEBGL_lose_context comme
Voir https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_lose_context/loseContext
restoreContext()
au lieu deloseContext()
. Aussi, les deux premières lignes suggèrent que ce n'est pas ce que vous voulez: "La WEBGL_lose_context.loseContext() la méthode est la partie de l'API WebGL et vous permet de simuler de perdre le contexte d'une WebGLRenderingContext contexte. Il déclenche la procédure décrite dans le WebGL spécification pour la manipulation contexte perdu. Le contexte restera perdu jusqu'à WEBGL_lose_context.restoreContext() est appelée."spec n'est pas le code, il peut être interprété de manière ambiguë. Cependant, il y a également les éléments suivants: les Implémentations de détruire le sous-jacent contexte graphique et toutes les ressources graphiques lorsque cette méthode est appelée. C'est le mécanisme recommandé pour les applications de programmation pour stopper leur utilisation de l'API WebGL. Concernant le mot simuler - je suppose qu'il a été choisi parce que Cette extension expose de nouvelles fonctionnalités permettant de simuler la perte et de restauration de la WebGL contexte, , même sur les plates-formes où le contexte ne peut jamais être perdu - c'est à dire la simulation a lieu lors de la destruction est impossible
Merci pour les précisions!
IE ne prend pas en charge cette méthode.
OriginalL'auteur Johan van Breda