gl.TexImage2D(level, internalformat, w, h, border, format, type, pixels)
#GL_TEXTURE_2D
auf.
Um Texturbilder zu definieren, rufen Sie gl.TexImage2D()
auf. Die Argumente
beschreiben die Parameter des Texturbildes, wie Höhe, Breite, Breite des
Rahmens, Detaillierungsstufe (siehe gl.TexParameter()) und
Anzahl der bereitgestellten Farbkomponenten. Die letzten drei Argumente
beschreiben, wie das Bild im Speicher dargestellt wird; sie sind identisch
mit den für glDrawPixels verwendeten Pixelformaten.
Daten werden von pixels
als eine Folge von vorzeichenbehafteten oder
vorzeichenlose Bytes, Shorts oder Longs oder einfach präzisen Gleitkommawerten
gelesen, abhängig vom type
, der #GL_UNSIGNED_BYTE
, #GL_BYTE
, #GL_BYTE
,
#GL_BITMAP
, #GL_UNSIGNED_SHORT
, #GL_SHORT
, #GL_UNSIGNED_INT
, #GL_INT
, #GL_INT
und #GL_FLOAT
sein kann. Diese Werte werden je nach format
in Gruppen von
einem, zwei, drei oder vier Werten zu Elementen zusammengefasst. Wenn der Typ
#GL_BITMAP
ist, werden die Daten als eine Zeichenkette von unsignierten Bytes
betrachtet (format
muss #GL_COLOR_INDEX
sein). Jedes Datenbyte wird als
acht 1-Bit-Elemente behandelt, wobei die Bitreihenfolge durch
#GL_UNPACK_LSB_FIRST
festgelegt wird. Siehe gl.PixelStore für Details.
Das erste Element entspricht der linken unteren Ecke des Texturbildes. Nachfolgende Elemente gehen von links nach rechts durch die restlichen Texel in der untersten Zeile des Texturbildes und dann in den nacheinander höheren Zeilen des Texturbildes. Das letzte Element entspricht der oberen rechten Ecke des Texturbildes.
format
bestimmt die Zusammensetzung jedes Elements in Pixeln. Es kann einen
von neun symbolischen Werten annehmen:
#GL_COLOR_INDEX
#GL_INDEX_SHIFT
nach links oder rechts und ergänzt ihn zu #GL_INDEX_OFFSET
.
Siehe gl.PixelTransfer für Details. Der resultierende Index wird
mit Hilfe der Tabellen #GL_PIXEL_MAP_I_TO_R
, #GL_PIXEL_MAP_I_TO_G
,
#GL_PIXEL_MAP_I_TO_B
und #GL_PIXEL_MAP_I_TO_A
in eine Reihe von
Farbkomponenten umgewandelt und in den Bereich [0,1] festgelegt.
#GL_RED
#GL_c_SCALE
multipliziert, zur
vorzeichenbehafteten Ausrichtung #GL_c_BIAS
addiert und in den Bereich
[0, 1] festgelegt. Siehe gl.PixelTransfer für Details.
#GL_GREEN
#GL_c_SCALE
multipliziert, zur
vorzeichenbehafteten Ausrichtung #GL_c_BIAS
addiert und in den Bereich
[0, 1] festgelegt. Siehe gl.PixelTransfer für Details.
#GL_BLUE
#GL_c_SCALE
multipliziert, zur
vorzeichenbehafteten Ausrichtung #GL_c_BIAS
addiert und in den Bereich
[0, 1] festgelegt. Siehe gl.PixelTransfer für Details.
#GL_ALPHA
#GL_c_SCALE
multipliziert, zur vorzeichenbehafteten Ausrichtung
#GL_c_BIAS
addiert und in den Bereich [0, 1] festgelegt.
Siehe gl.PixelTransfer für Details.
#GL_RGB
#GL_c_SCALE
multipliziert, zur vorzeichenbehafteten Ausrichtung #GL_c_BIAS
addiert und
in den Bereich [0, 1] festgelegt. Siehe gl.PixelTransfer für Details.
#GL_RGBA
#GL_c_SCALE
multipliziert, zur
vorzeichenbehafteten Ausrichtung #GL_c_BIAS
addiert und in den Bereich
[0, 1] festgelegt. Siehe gl.PixelTransfer für Details.
#GL_LUMINANCE
#GL_c_SCALE
multipliziert, zur vorzeichenbehafteten
Ausrichtung #GL_c_BIAS
addiert und in den Bereich [0, 1] festgelegt.
Siehe gl.PixelTransfer für Details.
#GL_LUMINANCE_ALPHA
#GL_c_SCALE
multipliziert, zur
vorzeichenbehafteten Ausrichtung #GL_c_BIAS
addiert und in den Bereich [0, 1]
festgelegt. Siehe gl.PixelTransfer für Details.
#GL_DEPTH_COMPONENT
#GL_DEPTH_SCALE
multipliziert, zur vorzeichenbehafteten Ausrichtung
#GL_DEPTH_BIAS
addiert und in den Bereich [0, 1] festgelegt.
Siehe gl.PixelTransfer für Details.
Wenn eine Anwendung die Textur in einer bestimmten Auflösung oder in einem
bestimmten Format speichern möchte, kann sie die Auflösung und das Format
mit internalformat
anfordern. internalformat
gibt das interne Format des
Textur-Feldes an. Siehe Interne Pixelformate für Details. GL wird
eine interne Darstellung wählen, die der vom internalformat
geforderten genau
entspricht, aber möglicherweise nicht genau übereinstimmt. (Die durch
#GL_LUMINANCE
, #GL_LUMINANCE_ALPHA
, #GL_RGB
und #GL_RGBA
angegebenen
Darstellungen müssen genau übereinstimmen. Die Zahlenwerte 1, 2, 3, und 4
können auch verwendet werden, um die obigen Darstellungen anzugeben.)
Ein Einkomponenten-Texturbild verwendet nur die Rotkomponente der aus Pixeln extrahierten RGBA-Farbe, ein Zweikomponentenbild das R und die A Werte, ein Dreikomponentenbild die Werte R, G und B und ein Vierkomponentenbild verwendet alle RGBA-Komponenten.
Die Texturierung hat im Farbindexmodus keine Wirkung.
Das Texturbild kann durch die gleichen Datenformate dargestellt werden
wie die Pixel in einem gl.DrawPixels(), nur dass
#GL_STENCIL_INDEX
und #GL_DEPTH_COMPONENT
nicht verwendet werden können.
gl.PixelStore() und gl.PixelTransfer()
Modi beeinflussen Texturbilder genau so, wie sie
gl.DrawPixels() beeinflussen.
Bitte beachten Sie, dass dieser Befehl direkt mit Speicherzeigern arbeitet. Es gibt auch eine Version, die mit Tabellen anstelle von Speicherzeigern arbeitet, aber das ist natürlich langsamer. Siehe gl.TexImage für Details. Siehe Mit Zeigern arbeiten für Details zur Verwendung von Speicherzeigern mit Hollywood.
Weitere Informationen finden Sie in einem OpenGL-Referenzhandbuch.
#GL_INVALID_ENUM
wird erzeugt, wenn format
keine akzeptierte Formatkonstante
ist. Andere Formatkonstanten als #GL_STENCIL_INDEX
werden akzeptiert.
#GL_INVALID_ENUM
wird erzeugt, wenn type
keine Typkonstante ist.
#GL_INVALID_ENUM
wird erzeugt, wenn type
#GL_BITMAP
ist und format
nicht #GL_COLOR_INDEX
ist.
#GL_INVALID_VALUE
wird erzeugt, wenn level
kleiner als 0 ist.
#GL_INVALID_VALUE
wird erzeugt, wenn level
größer als log2max ist, wobei max
der zurückgegebene Wert von #GL_MAX_TEXTURE_SIZE
ist.
#GL_INVALID_VALUE
wird erzeugt, wenn internalformat
nicht 1, 2, 3, 4 oder
eine der akzeptierten symbolischen Auflösungs- und Formatkonstanten ist.
#GL_INVALID_VALUE
wird erzeugt, wenn width
oder height
kleiner als 0 oder
größer als 2 + #GL_MAX_TEXTURE_SIZE
ist oder wenn entweder 2k + 2*border nicht
für einen ganzzahligen Wert von k dargestellt werden kann.
#GL_INVALID_VALUE
wird erzeugt, wenn border
nicht 0 oder 1 ist.
#GL_INVALID_OPERATION
wird erzeugt, wenn gl.TexImage2D()
zwischen
gl.Begin() und gl.End() ausgeführt wird.
gl.IsEnabled() mit dem Argument #GL_TEXTURE_2D