glDrawPixels (funzione)

La funzione glDrawPixels scrive un blocco di pixel nel framebuffer.

Sintassi

void WINAPI glDrawPixels(
         GLsizei width,
         GLsizei height,
         GLenum  format,
         GLenum  type,
   const GLvoid  *pixels
);

Parametri

width

Dimensione della larghezza del rettangolo pixel che verrà scritto nel framebuffer.

height

Dimensione dell'altezza del rettangolo pixel che verrà scritto nel framebuffer.

format

Formato dei dati pixel. Di seguito sono riportate le costanti simboliche accettabili.

Valore Significato
GL_COLOR_INDEX
Ogni pixel è un singolo valore, ovvero un indice colori.
  1. La funzione glDrawPixels converte ogni pixel in formato a virgola fissa, con un numero di bit non specificato a destra del punto binario, indipendentemente dal tipo di dati della memoria. I valori a virgola mobile vengono convertiti in valori a virgola fissa true. La funzione glDrawPixels converte i dati firmati e unsigned integer con tutti i bit della frazione impostati su zero. La funzione converte i dati bitmap in 0,0 o 1,0.
  2. La funzione glDrawPixels sposta ogni indice a virgola fissa lasciato da GL_INDEX_SHIFT bit e lo aggiunge al GL_INDEX_OFFSET. Se GL_INDEX_SHIFT è negativo, lo spostamento è a destra. In entrambi i casi, i bit a zero riempiono i percorsi di bit non specificati nel risultato.
  3. In modalità RGBA, glDrawPixels converte l'indice risultante in un pixel RGBA usando 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. Quando si usa la modalità di indicizzazione dei colori e GL_MAP_COLOR è true, l'indice viene sostituito con il valore che glDrawPixels 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 intera dell'indice è eed è con 2b - 1, dove b è il numero di bit in un buffer di indice dei colori.
  5. Gli indici o i colori RGBA risultanti vengono quindi convertiti in frammenti associando la posizione rastercorrente e le coordinate di trama a ogni pixel e assegnando quindi le coordinate della finestra x e y al frammento n, in modo tale che x? = larghezza xr + n mod
    y? = yr + n/Larghezza
    dove (xr , yr ) è la posizione raster corrente.
  6. La funzione glDrawPixels considera questi frammenti di pixel esattamente come i frammenti generati da punti, linee o poligoni rasterizzati. Applica il mapping di trama, la nebbia e tutte le operazioni del frammento prima di scrivere i frammenti sul framebuffer.
GL_STENCIL_INDEX
Ogni pixel è un singolo valore, ovvero un indice di stencil.
  1. La funzione glDrawPixels lo converte in formato a virgola fissa, con un numero di bit non specificato a destra del punto binario, indipendentemente dal tipo di dati della memoria. I valori a virgola mobile vengono convertiti in valori a virgola fissa true. La funzione glDrawPixels converte i dati firmati e unsigned integer con tutti i bit della frazione impostati su zero. I dati bitmap vengono convertiti in 0,0 o 1,0.
  2. La funzione glDrawPixels sposta ogni indice a virgola fissa lasciato da GL_INDEX_SHIFT bit e lo aggiunge al GL_INDEX_OFFSET. Se GL_INDEX_SHIFT è negativo, lo spostamento è a destra. In entrambi i casi, i bit a zero riempiono i percorsi di bit non specificati nel risultato.
  3. Se GL_MAP_STENCIL è true, l'indice viene sostituito con il valore che glDrawPixels fa riferimento alla tabella di ricerca GL_PIXEL_MAP_S_TO_S.
  4. Se la sostituzione della ricerca dell'indice viene eseguita o meno, la parte integer dell'indice è quindi eed è con 2b - 1, dove b è il numero di bit nel buffer dello stencil. Gli indici degli stencil risultanti vengono quindi scritti nel buffer dello stencil in modo che l'indice nvenga scritto nella posizione x? = larghezza xr + n mod
    y? = yr + n/Larghezza
    dove (xr , yr ) è la posizione raster corrente. Solo il test di proprietà dei pixel, il test a forbice e lo stencil writemask influiscono su queste Scritture.
GL_DEPTH_COMPONENT
Ogni pixel è un componente a profondità singola.
  1. La funzione glDrawPixels converte i dati a virgola mobile direttamente in un formato a virgola mobile interno con precisione non specificata. Per i dati Signed Integer viene eseguito il mapping lineare al formato a virgola mobile interno, in modo che il valore integer rappresentabile più positivo sia mappato a 1,0 e che il valore rappresentabile più negativo sia mappato a-1,0. Viene eseguito il mapping dei dati integer senza segno in modo analogo: il valore integer più grande viene mappato a 1,0 e zero viene mappato a 0,0.
  2. La funzione glDrawPixels moltiplica il valore di profondità a virgola mobile risultante per GL_DEPTH_SCALE e lo aggiunge al GL_DEPTH_BIAS. Il risultato viene bloccato nell'intervallo [0, 1].
  3. La funzione glDrawPixels converte i componenti di profondità risultanti in frammenti associando il colore della posizione raster corrente o l'indice dei colori e le coordinate di trama a ogni pixel, quindi assegnando le coordinate della finestra x e y al frammento n in modo tale che x? = larghezza xr + n mod
    y? = yr + n/Larghezza
    dove ( xr ,yr ) è la posizione raster corrente.
  4. Questi frammenti di pixel vengono quindi trattati come i frammenti generati dalla rasterizzazione di punti, linee o poligoni. La funzione glDrawPixels applica il mapping di trama, la nebbia e tutte le operazioni di frammento prima di scrivere i frammenti sul framebuffer.
GL_RGBA
Ogni pixel è un gruppo di quattro componenti in questo ordine: rosso, verde, blu, alfa.
  1. La funzione glDrawPixels converte i valori a virgola mobile direttamente in un formato a virgola mobile interno con precisione non specificata. I valori Signed Integer vengono mappati in modo lineare al formato a virgola mobile interno, in modo che il valore integer rappresentabile più positivo sia mappato a 1,0 e il valore rappresentativo più negativo sia mappato a-1,0. Viene eseguito il mapping dei dati integer senza segno in modo analogo: il valore integer più grande viene mappato a 1,0 e zero viene mappato a 0,0.
  2. La funzione glDrawPixels moltiplica i valori dei colori a virgola mobile risultanti per GL_c_SCALE e li aggiunge a GL_c_BIAS, dove c è rosso, verde, blu e alfa per i rispettivi componenti di colore. I risultati vengono fissati nell'intervallo [0, 1].
  3. Se GL_MAP_COLOR è true, glDrawPixels ridimensiona ogni componente del colore in base alla dimensione della tabella di ricerca GL_PIXEL_MAP_c_TO_c, quindi sostituisce il componente in base al valore a cui fa riferimento nella tabella. c è rispettivamente R, G, B o A.
  4. La funzione glDrawPixels converte i colori RGBA risultanti in frammenti associando la posizione rastercorrente e le coordinate della trama a ogni pixel, quindi assegnando le coordinate della finestra x e y al frammento n, ad esempio x? = larghezza xr + n mod
    y? = /width yr + n
    dove (xr ,yr ) è la posizione raster corrente.
  5. Questi frammenti di pixel vengono quindi trattati come i frammenti generati dalla rasterizzazione di punti, linee o poligoni. La funzione glDrawPixels applica il mapping di trama, la nebbia e tutte le operazioni di frammento prima di scrivere i frammenti sul framebuffer.
GL_RED
Ogni pixel è un singolo componente rosso.
La funzione glDrawPixels converte il componente nel formato a virgola mobile interno nello stesso modo in cui il componente rosso di un pixel RGBA è e quindi lo converte in un pixel RGBA con verde e blu impostato su 0,0 e Alpha impostato su 1,0. Dopo questa conversione, il pixel viene considerato come se fosse stato letto come pixel RGBA.
GL_GREEN
Ogni pixel è un singolo componente verde.
La funzione glDrawPixels converte il componente nel formato a virgola mobile interno nello stesso modo in cui il componente verde di un pixel RGBA è e quindi lo converte in un pixel RGBA con il rosso e il blu impostati su 0,0 e Alpha impostato su 1,0. Dopo questa conversione, il pixel viene considerato come se fosse stato letto come pixel RGBA.
GL_BLUE
Ogni pixel è un singolo componente blu.
La funzione glDrawPixels converte il componente nel formato a virgola mobile interno nello stesso modo in cui il componente blu di un pixel RGBA è e quindi lo converte in un pixel RGBA con rosso e verde impostato su 0,0 e Alpha impostato su 1,0. Dopo questa conversione, il pixel viene considerato come se fosse stato letto come pixel RGBA.
GL_ALPHA
Ogni pixel è un singolo componente alfa.
La funzione glDrawPixels converte il componente nel formato a virgola mobile interno nello stesso modo in cui il componente alfa di un pixel RGBA è e quindi lo converte in un pixel RGBA con rosso, verde e blu impostato su 0,0. Dopo questa conversione, il pixel viene considerato come se fosse stato letto come pixel RGBA.
GL_RGB
Ogni pixel è un gruppo di tre componenti in questo ordine: rosso, verde, blu. La funzione glDrawPixels converte ogni componente nel formato a virgola mobile interno nello stesso modo in cui i componenti rosso, verde e blu di un pixel RGBA sono. Il colore triple viene convertito in un pixel RGBA con Alpha impostato su 1,0. Dopo questa conversione, il pixel viene considerato come se fosse stato letto come pixel RGBA.
GL_LUMINANCE
Ogni pixel è un singolo componente di luminanza.
La funzione glDrawPixels converte il componente nel formato a virgola mobile interno nello stesso modo in cui il componente rosso di un pixel RGBA è e quindi lo converte in un pixel RGBA con rosso, verde e blu impostato sul valore di luminanza convertito e Alpha impostato su 1,0. Dopo questa conversione, il pixel viene considerato come se fosse stato letto come pixel RGBA.
GL_LUMINANCE_ALPHA
Ogni pixel è un gruppo di due componenti in questo ordine: luminanza, alfa.
La funzione glDrawPixels converte i due componenti nel formato a virgola mobile interno nello stesso modo in cui il componente rosso di un pixel RGBA è e quindi li converte in un pixel RGBA con rosso, verde e blu impostati sul valore di luminanza convertito e Alpha impostato sul valore alfa convertito. Dopo questa conversione, il pixel viene considerato come se fosse stato letto come pixel RGBA.
GL_BGR_EXT
Ogni pixel è un gruppo di tre componenti in questo ordine: blu, verde, rosso.
GL_BGR_EXT fornisce un formato corrispondente al layout di memoria delle bitmap indipendenti dal dispositivo (DIB) Windows. Quindi, le applicazioni possono usare gli stessi dati con le chiamate di funzione di Windows e le chiamate di funzione pixel OpenGL.
GL_BGRA_EXT
Ogni pixel è un gruppo di quattro componenti in questo ordine: blu, verde, rosso, alfa.
GL_BGRA_EXT fornisce un formato corrispondente al layout di memoria delle bitmap indipendenti dal dispositivo (DIB) Windows. Quindi, le applicazioni possono usare gli stessi dati con le chiamate di funzione di Windows e le chiamate di funzione pixel OpenGL.

type

Tipo di dati per pixel. Di seguito sono riportate le costanti simboliche accettate e i relativi significati.

Valore Significato
_byte senza segno GL _
Intero senza segno a 8 bit
_byte GL
Valore intero con segno a 8 bit
_bitmap GL
Bit singoli negli interi senza segno a 8 bit
_short senza segno GL _
Intero senza segno a 16 bit
_short GL
Valore intero a 16 bit con segno
GL _ senza segno _ int
Intero senza segno a 32 bit
GL _ int
Intero a 32 bit
GL _ float
Virgola mobile a precisione singola

pixel

Puntatore ai 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
_valore GL non valido _
La larghezza o l' altezza è negativa.
_enumerazione GL non valida _
Il formato o il tipo non è un valore accettato.
_operazione GL non valida _
il formato era GL _ Red, GL _ Green, GL _ Blue, GL _ Alpha, GL _ RGB, GL _ RGBA, GL _ BGR _ ext, GL _ BGRA _ ext, GL _ Luminance o GL _ Luminance _ Alpha, mentre OpenGL era in modalità di indice a colori.
_enumerazione GL non valida _
il tipo era _ una bitmap GL e il formato non era GL _ Color _ index o GL _ stencil _ index.
_operazione GL non valida _
il formato è l' _ indice dello stencil GL e non _ esiste alcun buffer dello stencil.
_operazione GL non valida _
La funzione è stata chiamata tra una chiamata a glBegin e la chiamata corrispondente a glEnd.

Commenti

La funzione glDrawPixels legge i dati dei pixel dalla memoria e li scrive nel framebuffer rispetto alla posizione raster corrente. Usare glRasterPos per impostare la posizione raster corrente e usare glGet con l'argomento GL _ Current _ raster _ position per eseguire una query sulla posizione raster.

Diversi parametri definiscono la codifica dei dati pixel in memoria e controllano l'elaborazione dei dati pixel prima che vengano inseriti nel framebuffer. Questi parametri vengono impostati con quattro funzioni: glPixelStore, glPixelTransfer, glPixelMape glPixelZoom. Questo argomento descrive gli effetti sui glDrawPixels di molti, ma non tutti, dei parametri specificati da queste quattro funzioni.

I dati vengono letti da pixel come sequenza di byte firmati o senza segno, short con segno o senza segno, interi con segno o senza segno o valori a virgola mobile a precisione singola, a seconda del tipo. Ognuno di questi byte, short, interi o valori a virgola mobile viene interpretato come un componente di colore o profondità o un indice, a seconda del formato. Gli indici vengono sempre trattati singolarmente. I componenti dei colori vengono considerati come gruppi di uno, due, tre o quattro valori, in base al formato. Sia i singoli indici che i gruppi di componenti vengono definiti pixel. Se il tipo è una _ bitmap GL, i dati devono essere byte senza segno e il formato deve essere GL _ Color _ index o GL _ stencil _ index. Ogni byte senza segno viene considerato come pixel a 8 1 bit, con l'ordine dei bit determinato da GL _ depack _ LSB _ First (vedere glPixelStore).

La larghezza in pixel di altezza viene letta dalla memoria, a partire dalla posizione pixel. Per impostazione predefinita, questi pixel vengono ricavati dalle posizioni di memoria adiacenti, ad eccezione del fatto che dopo la lettura di tutti i pixel di larghezza , il puntatore di lettura viene spostato al limite successivo di 4 byte. La funzione glPixelStore specifica l'allineamento a 4 byte della riga con argomento GL _ decomprimere l' _ allineamento ed è possibile impostarlo su 1, 2, 4 o 8 byte. Altri parametri dell'archivio pixel specificano avanzamenti del puntatore di lettura diversi, prima che venga letto il primo pixel e dopo la lettura di tutti i pixel di larghezza . La funzione glPixelStore opera su ognuno dei pixel di larghezza per altezza che legge dalla memoria nello stesso modo, in base ai valori di diversi parametri specificati da glPixelTransfer e glPixelMap. I dettagli di queste operazioni, così come il buffer di destinazione in cui vengono disegnati i pixel, sono specifici del formato dei pixel, come specificato dal formato.

La rasterizzazione descritta fino a questo punto presuppone i fattori di zoom pixel di 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 pixel specificato si trova nella colonna n e m della riga del rettangolo pixel, verranno generati frammenti per i pixel i cui centri si trovano nel rettangolo con angoli

(xr + Zoom? n, yr + Zoomy m)

(xr + Zoom? (n + 1), yr + Zoomy (m + 1))

dove Zoom? è il valore di GL _ Zoom _ X e Zoomy è il valore di GL _ Zoom _ y.

Le funzioni seguenti consentono di recuperare informazioni correlate a glDrawPixels:

glGet con argomento GL _ Current _ raster _ position

glGet con argomento GL _ Current _ raster _ position _ valido

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

glAlphaFunc

glBegin

glBlendFunc

glCopyPixels

glDepthFunc

Remo

glGet

glLogicOp

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadPixels

glScissor

glStencilFunc