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 della finestra dell'angolo inferiore sinistro dell'area rettangolare di pixel da copiare.

y

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

width

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

height

Dimensione altezza dell'area rettangolare di 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à indice colori:
  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 da GL_INDEX_SHIFT bit e aggiunto a GL_INDEX_OFFSET. Se GL_INDEX_SHIFT è negativo, lo spostamento è a destra. In entrambi i casi, i bit zero riempiono i percorsi di bit non specificati 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. Indipendentemente dal fatto che la sostituzione dell'indice venga eseguita o meno, la parte intera dell'indice viene quindi eseguita con2b 1, dove b è il numero di bit in un buffer di indice colori.
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 è RED, GREEN, BLUE e ALPHA per i rispettivi componenti di colore.
  4. I risultati sono bloccati all'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 collegando le coordinate raster della posizione z e della trama correnti a ogni pixel e quindi assegnando coordinate di finestra (xr + i, yr + j), 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 nel framebuffer.
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 è bloccato all'intervallo [0,1].
I componenti di profondità risultanti vengono quindi convertiti in frammenti collegando il colore corrente della posizione raster o l'indice di colore e le coordinate di trama a ogni pixel, quindi assegnando coordinate di finestra (xr + i, yr + j), 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 nel framebuffer.
GL_STENCIL
Gli indici stencil vengono letti dal buffer stencil e convertiti in un formato a virgola fissa interna con un numero non specificato di bit a destra del punto binario. Ogni indice a virgola fissa viene quindi spostato a sinistra da GL_INDEX_SHIFT bit e aggiunto a GL_INDEX_OFFSET. Se GL_INDEX_SHIFT è negativo, lo spostamento è a destra. In entrambi i casi, i bit zero riempiono i percorsi di bit non specificati 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 con2b - 1, dove b è il numero di bit nel buffer degli stencil. Gli indici stencil risultanti vengono quindi scritti nel buffer degli stencil in modo che l'indice letto dalla posizione i della riga j venga scritto nella posizione (xr + i, yr + j), dove (xr , yr ) è la posizione raster corrente. Solo il test di proprietà dei pixel, il test di scissor e la maschera di scrittura dello 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
il tipo non è un valore accettato.
GL_INVALID_VALUE
Larghezza o altezza è negativa.
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 di framebuffer specificata a un'area rispetto 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 non 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 width e height specificano le dimensioni dell'area rettangolare da copiare. Sia la larghezza che l'altezza devono essere non negativi.

Diversi parametri controllano l'elaborazione dei dati pixel durante la copia. Questi parametri vengono 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 di (x + i, y + j) per 0 = i<width e 0 = j<height. Questo pixel è 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 di 1,0. Se usi 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 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, yr + zoomyj)

e

(xr) + zoom? (i + 1), yr + zoomy (j + 1))

dove zoom? è il valore di GL_ZOOM_X e zoomy è 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