funzione glCopyPixels

La funzione glCopyPixels copia i pixel nel framebuffer.

Sintassi

void WINAPI glCopyPixels(
   GLint   x,
   GLint   y,
   GLsizei width,
   GLsizei height,
   GLenum  type
);

Parametri

x

Coordinata del piano x finestra dell'angolo inferiore sinistro dell'area rettangolare dei pixel da copiare.

y

Coordinata del piano y della finestra dell'angolo inferiore sinistro dell'area rettangolare dei pixel da copiare.

width

Dimensione di larghezza dell'area rettangolare dei pixel da copiare. Deve essere non negativo.

height

Dimensione di altezza dell'area rettangolare dei pixel da copiare. Deve essere non negativo.

type

Specifica se glCopyPixels deve copiare valori di colore, valori di profondità o stencil. Le costanti simboliche accettabili sono.

Valore Significato
GL_COLOR
La funzione glCopyPixels legge gli indici o i colori RGBA dal buffer attualmente specificato come buffer di origine di lettura (vedere glReadBuffer).
Se OpenGL è in modalità color-index:
  1. Ogni indice letto da questo buffer viene convertito in un formato a virgola fissa con un numero non specificato di bit a destra del punto binario.
  2. Ogni indice viene spostato a sinistra per bit GL_INDEX_SHIFT e aggiunto a GL_INDEX_OFFSET. Se GL_INDEX_SHIFT è negativo, lo spostamento è verso destra. In entrambi i casi, i bit riempiono in caso contrario posizioni di bit non specificate nel risultato.
  3. Se GL_MAP_COLOR è true, l'indice viene sostituito con il valore a cui fa riferimento nella tabella di ricerca GL_PIXEL_MAP_I_TO_I.
  4. Se la sostituzione della ricerca dell'indice viene eseguita o meno, la parte integer dell'indice viene quindi eseguita con ANDed con 2b 1, dove b è il numero di bit in un buffer di indice color.
Se OpenGL è in modalità RGBA:
  1. I componenti rosso, verde, blu e alfa di ogni pixel letto vengono convertiti in un formato a virgola mobile interna con precisione non specificata.
  2. La conversione esegue il mapping del valore del componente rappresentabile più grande a 1,0 e il valore del componente zero a 0,0.
  3. I valori di colore a virgola mobile risultanti vengono quindi moltiplicati per GL_c_SCALE e aggiunti a GL_c_BIAS, dove c è ROSSO, VERDE, BLU e ALFA per i rispettivi componenti di colore.
  4. I risultati vengono bloccati nell'intervallo [0,1].
  5. Se GL_MAP_COLOR è true, ogni componente colore viene ridimensionato in base alle dimensioni della tabella di ricerca GL_PIXEL_MAP_c_TO_c e quindi sostituito dal valore a cui fa riferimento in tale tabella; c è rispettivamente R, G, B o A. Gli indici risultanti o i colori RGBA vengono quindi convertiti in frammenti associando la posizione raster corrente a coordinate z-coordinate e trame a ogni pixel e quindi assegnando coordinate della finestra (xr + i, yrj + ), dove (xr ,yr ) è la posizione raster corrente e il pixel era il pixel nella posizione i nella riga j. Questi frammenti di pixel vengono quindi trattati come i frammenti generati dalla rasterizzazione di punti, linee o poligoni. Il mapping delle trame, la nebbia e tutte le operazioni di frammento vengono applicate prima che i frammenti vengano scritti nella cornice.
GL_DEPTH
I valori di profondità vengono letti dal buffer di profondità e convertiti direttamente in un formato a virgola mobile interna con precisione non specificata. Il valore di profondità a virgola mobile risultante viene quindi moltiplicato per GL_DEPTH_SCALE e aggiunto a GL_DEPTH_BIAS. Il risultato viene bloccato nell'intervallo [0,1].
I componenti di profondità risultanti vengono quindi convertiti in frammenti associando il colore della posizione raster corrente o l'indice di colore e le coordinate di trama a ogni pixel, quindi assegnando coordinate della finestra (xr + i, yrj + ), dove (xr , yr ) è la posizione raster corrente e il pixel era il pixel nella posizione i nella riga j. Questi frammenti di pixel vengono quindi trattati come i frammenti generati dalla rasterizzazione di punti, linee o poligoni. Il mapping delle trame, la nebbia e tutte le operazioni di frammento vengono applicate prima che i frammenti vengano scritti nella cornice.
GL_STENCIL
Gli indici Stencil vengono letti dal buffer stencil e convertiti in un formato fisso interno con un numero non specificato di bit a destra del punto binario. Ogni indice a virgola fissa viene quindi spostato a sinistra per bit GL_INDEX_SHIFT e aggiunto a GL_INDEX_OFFSET. Se GL_INDEX_SHIFT è negativo, lo spostamento è verso destra. In entrambi i casi, i bit riempiono in caso contrario posizioni di bit non specificate nel risultato. Se GL_MAP_STENCIL è true, l'indice viene sostituito con il valore a cui fa riferimento nella tabella di ricerca GL_PIXEL_MAP_S_TO_S. Se la sostituzione della ricerca dell'indice viene eseguita o meno, la parte intera dell'indice viene quindi eseguita con 2b - 1, dove b è il numero di bit nel buffer stencil. Gli indici stencil risultanti vengono quindi scritti nel buffer stencil in modo che l'indice letto dalla posizione i della riga j venga scritto nella posizione (xri + , yrj + ), dove (xr ,yr ) è la posizione raster corrente. Solo il test di proprietà pixel, il test scissor e la maschera di scrittura stencil influiscono su queste scritture.

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
tipo non è stato accettato.
GL_INVALID_VALUE
La larghezza o l'altezza erano negative.
GL_INVALID_OPERATION
il tipo era GL_DEPTH e non c'era alcun buffer di profondità.
GL_INVALID_OPERATION
il tipo era GL_STENCIL e non c'era alcun buffer stencil.
GL_INVALID_OPERATION
La funzione è stata chiamata tra una chiamata a glBegin e la chiamata corrispondente a glEnd.

Commenti

La funzione glCopyPixels copia un rettangolo allineato allo schermo di pixel dalla posizione framebuffer specificata a un'area relativa alla posizione raster corrente. L'operazione è ben definita solo se l'intera area di origine pixel si trova all'interno della parte esposta della finestra. I risultati delle copie dall'esterno della finestra o dalle aree della finestra che non sono esposte, sono dipendenti dall'hardware e non definiti.

I parametri x e y specificano le coordinate della finestra dell'angolo inferiore sinistro dell'area rettangolare da copiare. I parametri di larghezza e altezza specificano le dimensioni dell'area rettangolare da copiare. Sia la larghezza che l'altezza devono essere non necessarie.

Diversi parametri controllano l'elaborazione dei dati pixel durante la copia. Questi parametri sono impostati con tre funzioni: glPixelTransfer, glPixelMap e glPixelZoom. Questo argomento descrive gli effetti su glCopyPixels della maggior parte, ma non tutti, dei parametri specificati da queste tre funzioni.

La funzione glCopyPixels copia i valori da ogni pixel con l'angolo inferiore sinistro in corrispondenza (xi + ,yj + ) per 0 = iwidth< e 0 = jheight<. Questo pixel viene detto essere il pixel nella riga j . I pixel vengono copiati in ordine di riga dalla riga più bassa alla riga più alta, da sinistra a destra in ogni riga.

Il parametro di tipo specifica se i dati di colore, profondità o stencil devono essere copiati.

La rasterizzazione descritta finora presuppone fattori di zoom pixel pari a 1,0. Se si usa glPixelZoom per modificare i fattori di zoom x e y pixel, i pixel vengono convertiti in frammenti come indicato di seguito. Se (xr , yr ) è la posizione raster corrente e un determinato pixel si trova nella posizione i nella riga j del rettangolo del pixel di origine, i frammenti vengono generati per i pixel i cui centri si trovano nel rettangolo con angoli in corrispondenza degli angoli

(xr + zoom? i, yrzoomyj + )

e

(xr + zoom? (i + 1), yrzoomy + (j + 1))

dove zoom? è il valore di GL_ZOOM_X e zoom è il valore di GL_ZOOM_Y.

Le modalità specificate da glPixelStore non hanno alcun effetto sull'operazione di glCopyPixels.

Le funzioni seguenti recuperano informazioni correlate a glCopyPixels:

glGet con argomento GL_CURRENT_RASTER_POSITION

glGet con argomento GL_CURRENT_RASTER_POSITION_VALID

Per copiare il pixel di colore nell'angolo inferiore sinistro della finestra nella posizione raster corrente, usare

glCopyPixels( 0, 0, 1, 1, GL_COLOR );

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

glDepthFunc

glDrawBuffer

glDrawPixels

glEnd

glGet

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadBuffer

glReadPixels

glStencilFunc