funzione glReadPixels

La funzione glReadPixels legge un blocco di pixel dal framebuffer.

Sintassi

void WINAPI glReadPixels(
   GLint   x,
   GLint   y,
   GLsizei width,
   GLsizei height,
   GLenum  format,
   GLenum  type,
   GLvoid  *pixels
);

Parametri

x

Coordinata x della finestra del primo pixel letto dal framebuffer. Insieme alla coordinata y , specifica la posizione dell'angolo inferiore sinistro di un blocco rettangolare di pixel.

y

Coordinate della finestra y del primo pixel letto dal framebuffer. Insieme alla coordinata x , specifica la posizione dell'angolo inferiore sinistro di un blocco rettangolare di pixel.

width

Larghezza del rettangolo pixel.

height

Altezza del rettangolo pixel. I parametri width e height del valore "1" corrispondono a un singolo pixel.

format

Formato dei dati pixel. Vengono accettati i valori simbolici seguenti:

Valore Significato
GL_COLOR_INDEX
Gli indici colore vengono letti dal buffer di colori selezionato da glReadBuffer. Ogni indice viene convertito in punto fisso, spostato a sinistra o a destra, a seconda del valore e del segno di GL_INDEX_SHIFT e aggiunto a GL_INDEX_OFFSET. Se GL_MAP_COLOR è GL_TRUE, gli indici vengono sostituiti dai mapping nella tabella GL_PIXEL_MAP_I_TO_I.
GL_STENCIL_INDEX
I valori degli stencil vengono letti dal buffer degli stencil. Ogni indice viene convertito in punto fisso, spostato a sinistra o a destra, a seconda del valore e del segno di GL_INDEX_SHIFT e aggiunto a GL_INDEX_OFFSET. Se GL_MAP_STENCIL è GL_TRUE, gli indici vengono sostituiti dai mapping nella tabella GL_PIXEL_MAP_S_TO_S.
GL_DEPTH_COMPONENT
I valori di profondità vengono letti dal buffer di profondità. Ogni componente viene convertito in virgola mobile in modo che il valore minimo di profondità sia mappato a 0,0 e il valore massimo sia mappato a 1,0. Ogni componente viene quindi moltiplicato per GL_DEPTH_SCALE, aggiunto a GL_DEPTH_BIAS e infine bloccato all'intervallo [0,1].
GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE, GL_LUMINANCE_ALPHA
L'elaborazione varia a seconda che i buffer colori archiviino indici di colore o componenti di colore RGBA. Se gli indici di colore vengono archiviati, vengono letti dal buffer dei colori selezionato da glReadBuffer. Ogni indice viene convertito in punto fisso, spostato a sinistra o a destra, a seconda del valore e del segno di GL_INDEX_SHIFT e aggiunto a GL_INDEX_OFFSET. Gli indici vengono quindi sostituiti dai valori rosso, verde, blu e alfa ottenuti indicizzando le tabelle GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G, GL_PIXEL_MAP_I_TO_B e GL_PIXEL_MAP_I_TO_A. Se i componenti di colore RGBA vengono archiviati nei buffer di colori, vengono letti dal buffer dei colori selezionato da glReadBuffer. Ogni componente di colore viene convertito in virgola mobile in modo che l'intensità zero venga mappata a 0,0 e l'intensità completa sia mappata a 1,0. Ogni componente viene quindi moltiplicato per GL_c_SCALE e aggiunto a GL_c_BIAS, dove c è GL_RED, GL_GREEN, GL_BLUE e GL_ALPHA. Ogni componente è bloccato all'intervallo [0,1]. Infine, se GL_MAP_COLOR è GL_TRUE, ogni componente colore c viene sostituito dal mapping nella tabella GL_PIXEL_MAP_c_TO_c, dove c viene nuovamente GL_RED, GL_GREEN, GL_BLUE e GL_ALPHA. Ogni componente viene ridimensionato in base alle dimensioni della tabella corrispondente prima dell'esecuzione della ricerca. Infine, i dati non necessario vengono eliminati. Ad esempio, GL_RED rimuove i componenti verdi, blu e alfa, mentre GL_RGB rimuove solo il componente alfa. GL_LUMINANCE calcola un singolo valore del componente come somma dei componenti rosso, verde e blu e GL_LUMINANCE_ALPHA esegue la stessa operazione, mantenendo alfa come secondo valore.

type

Tipo di dati dei dati pixel. Deve essere uno dei valori seguenti.

Tipo Maschera di indice Conversione dei componenti
GL_UNSIGNED_BYTE 281 (281) C
GL_BYTE 271 [(271)c-1]/2
GL_BITMAP 1 1
GL_UNSIGNED_SHORT 2 61 (2 61) C
GL_SHORT 2 51 [(2 51)c1]/2
GL_UNSIGNED_INT_ 2 1 (2 1) C
GL_INT 2 1 [(2 1)c1]/2
GL_FLOAT Nessuno c

Pixel

Restituisce i dati pixel.

Valore restituito

Questa funzione non restituisce un valore.

Codici di errore

I codici di errore seguenti possono essere recuperati dalla funzione glGetError .

Nome Significato
GL_INVALID_ENUM
il formato o il tipo non è un valore accettato.
GL_INVALID_VALUE
Larghezza o altezza è negativa.
GL_INVALID_OPERATION
il formato è stato GL_COLOR_INDEX e i buffer di colore archiviati i componenti di colore RGBA o BGRA.
GL_INVALID_OPERATION
il formato era GL_STENCIL_INDEX e non c'era alcun buffer stencil.
GL_INVALID_OPERATION
il formato è stato GL_DEPTH_COMPONENT e non era presente alcun buffer di profondità.
GL_INVALID_OPERATION
La funzione è stata chiamata tra una chiamata a glBegin e la chiamata corrispondente a glEnd.

Commenti

La funzione glReadPixels restituisce dati pixel dal framebuffer, a partire dal pixel l'angolo inferiore sinistro è in posizione (x, y), nella memoria client a partire dai pixel di posizione. Diversi parametri controllano l'elaborazione dei dati pixel prima che venga inserita nella memoria client. Questi parametri sono impostati con tre comandi: glPixelStore, glPixelTransfer e glPixelMap. Questo argomento descrive gli effetti su glReadPixels della maggior parte, ma non tutti i parametri specificati da questi tre comandi.

La funzione glReadPixels restituisce valori da ogni pixel con angolo inferiore sinistro in corrispondenza (x + i, y + j) per 0 = i <width e 0 = j <height. Questo pixel viene detto essere il thpixel nella riga jth. I pixel vengono restituiti in ordine di riga dal più basso alla riga più alta, a sinistra a destra in ogni riga.

I fattori di shift, scale, bias e ricerca descritti in precedenza sono tutti specificati da glPixelTransfer. Il contenuto della tabella di ricerca viene specificato da glPixelMap.

Il passaggio finale comporta la conversione degli indici o dei componenti nel formato appropriato, come specificato per tipo. Se il formato è GL_COLOR_INDEX o GL_STENCIL_INDEX e il tipo non è GL_FLOAT, ogni indice viene mascherato con il valore della maschera specificato nella tabella seguente. Se il tipo è GL_FLOAT, ogni indice intero viene convertito in formato a virgola mobile a precisione singola.

Se il formato è GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE o GL_LUMINANCE_ALPHA e il tipo non è GL_FLOAT, ogni componente viene moltiplicato per il moltiplicatore visualizzato nella tabella precedente. Se il tipo è GL_FLOAT, ogni componente viene passato come è (o convertito nel formato a virgola mobile a precisione singola del client se è diverso da quello usato da OpenGL).

I valori restituiti vengono inseriti in memoria come indicato di seguito. Se il formato è GL_COLOR_INDEX, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA o GL_LUMINANCE, viene restituito un singolo valore e i dati per il th pixel nella riga j th vengono posizionati nella posizione (j)width + i. GL_RGB e GL_BGR_EXT restituiscono tre valori, GL_RGBA e GL_BGRA_EXT restituiscono quattro valori e GL_LUMINANCE_ALPHA restituisce due valori per ogni pixel, con tutti i valori corrispondenti a un singolo pixel che occupa spazio contiguo in pixel. I parametri di archiviazione impostati da glPixelStore, ad esempio GL_PACK_SWAP_BYTES e GL_PACK_LSB_FIRST, influiscono sul modo in cui i dati sono scritti in memoria. Per una descrizione, vedere glPixelStore .

I valori per i pixel che si trovano all'esterno della finestra connessa al contesto OpenGL corrente non sono definiti.

Se viene generato un errore, non viene apportata alcuna modifica al contenuto dei pixel.

La funzione seguente recupera informazioni correlate a glReadPixels:

glGet con argomento GL_INDEX_MODE

Requisiti

Requisito Valore
Client minimo supportato
Windows 2000 Professional [solo app desktop]
Server minimo supportato
Windows 2000 Server [solo app desktop]
Intestazione
Gl.h
Libreria
Opengl32.lib
DLL
Opengl32.dll

Vedi anche

glBegin

glCopyPixels

glDrawPixels

glEnd

glPixelMap

glPixelStore

glPixelTransfer

glReadBuffer