Signatur
Beschreibung
Die Methode isSampler() des WebGL2RenderingContext gibt true zurück, wenn das übergebene Objekt ein gültiges WebGLSampler ist. Sampler-Objekte speichern Abtastparameter wie Filterung (TEXTURE_MIN_FILTER, TEXTURE_MAG_FILTER) und Wrap-Modi (TEXTURE_WRAP_S/T/R) getrennt von der Textur. So lässt sich dieselbe Textur mit unterschiedlichen Einstellungen abtasten.
Ein Sampler gilt als gültig, wenn er mit createSampler() erzeugt, noch nicht mit deleteSampler() gelöscht wurde und zum selben Kontext gehört. Anders als bei manchen anderen WebGL-Objekten muss ein Sampler nicht erst mit bindSampler() gebunden werden, damit isSampler() true liefert.
Die Methode nützt vor allem beim Debuggen, bei Ressourcenverwaltung und Aufräumlogik (etwa nach einem Kontextverlust) sowie in defensivem Bibliothekscode, der fremde Objekte vor der Verwendung prüfen will.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $sampler Pflicht | WebGLSampler | null | Das zu prüfende Objekt. Bei null ist das Ergebnis false. |
Rückgabewert
true, wenn sampler ein gültiger, nicht gelöschter WebGLSampler dieses Kontexts ist, sonst false.Beispiele
Sampler erzeugen und prüfen
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl2');
const sampler = gl.createSampler();
console.log(gl.isSampler(sampler)); // gültig, auch ungebunden
gl.deleteSampler(sampler);
console.log(gl.isSampler(sampler)); // nach dem Löschen ungültig
Sampler konfigurieren und an Textureinheit binden
const gl = document.querySelector('canvas').getContext('webgl2');
const linearRepeat = gl.createSampler();
gl.samplerParameteri(linearRepeat, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
gl.samplerParameteri(linearRepeat, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.samplerParameteri(linearRepeat, gl.TEXTURE_WRAP_S, gl.REPEAT);
gl.samplerParameteri(linearRepeat, gl.TEXTURE_WRAP_T, gl.REPEAT);
if (gl.isSampler(linearRepeat)) {
gl.bindSampler(0, linearRepeat); // Textureinheit 0
console.log('Sampler aktiv auf Einheit 0');
}
Aufräumen eines Sampler-Caches
const gl = document.querySelector('canvas').getContext('webgl2');
const samplerCache = new Map([
['nearest', gl.createSampler()],
['linear', gl.createSampler()]
]);
const disposeSamplers = () => {
for (const [name, s] of samplerCache) {
if (gl.isSampler(s)) {
gl.deleteSampler(s);
console.log(`Sampler "${name}" gelöscht`);
}
}
samplerCache.clear();
};
disposeSamplers();
// Wichtig · Fallstricke
- Nur in WebGL 2 verfügbar. In einem
WebGLRenderingContext(WebGL 1) gibt es wederisSampler()noch Sampler-Objekte. Prüfe, obcanvas.getContext('webgl2')nichtnullliefert. - Nach einem Kontextverlust (
webglcontextlost) liefertisSampler()für alle bisherigen Samplerfalse. Sie müssen nachwebglcontextrestoredneu erzeugt werden. - Ein Sampler aus einem anderen WebGL-Kontext ergibt
false(bzw. einenINVALID_OPERATION-Fehler, je nach Implementierung). Er gilt dann nicht als gültig. - Ein gebundener Sampler überschreibt die Abtastparameter der Textur (
texParameteri) auf dieser Textureinheit. Das ist eine häufige Fehlerquelle, wenn Filtereinstellungen scheinbar „nicht greifen“. - Nicht im Render-Loop aufrufen: Wie andere
is*-Abfragen kann die Methode die GPU-Pipeline synchronisieren und so Leistung kosten.