gl.GetTexImageRaw(target, level, format, type, pixels)
gl.GetTexImageRaw()
schreibt die Pixel eines Texturbildes in pixels
. Dies
muss ein Speicherpuffer sein, der von dem Hollywood-Befehl AllocMem()
zugewiesen und von GetMemPointer()
zurückgegeben wird. Um die
erforderliche Größe der pixels
zu bestimmen, verwenden Sie
gl.GetTexLevelParameter(), um die
Abmessungen des internen Texturbildes zu bestimmen und skalieren
dann die erforderliche Anzahl von Pixeln durch den für jedes Pixel
erforderlichen Speicherplatz, basierend auf format
und type
. Achten
Sie darauf, dass Sie die Pixelspeicherparameter berücksichtigen,
insbesondere #GL_PACK_ALIGNMENT
.
Die unterstützten Werte für format
sind #GL_RED
, #GL_GREEN
, #GL_BLUE
,
#GL_ALPHA
, #GL_RGB
, #GL_RGBA
, #GL_LUMINANCE
und #GL_LUMINANCE_ALPHA
.
Unterstützte Datentypen für type
sind #GL_UNSIGNED_BYTE
, #GL_BYTE
,
#GL_UNSIGNED_SHORT
, #GL_SHORT
, #GL_UNSIGNED_INT
, #GL_INT
und #GL_FLOAT
.
Die Pixel werden als Werte vom Typ type
in den Speicherpuffer geschrieben.
target
gibt an, ob das gewünschte Texturbild eines ist, das durch
gl.TexImage1D() (#GL_TEXTURE_1D
) oder
gl.TexImage2D() (#GL_TEXTURE_2D
) angegeben wird.
level
gibt die Detaillierungsstufe des gewünschten Bildes an. format
gibt das Format des gewünschten Bildfeldes an.
Siehe gl.TexImage2D für eine Beschreibung der zulässigen Werte für den Formatparameter.
Um die Funktionsweise von gl.GetTexImageRaw()
zu verstehen, betrachten Sie das
ausgewählte interne Vierkomponenten-Texturbild als einen RGBA-Farbpuffer in
der Größe des Bildes. Die Semantik von gl.GetTexImageRaw()
ist dann identisch
mit der von gl.ReadPixels(), mit der Ausnahme, dass
keine Pixelübertragungsoperationen durchgeführt werden, wenn sie mit dem
gleichen Format und Typ aufgerufen werden, wobei x und y auf 0 gesetzt sind,
die Breite auf die Breite des Texturbildes (einschließlich Rand, wenn einer
angegeben wurde) und die Höhe auf 1 für 1D-Bilder oder auf die Höhe des
Texturbildes (einschließlich Rand, wenn einer angegeben wurde) eingestellt
wird für 2D-Bilder. Da das interne Texturbild ein RGBA-Bild ist, werden die
Pixelformate #GL_COLOR_INDEX
, #GL_STENCIL_INDEX
und #GL_DEPTH_COMPONENT
sowie der Pixeltyp #GL_BITMAP
nicht akzeptiert.
Wenn das ausgewählte Texturbild keine vier Komponenten enthält, werden die folgenden Zuordnungen angewendet: Einkomponenten-Texturen werden als RGBA-Puffer mit Rot auf den Einkomponentenwert, Grün auf 0, Blau auf 0 und Alpha auf 1 gesetzt. Zweikomponenten-Texturen werden als RGBA-Puffer mit Rot auf den Wert der Komponente 0, Alpha auf den Wert der Komponente 1 und Grün und Blau auf 0 gesetzt. 3-Komponenten-Texturen werden schließlich als RGBA-Puffer mit Rot auf Komponente 0, Grün auf Komponente 1, Blau auf Komponente 2 und Alpha auf 1 gesetzt.
Wenn Sie möchten, dass die Pixel in einer Tabelle anstelle eines Speicherpuffers zurückgegeben werden, können Sie den Befehl gl.GetTexImage() verwenden. Siehe Mit Zeigern arbeiten für Details zur Verwendung von Speicherzeigern mit Hollywood.
Weitere Informationen finden Sie in einem OpenGL-Referenzhandbuch.
#GL_TEXTURE_1D
oder #GL_TEXTURE_2D
sein)#GL_INVALID_ENUM
wird erzeugt, wenn target
, type
oder format
kein akzeptierter Wert ist.
#GL_INVALID_VALUE
wird erzeugt, wenn level
kleiner als Null oder größer als
ld(max) ist, wobei max
der Rückgabewert von #GL_MAX_TEXTURE_SIZE
ist.
#GL_INVALID_OPERATION
wird erzeugt, wenn gl.GetTexImageRaw()
zwischen
gl.Begin() und gl.End() ausgeführt wird.
#GL_TEXTURE_WIDTH
gl.GetTexLevelParameter() mit dem Argument #GL_TEXTURE_HEIGHT
gl.GetTexLevelParameter() mit dem Argument #GL_TEXTURE_BORDER
gl.GetTexLevelParameter() mit dem Argument #GL_TEXTURE_COMPONENTS
gl.Get() mit dem Argumente #GL_PACK_ALIGNMENT
und andere