Signatur
Beschreibung
Die Methode isTexture() gibt true zurück, wenn das übergebene Objekt eine gültige Textur des aktuellen WebGL-Kontexts ist. Sie eignet sich vor allem für Diagnose, Debugging und Aufräumlogik, etwa um zu prüfen, ob eine Textur bereits mit deleteTexture() freigegeben wurde oder nach einem Kontextverlust noch nutzbar ist.
Wichtig: Eine Textur gilt erst dann als „Textur“, wenn sie mindestens einmal mit bindTexture() gebunden wurde. Ein Objekt, das nur mit createTexture() erzeugt, aber noch nie gebunden wurde, liefert daher false. Erst beim ersten Binden legt die Grafikkarte das eigentliche Texturobjekt samt Ziel (TEXTURE_2D, TEXTURE_CUBE_MAP usw.) an.
Außerdem liefert die Methode false, wenn null übergeben wird, wenn die Textur gelöscht wurde, wenn sie aus einem anderen Kontext stammt oder wenn der Kontext verloren gegangen ist (webglcontextlost). Die Methode ist auch in WebGL2RenderingContext verfügbar.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $texture Pflicht | WebGLTexture | null | Das zu prüfende Texturobjekt, typischerweise zuvor mit gl.createTexture() erzeugt. |
Beispiele
Lebenszyklus einer Textur prüfen
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl');
const texture = gl.createTexture();
console.log(gl.isTexture(texture)); // noch nie gebunden
gl.bindTexture(gl.TEXTURE_2D, texture);
console.log(gl.isTexture(texture)); // jetzt gültig
gl.deleteTexture(texture);
console.log(gl.isTexture(texture)); // gelöscht
Sicheres Aufräumen in einem Textur-Cache
const gl = document.querySelector('canvas').getContext('webgl');
const textureCache = new Map();
const loadTexture = (name, image) => {
const tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
textureCache.set(name, tex);
return tex;
};
const disposeAll = () => {
for (const [name, tex] of textureCache) {
if (gl.isTexture(tex)) {
gl.deleteTexture(tex);
console.log(`Textur "${name}" freigegeben`);
}
}
textureCache.clear();
};
const pixel = new ImageData(new Uint8ClampedArray([255, 0, 0, 255]), 1, 1);
loadTexture('rot', pixel);
disposeAll();
Verhalten bei null und Kontextverlust
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl');
const tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
console.log(gl.isTexture(null));
const ext = gl.getExtension('WEBGL_lose_context');
canvas.addEventListener('webglcontextlost', () => {
console.log('Nach Kontextverlust:', gl.isTexture(tex));
});
ext?.loseContext();
// Wichtig · Fallstricke
- Häufiger Fallstrick:
createTexture()allein reicht nicht – ohne vorherigesbindTexture()liefertisTexture()false. Als reiner „Existiert das JS-Objekt?“-Test ist die Methode daher ungeeignet. - Nach einem Kontextverlust sind alle Texturen ungültig und müssen nach
webglcontextrestoredneu erzeugt werden; alte Objekte werden nie wieder gültig. - Performance: Abfragen wie
isTexture()können eine Synchronisierung mit dem GPU-Prozess erzwingen. Nicht in jedem Frame im Render-Loop aufrufen, sondern besser den Zustand selbst verwalten. - Texturen aus einem anderen WebGL-Kontext ergeben
false. - Kompatibilität: in allen modernen Browsern verfügbar, sowohl in WebGL 1 als auch in WebGL 2.