Função glDrawPixels

A função glDrawPixels grava um bloco de pixels no framebuffer.

Sintaxe

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

Parâmetros

width

A dimensão de largura do retângulo de pixel que será gravado no framebuffer.

altura

A dimensão de altura do retângulo de pixel que será gravado no framebuffer.

format

O formato dos dados de pixel. Constantes simbólicas aceitáveis são as seguintes.

Valor Significado
GL_COLOR_INDEX
Cada pixel é um único valor, um índice de cores.
  1. A função glDrawPixels converte cada pixel em formato de ponto fixo, com um número não especificado de bits à direita do ponto binário, independentemente do tipo de dados de memória. Valores de ponto flutuante são convertidos em valores de ponto fixo verdadeiros. A função glDrawPixels converte dados inteiros assinados e sem sinal com todos os bits de fração definidos como zero. A função converte dados de bitmap em 0.0 ou 1.0.
  2. A função glDrawPixels desloca cada índice de ponto fixo deixado por GL_INDEX_SHIFT bits e a adiciona a GL_INDEX_OFFSET. Se GL_INDEX_SHIFT for negativo, a mudança será para a direita. Em ambos os casos, zero bits preenchem locais de bits não especificados no resultado.
  3. Quando no modo RGBA, glDrawPixels converte o índice resultante em um pixel RGBA usando as tabelas 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 no modo de índice de cores e GL_MAP_COLOR é verdadeiro, o índice é substituído pelo valor que glDrawPixels referencia na tabela de pesquisa GL_PIXEL_MAP_I_TO_I.
  4. Se a substituição de pesquisa do índice for feita ou não, a parte inteira do índice será ANDcom 2b - 1, em que b é o número de bits em um buffer de índice de cores.
  5. Os índices resultantes ou as cores RGBA são convertidos em fragmentos anexando a coordenada z da posição do raster atual e as coordenadas de textura a cada pixel e, em seguida, atribuindo coordenadas de janela x e y ao nth fragmento de modo que x? = xr + nlargura mod
    y? = yr + n/width
    em que (xr , yr ) é a posição de raster atual.
  6. A função glDrawPixels trata esses fragmentos de pixel, assim como os fragmentos gerados por pontos de rasterização, linhas ou polígonos. Ele aplica mapeamento de textura, neblina e todas as operações de fragmento antes de gravar os fragmentos no cofre de quadros.
GL_STENCIL_INDEX
Cada pixel é um único valor, um índice de estêncil.
  1. A função glDrawPixels a converte em formato de ponto fixo, com um número não especificado de bits à direita do ponto binário, independentemente do tipo de dados de memória. Valores de ponto flutuante são convertidos em valores de ponto fixo verdadeiros. A função glDrawPixels converte dados inteiros assinados e sem sinal com todos os bits de fração definidos como zero. Os dados de bitmap são convertidos em 0.0 ou 1.0.
  2. A função glDrawPixels desloca cada índice de ponto fixo deixado por GL_INDEX_SHIFT bits e o adiciona a GL_INDEX_OFFSET. Se GL_INDEX_SHIFT for negativo, a mudança será para a direita. Em ambos os casos, zero bits preenchem locais de bits não especificados no resultado.
  3. Se GL_MAP_STENCIL for true, o índice será substituído pelo valor que glDrawPixels referencia na tabela de pesquisa GL_PIXEL_MAP_S_TO_S.
  4. Se a substituição de pesquisa do índice for feita ou não, a parte inteira do índice será anded com 2b - 1, em que b é o número de bits no buffer de estêncil. Os índices de estêncil resultantes são gravados no buffer de estêncil de modo que o nº índice seja gravado no local x? = xr + nlargura mod
    y? = yr + n/width
    em que (xr ,yr ) é a posição de raster atual. Somente o teste de propriedade de pixel, o teste de tesoura e a máscara de gravação do estêncil afetam essas gravações.
GL_DEPTH_COMPONENT
Cada pixel é um componente de profundidade única.
  1. A função glDrawPixels converte dados de ponto flutuante diretamente em um formato de ponto flutuante interno com precisão não especificada. Os dados inteiros com sinal são mapeados linearmente para o formato de ponto flutuante interno, de modo que o valor inteiro representável mais positivo mapeia para 1,0 e o valor representável mais negativo é mapeado para -1,0. Os dados inteiros sem sinal são mapeados da mesma forma: o maior valor inteiro é mapeado para 1,0 e zero mapas para 0,0.
  2. A função glDrawPixels multiplica o valor de profundidade de ponto flutuante resultante GL_DEPTH_SCALE e o adiciona a GL_DEPTH_BIAS. O resultado é fixado no intervalo [0,1].
  3. A função glDrawPixels converte os componentes de profundidade resultantes em fragmentos anexando a cor da posição do raster atual ou as coordenadas de índice de cor e textura a cada pixel e atribuindo coordenadas de janela x e y ao n th fragmento de modo que x? = xr + nlargura mod
    y? = yr + n/width
    em que (xr ,yr ) é a posição de raster atual.
  4. Esses fragmentos de pixel são tratados da mesma forma que os fragmentos gerados por pontos de rasterização, linhas ou polígonos. A função glDrawPixels aplica mapeamento de textura, neblina e todas as operações de fragmento antes de gravar os fragmentos no quadro.
GL_RGBA
Cada pixel é um grupo de quatro componentes nesta ordem: vermelho, verde, azul, alfa.
  1. A função glDrawPixels converte valores de ponto flutuante diretamente em um formato de ponto flutuante interno com precisão não especificada. Os valores inteiros com sinal são mapeados linearmente para o formato de ponto flutuante interno, de modo que o valor inteiro representável mais positivo mapeia para 1,0 e o valor representável mais negativo é mapeado para -1,0. Os dados inteiros sem sinal são mapeados da mesma forma: o maior valor inteiro é mapeado para 1,0 e zero mapas para 0,0.
  2. A função glDrawPixels multiplica os valores de cor de ponto flutuante resultantes por GL_c_SCALE e os adiciona a GL_c_BIAS, em que c é VERMELHO, VERDE, AZUL e ALFA para os respectivos componentes de cor. Os resultados são fixados no intervalo [0,1].
  3. Se GL_MAP_COLOR for true, glDrawPixels dimensiona cada componente de cor pelo tamanho da tabela de pesquisa GL_PIXEL_MAP_c_TO_c e, em seguida, substitui o componente pelo valor referenciado nessa tabela; c é R, G, B ou A, respectivamente.
  4. A função glDrawPixels converte as cores RGBA resultantes em fragmentos anexando a coordenada z da posição do raster atual e as coordenadas de textura a cada pixel e atribuindo coordenadas de janela x e y ao nth fragmento de modo que x? = xr + nlargura mod
    y? = yr + n /width
    em que (xr ,yr ) é a posição de raster atual.
  5. Esses fragmentos de pixel são tratados da mesma forma que os fragmentos gerados por pontos de rasterização, linhas ou polígonos. A função glDrawPixels aplica mapeamento de textura, neblina e todas as operações de fragmento antes de gravar os fragmentos no quadro.
GL_RED
Cada pixel é um único componente vermelho.
A função glDrawPixels converte esse componente no formato de ponto flutuante interno da mesma forma que o componente vermelho de um pixel RGBA e o converte em um pixel RGBA com verde e azul definido como 0,0 e alfa definido como 1.0. Após essa conversão, o pixel é tratado como se tivesse sido lido como um pixel RGBA.
GL_GREEN
Cada pixel é um único componente verde.
A função glDrawPixels converte esse componente no formato de ponto flutuante interno da mesma forma que o componente verde de um pixel RGBA e o converte em um pixel RGBA com vermelho e azul definido como 0,0 e alfa definido como 1.0. Após essa conversão, o pixel é tratado como se tivesse sido lido como um pixel RGBA.
GL_BLUE
Cada pixel é um único componente azul.
A função glDrawPixels converte esse componente no formato de ponto flutuante interno da mesma forma que o componente azul de um pixel RGBA e o converte em um pixel RGBA com vermelho e verde definido como 0,0 e alfa definido como 1.0. Após essa conversão, o pixel é tratado como se tivesse sido lido como um pixel RGBA.
GL_ALPHA
Cada pixel é um único componente alfa.
A função glDrawPixels converte esse componente no formato de ponto flutuante interno da mesma forma que o componente alfa de um pixel RGBA e o converte em um pixel RGBA com vermelho, verde e azul definido como 0,0. Após essa conversão, o pixel é tratado como se tivesse sido lido como um pixel RGBA.
GL_RGB
Cada pixel é um grupo de três componentes nesta ordem: vermelho, verde, azul. A função glDrawPixels converte cada componente no formato de ponto flutuante interno da mesma forma que os componentes vermelho, verde e azul de um pixel RGBA. A cor tripla é convertida em um pixel RGBA com alfa definido como 1,0. Após essa conversão, o pixel é tratado como se tivesse sido lido como um pixel RGBA.
GL_LUMINANCE
Cada pixel é um único componente de luminância.
A função glDrawPixels converte esse componente no formato de ponto flutuante interno da mesma forma que o componente vermelho de um pixel RGBA e o converte em um pixel RGBA com vermelho, verde e azul definido para o valor de luminância convertido e alfa definido como 1,0. Após essa conversão, o pixel é tratado como se tivesse sido lido como um pixel RGBA.
GL_LUMINANCE_ALPHA
Cada pixel é um grupo de dois componentes nesta ordem: luminância, alfa.
A função glDrawPixels converte os dois componentes no formato de ponto flutuante interno da mesma forma que o componente vermelho de um pixel RGBA e os converte em um pixel RGBA com vermelho, verde e azul definido para o valor de luminância convertido e alfa definido como o valor alfa convertido. Após essa conversão, o pixel é tratado como se tivesse sido lido como um pixel RGBA.
GL_BGR_EXT
Cada pixel é um grupo de três componentes nesta ordem: azul, verde, vermelho.
GL_BGR_EXT fornece um formato que corresponde ao layout de memória de DIBs (bitmaps independentes de dispositivo) do Windows. Assim, seus aplicativos podem usar os mesmos dados com chamadas de função do Windows e chamadas de função de pixel OpenGL.
GL_BGRA_EXT
Cada pixel é um grupo de quatro componentes nesta ordem: azul, verde, vermelho, alfa.
GL_BGRA_EXT fornece um formato que corresponde ao layout de memória de DIBs (bitmaps independentes de dispositivo) do Windows. Assim, seus aplicativos podem usar os mesmos dados com chamadas de função do Windows e chamadas de função de pixel OpenGL.

tipo

O tipo de dados para pixels. A seguir estão as constantes simbólicas aceitas e seus significados.

Valor Significado
GL_UNSIGNED_BYTE
Inteiro de 8 bits sem sinal
GL_BYTE
Inteiro de 8 bits com sinal
GL_BITMAP
Bits únicos em inteiros de 8 bits sem sinal
GL_UNSIGNED_SHORT
Inteiro de 16 bits sem sinal
GL_SHORT
Inteiro de 16 bits com sinal
GL_UNSIGNED_INT
Inteiro de 32 bits sem sinal
GL_INT
Inteiro de 32 bits
GL_FLOAT
Ponto flutuante de precisão única

Pixels

Um ponteiro para os dados de pixel.

Retornar valor

Essa função não retorna um valor.

Códigos de erro

Os códigos de erro a seguir podem ser recuperados pela função glGetError .

Nome Significado
GL_INVALID_VALUE
A largura ou a altura foram negativas.
GL_INVALID_ENUM
O formato ou o tipo não era um valor aceito.
GL_INVALID_OPERATION
O formato era GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE ou GL_LUMINANCE_ALPHA, e o OpenGL estava no modo de índice de cores.
GL_INVALID_ENUM
o tipo era GL_BITMAP e o formato não era GL_COLOR_INDEX ou GL_STENCIL_INDEX.
GL_INVALID_OPERATION
O formato era GL_STENCIL_INDEX e não havia nenhum buffer de estêncil.
GL_INVALID_OPERATION
A função foi chamada entre uma chamada para glBegin e a chamada correspondente para glEnd.

Comentários

A função glDrawPixels lê dados de pixel da memória e os grava no framebuffer em relação à posição de varredura atual. Use glRasterPos para definir a posição de varredura atual e use glGet com GL_CURRENT_RASTER_POSITION de argumento para consultar a posição do varredura.

Vários parâmetros definem a codificação de dados de pixel na memória e controlam o processamento dos dados de pixel antes de serem colocados no framebuffer. Esses parâmetros são definidos com quatro funções: glPixelStore, glPixelTransfer, glPixelMap e glPixelZoom. Este tópico descreve os efeitos em glDrawPixels de muitos, mas não todos, dos parâmetros especificados por essas quatro funções.

Os dados são lidos de pixels como uma sequência de bytes assinados ou não assinados, shorts assinados ou sem sinal, inteiros assinados ou sem sinal ou valores de ponto flutuante de precisão única, dependendo do tipo. Cada um desses bytes, shorts, inteiros ou valores de ponto flutuante é interpretado como um componente de cor ou profundidade, ou um índice, dependendo do formato. Os índices são sempre tratados individualmente. Os componentes de cor são tratados como grupos de um, dois, três ou quatro valores, novamente com base no formato. Índices individuais e grupos de componentes são chamados de pixels. Se o tipo for GL_BITMAP, os dados deverão ser bytes não assinados e o formato deverá ser GL_COLOR_INDEX ou GL_STENCIL_INDEX. Cada byte não assinado é tratado como oito pixels de 1 bit, com ordenação de bits determinada por GL_UNPACK_LSB_FIRST (consulte glPixelStore).

A largura por pixels de altura é lida da memória, começando em pixels de localização. Por padrão, esses pixels são obtidos de locais de memória adjacentes, exceto que depois que todos os pixels de largura são lidos, o ponteiro de leitura é avançado para o próximo limite de 4 bytes. A função glPixelStore especifica o alinhamento de linha de 4 bytes com o argumento GL_UNPACK_ALIGNMENT e você pode defini-lo como 1, 2, 4 ou 8 bytes. Outros parâmetros do repositório de pixels especificam avanços de ponteiro de leitura diferentes, antes de o primeiro pixel ser lido e depois que todos os pixels de largura forem lidos. A função glPixelStore opera em cada um dos pixels largura por altura que lê da memória da mesma forma, com base nos valores de vários parâmetros especificados por glPixelTransfer e glPixelMap. Os detalhes dessas operações, bem como o buffer de destino no qual os pixels são desenhados, são específicos para o formato dos pixels, conforme especificado por formato.

A rasterização descrita até agora pressupõe fatores de zoom de pixel de 1,0. Se você usar glPixelZoom para alterar os fatores de zoom de pixel x e y , os pixels serão convertidos em fragmentos da seguinte maneira. Se (xr,yr) for a posição de varredura atual e um determinado pixel estiver na nª coluna e mth linha do retângulo de pixel, os fragmentos serão gerados para pixels cujos centros estão no retângulo com cantos em

(xr + zoom? n, yr + zoomym)

(xr + zoom? (n + 1), yr + zoomy (m + 1))

onde zoom? é o valor de GL_ZOOM_X e zoomy é o valor de GL_ZOOM_Y.

As seguintes funções recuperam informações relacionadas a glDrawPixels:

glGet com GL_CURRENT_RASTER_POSITION de argumento

glGet com GL_CURRENT_RASTER_POSITION_VALID de argumento

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho
Gl.h
Biblioteca
Opengl32.lib
DLL
Opengl32.dll

Confira também

glAlphaFunc

glBegin

glBlendFunc

glCopyPixels

glDepthFunc

glEnd

glGet

glLogicOp

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadPixels

glScissor

glStencilFunc