Start · Sprachen · JavaScript · Referenz · EXT_texture_norm16 extension

EXT_texture_norm16 extension

Schnittstelle

WebGL-2-Erweiterung für normierte 16-Bit-Formate (<code>R16</code>, <code>RG16</code>, <code>RGB16</code>, <code>RGBA16</code> und die <code>_SNORM</code>-Varianten) bei Texturen und Renderbuffern.

seit JavaScript WebGL 2 – Erweiterung, vor allem in Chromium-Brows Kategorie: webapi

Signatur

interface EXT_texture_norm16

Beschreibung

EXT_texture_norm16 ergänzt WebGL 2 um normierte Festkommaformate mit 16 Bit pro Kanal. Die vorzeichenlosen Formate (UNORM) decken den Bereich 0,0 bis 1,0 ab, die vorzeichenbehafteten (SNORM) den Bereich −1,0 bis 1,0. Gespeichert werden 16-Bit-Ganzzahlen. Beim Sampeln im Shader kommen aber normierte Gleitkommawerte heraus, genau wie bei RGBA8. Die Formate sind 256-mal feiner abgestuft als 8 Bit und belegen nur halb so viel Speicher wie R32F.

Typische Einsatzfälle:

  • Höhenkarten (Heightmaps) für Gelände ohne sichtbare Treppenstufen
  • Bilddaten aus 16-Bit-PNG oder 16-Bit-TIFF
  • medizinische und wissenschaftliche Bilder, z. B. DICOM mit 12 bis 16 Bit
  • Normal-Maps und Vektorfelder mit negativen Werten (dafür die SNORM-Formate)
  • präzise Render-Ziele, etwa für Tiefen- oder Distanzwerte in Nachbearbeitungsschritten

Anders als bei Integer-Texturen wie R16UI sind LINEAR-Filterung und Mipmapping erlaubt. Im Shader nimmt man einen normalen sampler2D und keinen usampler2D. R16_EXT, RG16_EXT und RGBA16_EXT sind außerdem farbrenderbar, lassen sich also als Framebuffer-Anhang oder über renderbufferStorage() verwenden.

Aktiviert wird die Erweiterung mit gl.getExtension("EXT_texture_norm16"). Das Objekt hat keine Methoden, sondern nur Konstanten für den Parameter internalformat von texImage2D(), texImage3D(), texStorage2D(), texStorage3D() und renderbufferStorage(). Zu den UNORM-Formaten gehört der Typ gl.UNSIGNED_SHORT mit einem Uint16Array, zu den SNORM-Formaten der Typ gl.SHORT mit einem Int16Array.

Parameter

Name Typ Default Beschreibung
$R16_EXT GLenum (0x822A) Ein Kanal, 16 Bit, vorzeichenlos normiert. format: gl.RED, type: gl.UNSIGNED_SHORT. Farbrenderbar und filterbar.
$RG16_EXT GLenum (0x822C) Zwei Kanäle, je 16 Bit, UNORM. format: gl.RG, type: gl.UNSIGNED_SHORT. Farbrenderbar.
$RGB16_EXT GLenum (0x8054) Drei Kanäle, je 16 Bit, UNORM. format: gl.RGB, type: gl.UNSIGNED_SHORT. Nicht renderbar.
$RGBA16_EXT GLenum (0x805B) Vier Kanäle, je 16 Bit, UNORM. format: gl.RGBA, type: gl.UNSIGNED_SHORT. Farbrenderbar.
$R16_SNORM_EXT GLenum (0x8F98) Ein Kanal, 16 Bit, vorzeichenbehaftet normiert (−1,0 bis 1,0). format: gl.RED, type: gl.SHORT. Nicht renderbar.
$RG16_SNORM_EXT GLenum (0x8F99) Zwei Kanäle, SNORM. format: gl.RG, type: gl.SHORT. Passt gut zu Normal-Maps mit zwei Komponenten.
$RGB16_SNORM_EXT GLenum (0x8F9A) Drei Kanäle, SNORM. format: gl.RGB, type: gl.SHORT.
$RGBA16_SNORM_EXT GLenum (0x8F9B) Vier Kanäle, SNORM. format: gl.RGBA, type: gl.SHORT.

Rückgabewert

Typ
EXT_texture_norm16 | null
Beschreibung
gl.getExtension("EXT_texture_norm16") liefert das Erweiterungsobjekt mit den oben genannten Konstanten. Wird die Erweiterung nicht unterstützt oder ist der Kontext nur WebGL 1, kommt null zurück.