Signatur
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
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.