Start · Sprachen · JavaScript · Referenz · WebGL2RenderingContext.isSampler()

WebGL2RenderingContext.isSampler()

Methode

Prüft, ob das übergebene Objekt ein gültiges, noch nicht gelöschtes <code>WebGLSampler</code>-Objekt des aktuellen WebGL-2-Kontexts ist.

seit JavaScript WebGL 2.0 – Baseline: alle modernen Browser (seit Kategorie: webapi

Signatur

WebGL2RenderingContext.prototype.isSampler(sampler)

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

Typ
boolean
Beschreibung
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
true false

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');
}
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();
Sampler "nearest" gelöscht Sampler "linear" gelöscht

// Wichtig · Fallstricke

  • Nur in WebGL 2 verfügbar. In einem WebGLRenderingContext (WebGL 1) gibt es weder isSampler() noch Sampler-Objekte. Prüfe, ob canvas.getContext('webgl2') nicht null liefert.
  • Nach einem Kontextverlust (webglcontextlost) liefert isSampler() für alle bisherigen Sampler false. Sie müssen nach webglcontextrestored neu erzeugt werden.
  • Ein Sampler aus einem anderen WebGL-Kontext ergibt false (bzw. einen INVALID_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.