funzione glDrawPixels

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 di larghezza del rettangolo pixel che verrà scritto nel framebuffer.

height

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

format

Formato dei dati pixel. Le costanti simboliche accettabili sono le seguenti.

Valore Significato
GL_COLOR_INDEX
Ogni pixel è un singolo valore, un indice di colore.
  1. La funzione glDrawPixels converte ogni pixel in formato a virgola fissa, con un numero non specificato di bit a destra del punto binario, indipendentemente dal tipo di dati di memoria. I valori a virgola mobile converte in valori a virgola fissa true. La funzione glDrawPixels converte i dati integer con segno e senza segno con tutti i bit frazionari 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 sinistra da GL_INDEX_SHIFT bit e lo aggiunge 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. 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 indice dei colori e GL_MAP_COLOR è true, l'indice viene sostituito con il valore a cui fa riferimento glDrawPixels 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 è ANData con 2b - 1, dove b è il numero di bit in un buffer di indice colori.
  5. Gli indici risultanti o i colori RGBA vengono quindi convertiti in frammenti collegando le coordinate z della posizione raster corrente e delle trame a ogni pixel e quindi assegnando coordinate di finestra x e y al frammento nesimo in modo che x? = Larghezza mod xrn +
    y? = yrn + /larghezza
    dove (xr , yr ) è la posizione raster corrente.
  6. La funzione glDrawPixels gestisce questi frammenti di pixel esattamente come i frammenti generati dalla rasterizzazione di punti, linee o poligoni. Applica il mapping delle trame, la nebbia e tutte le operazioni di frammento prima di scrivere i frammenti nel framebuffer.
GL_STENCIL_INDEX
Ogni pixel è un singolo valore, un indice stencil.
  1. La funzione glDrawPixels lo converte in formato a virgola fissa, con un numero non specificato di bit a destra del punto binario, indipendentemente dal tipo di dati di memoria. I valori a virgola mobile converte in valori a virgola fissa true. La funzione glDrawPixels converte i dati integer con segno e senza segno con tutti i bit frazionari impostati su zero. I dati bitmap si converte in 0.0 o 1.0.
  2. La funzione glDrawPixels sposta ogni indice a virgola fissa sinistra da GL_INDEX_SHIFT bit e lo aggiunge 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_STENCIL è true, l'indice viene sostituito con il valore a cui fa riferimento glDrawPixels nella tabella di ricerca GL_PIXEL_MAP_S_TO_S.
  4. Se la sostituzione della ricerca dell'indice viene eseguita o meno, la parte intera dell'indice viene quindi eseguita con ANDed con 2b - 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 n sia scritto nella posizione x? = Larghezza mod xrn +
    y? = yrn + /larghezza
    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.
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. I dati integer con segno vengono mappati in modo lineare al formato a virgola mobile interna 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. I dati integer senza segno vengono mappati in modo analogo: il valore intero più grande è mappato a 1,0 e zero esegue il mapping a 0,0.
  2. La funzione glDrawPixels moltiplica il valore di profondità a virgola mobile risultante per GL_DEPTH_SCALE e lo aggiunge a GL_DEPTH_BIAS. Il risultato è bloccato all'intervallo [0,1].
  3. La funzione glDrawPixels converte i componenti di profondità risultanti in frammenti collegando il colore di posizione raster corrente o le coordinate di indice colore e trama a ogni pixel, quindi assegnando coordinate di finestra x e y al frammento n in modo che x? = Larghezza mod xrn +
    y? = yrn + /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 delle trame, la nebbia e tutte le operazioni di frammento prima di scrivere i frammenti nel framebuffer.
GL_RGBA
Ogni pixel è un gruppo a 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 integer con segno vengono mappati in modo lineare al formato a virgola mobile interna, in modo che il valore integer rappresentabile più positivo sia mappato a 1,0 e il valore rappresentabile più negativo sia mappato a -1,0. I dati integer senza segno vengono mappati in modo analogo: il valore intero più grande è mappato a 1,0 e zero esegue il mapping a 0,0.
  2. La funzione glDrawPixels moltiplica i valori di colore a virgola mobile risultanti per GL_c_SCALE e li aggiunge a GL_c_BIAS, dove c è RED, GREEN, BLUE e ALPHA per i rispettivi componenti di colore. I risultati sono bloccati all'intervallo [0,1].
  3. Se GL_MAP_COLOR è true, glDrawPixels ridimensiona ogni componente di colore in base alle dimensioni della tabella di ricerca GL_PIXEL_MAP_c_TO_c e 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 collegando le coordinate z e la posizione raster correnti in ogni pixel, quindi assegnando coordinate x e y al frammento n° in modo che x? = Larghezza mod xrn +
    y? = yrn + /width
    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 delle trame, la nebbia e tutte le operazioni di frammento prima di scrivere i frammenti nel framebuffer.
GL_RED
Ogni pixel è un singolo componente rosso.
La funzione glDrawPixels converte questo componente nel formato a virgola mobile interna nello stesso modo in cui il componente rosso di un pixel RGBA è e lo converte in un pixel RGBA con verde e blu impostato su 0,0 e alfa 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 questo componente nel formato a virgola mobile interna nello stesso modo in cui il componente verde di un pixel RGBA è e lo converte in un pixel RGBA con rosso e blu impostato su 0,0 e alfa 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 questo componente nel formato a virgola mobile interna nello stesso modo in cui il componente blu di un pixel RGBA è e lo converte in un pixel RGBA con rosso e verde impostato su 0,0 e alfa 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 questo componente nel formato a virgola mobile interna nello stesso modo in cui il componente alfa di un pixel RGBA è e 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 interna nello stesso modo in cui i componenti rosso, verde e blu di un pixel RGBA sono. Il colore triplo viene convertito in un pixel RGBA con alfa 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 questo componente nel formato a virgola mobile interna nello stesso modo in cui il componente rosso di un pixel RGBA è e lo converte in un pixel RGBA con rosso, verde e blu impostato sul valore di dominanza convertito e alfa 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 interna nello stesso modo in cui il componente rosso di un pixel RGBA è e li converte in un pixel RGBA con rosso, verde e blu impostato sul valore di dominanza convertito e alfa 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 di Windows bitmap indipendenti dal dispositivo. Di conseguenza, le applicazioni possono usare gli stessi dati con le chiamate di funzione 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 di Windows bitmap indipendenti dal dispositivo. Di conseguenza, le applicazioni possono usare gli stessi dati con le chiamate di funzione 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
GL_UNSIGNED_BYTE
Intero senza segno a 8 bit
GL_BYTE
Valore intero con segno a 8 bit
GL_BITMAP
Bit singoli in interi senza segno a 8 bit
GL_UNSIGNED_SHORT
Intero senza segno a 16 bit
GL_SHORT
Valore intero a 16 bit con segno
GL_UNSIGNED_INT
Intero senza segno a 32 bit
GL_INT
Intero a 32 bit
GL_FLOAT
Virgola mobile e 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
GL_INVALID_VALUE
Larghezza o altezza è negativa.
GL_INVALID_ENUM
Il formato o il tipo non è un valore accettato.
GL_INVALID_OPERATION
il formato è stato 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 OpenGL era in modalità indice colori.
GL_INVALID_ENUM
il tipo è stato GL_BITMAP e il formato non è stato GL_COLOR_INDEX o GL_STENCIL_INDEX.
GL_INVALID_OPERATION
il formato è stato GL_STENCIL_INDEX 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 glDrawPixels legge i dati dei pixel dalla memoria e lo 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 sono impostati con quattro funzioni: glPixelStore, glPixelTransfer, glPixelMap eglPixelZoom. Questo argomento descrive gli effetti su glDrawPixels di molti, ma non tutti, dei parametri specificati da queste quattro funzioni.

I dati vengono letti da pixel come sequenza di byte con segno 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 di colore vengono considerati come gruppi di uno, due, tre o quattro valori, di nuovo in base al formato. Sia i singoli indici che i gruppi di componenti vengono definiti pixel. Se il tipo è GL_BITMAP, 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 otto pixel a 1 bit, con l'ordinamento dei bit determinato da GL_UNPACK_LSB_FIRST (vedere glPixelStore).

La larghezza in base ai pixel di altezza viene letta dalla memoria, a partire dai pixel di posizione. Per impostazione predefinita, questi pixel vengono acquisiti da posizioni di memoria adiacenti, ad eccezione del fatto che dopo la lettura di tutti i pixel di larghezza , il puntatore di lettura è avanzato al limite successivo a 4 byte. La funzione glPixelStore specifica l'allineamento di riga a 4 byte con l'argomento GL_UNPACK_ALIGNMENT ed è possibile impostarlo su 1, 2, 4 o 8 byte. Altri parametri dell'archivio pixel specificano diversi avanzamenti del puntatore di lettura, sia prima della lettura del primo pixel che dopo la lettura di tutti i pixel di larghezza . La funzione glPixelStore opera su ognuno dei pixel width-by-height letti dalla memoria nello stesso modo, in base ai valori di diversi parametri specificati da glPixelTransfer e glPixelMap. I dettagli di queste operazioni, nonché il buffer di destinazione in cui vengono disegnati i pixel, sono specifici del formato dei pixel, come specificato dal formato.

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 nell'nesima colonna e nella riga mth del rettangolo pixel, i frammenti vengono generati per i pixel i cui centri si trovano nel rettangolo con angoli in corrispondenza degli angoli

(xr + zoom? n, yrzoomym + )

(xr + zoom? (n + 1), yrzoomy + (m + 1))

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

Le funzioni seguenti recuperano informazioni correlate a glDrawPixels:

glGet con argomento GL_CURRENT_RASTER_POSITION

glGet con argomento GL_CURRENT_RASTER_POSITION_VALID

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

glEnd

glGet

glLogicOp

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadPixels

glScissor

glStencilFunc