Signatur
Beschreibung
getTexParameter() ist das Gegenstück zu texParameteri() und texParameterf() und liefert den aktuellen Wert eines Textur-Parameters. Die Methode bekommt kein Texturobjekt übergeben. Sie liest aus der Textur, die im Moment an das Ziel gebunden ist (gl.TEXTURE_2D oder gl.TEXTURE_CUBE_MAP). Vorher muss also gl.bindTexture() aufgerufen worden sein.
Typische Einsatzfälle sind Debugging, automatisierte Tests, Werkzeuge zum Untersuchen von Szenen und generischer Code. Solcher Code prüft etwa, ob der TEXTURE_MIN_FILTER einer Textur Mipmaps verlangt, bevor generateMipmap() aufgerufen wird. Oder er prüft, ob eine NPOT-Textur (Seitenlängen keine Zweierpotenz) in WebGL 1 korrekt auf CLAMP_TO_EDGE steht.
Erlaubte Werte für pname in WebGL 1:
gl.TEXTURE_MAG_FILTER,gl.TEXTURE_MIN_FILTER,gl.TEXTURE_WRAP_S,gl.TEXTURE_WRAP_T, jeweils vom TypGLenum(Zahl)ext.TEXTURE_MAX_ANISOTROPY_EXT(GLfloat), nur mit der ErweiterungEXT_texture_filter_anisotropic
WebGL 2 (WebGL2RenderingContext) erlaubt zusätzlich TEXTURE_BASE_LEVEL, TEXTURE_MAX_LEVEL, TEXTURE_MIN_LOD, TEXTURE_MAX_LOD, TEXTURE_WRAP_R, TEXTURE_COMPARE_FUNC, TEXTURE_COMPARE_MODE, TEXTURE_IMMUTABLE_FORMAT (boolean) und TEXTURE_IMMUTABLE_LEVELS. Als Ziele kommen dort gl.TEXTURE_3D und gl.TEXTURE_2D_ARRAY hinzu.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $target Pflicht | GLenum (number) | Bindungsziel der Textur: gl.TEXTURE_2D oder gl.TEXTURE_CUBE_MAP. In WebGL 2 zusätzlich gl.TEXTURE_3D und gl.TEXTURE_2D_ARRAY. |
|
| $pname Pflicht | GLenum (number) | Der abzufragende Parameter, z. B. gl.TEXTURE_MIN_FILTER, gl.TEXTURE_WRAP_S oder ext.TEXTURE_MAX_ANISOTROPY_EXT. |
Rückgabewert
GLenum-Zahl, für LOD und Anisotropie ein GLfloat, für Level-Angaben ein GLint und für TEXTURE_IMMUTABLE_FORMAT ein boolean. Ist keine Textur gebunden oder sind die Argumente ungültig, kommt null zurück.Beispiele
Filter-Modus einer Textur auslesen
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl');
const tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
const minFilter = gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER);
console.log(minFilter === gl.LINEAR); // true
console.log(minFilter); // Zahlenwert der Konstante
Mipmaps nur erzeugen, wenn der Filter sie braucht
const needsMipmaps = (gl, target) => {
const f = gl.getTexParameter(target, gl.TEXTURE_MIN_FILTER);
return [
gl.NEAREST_MIPMAP_NEAREST, gl.LINEAR_MIPMAP_NEAREST,
gl.NEAREST_MIPMAP_LINEAR, gl.LINEAR_MIPMAP_LINEAR
].includes(f);
};
const gl = document.createElement('canvas').getContext('webgl');
const tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 256, 256, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
// Standardwert des MIN_FILTER ist NEAREST_MIPMAP_LINEAR
if (needsMipmaps(gl, gl.TEXTURE_2D)) {
gl.generateMipmap(gl.TEXTURE_2D);
console.log('Mipmaps erzeugt');
}
NPOT-Textur und Anisotropie prüfen (Debug-Helfer)
const gl = document.createElement('canvas').getContext('webgl');
const tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT);
const wrapNames = {
[gl.REPEAT]: 'REPEAT',
[gl.CLAMP_TO_EDGE]: 'CLAMP_TO_EDGE',
[gl.MIRRORED_REPEAT]: 'MIRRORED_REPEAT'
};
const s = gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S);
const t = gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T);
console.log(`WRAP_S=${wrapNames[s]}, WRAP_T=${wrapNames[t]}`);
const ext = gl.getExtension('EXT_texture_filter_anisotropic');
if (ext) {
console.log('Anisotropie:', gl.getTexParameter(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT));
}
WebGL 2: unveränderliche Textur erkennen
const gl = document.createElement('canvas').getContext('webgl2');
const tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texStorage2D(gl.TEXTURE_2D, 4, gl.RGBA8, 128, 128);
console.log(gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_IMMUTABLE_FORMAT)); // true
console.log(gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_IMMUTABLE_LEVELS)); // 4