Função glDrawPixels

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

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 verdadeiros de ponto fixo. A função glDrawPixels converte dados inteiros assinados e não assinados com todos os bits de fração definidos como zero. A função converte dados bitmap em 0.0 ou 1.0.
  2. A função glDrawPixels muda cada índice de ponto fixo deixado por bits GL_INDEX_SHIFT e adiciona-o 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 for verdadeiro, o índice é substituído pelo valor que glDrawPixels faz referência na tabela de pesquisa GL_PIXEL_MAP_I_TO_I.
  4. Se a substituição de pesquisa do índice é feita ou não, a parte inteiro do índice é ANDed com 2b - 1, onde b é o número de bits em um buffer de índice de cores.
  5. Os índices resultantes ou as cores do 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 fragmento, de modo que x? = larguradoxrn + mod
    y? = yrn + /width
    onde (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 converte-a 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 verdadeiros de ponto fixo. A função glDrawPixels converte dados inteiros assinados e não assinados 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 muda cada índice de ponto fixo deixado por bits GL_INDEX_SHIFT e adiciona-o 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 faz referência na tabela de pesquisa GL_PIXEL_MAP_S_TO_S.
  4. Se a substituição de pesquisa do índice é feita ou não, a parte inteiro do índice é então ANDed com 2b - 1, onde 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 nth index seja gravado no local x? = larguradoxrn + mod
    y? = yrn + /width
    onde (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 de 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 mapeia para -1.0. Dados inteiros não assinados são mapeados da mesma forma: o maior valor inteiro mapeia para 1,0 e zero mapas para 0,0.
  2. A função glDrawPixels multiplica o valor de profundidade de ponto flutuante resultante por GL_DEPTH_SCALE e adiciona-o 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 textura e índice de cores a cada pixel e, em seguida, atribuindo coordenadas de janela x e y ao n th fragmento de modo que x? = largura do xrn + mod
    y? = yrn + /width
    onde (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 mapeia para -1,0. Dados inteiros não assinados são mapeados da mesma forma: o maior valor inteiro mapeia 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 fragmento, de modo que x? = larguradoxrn + mod
    y? = yrn + /width
    onde (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, em seguida, converte-o em um pixel RGBA com conjunto verde e azul 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 conjunto vermelho e verde 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, em seguida, converte-o 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 conjunto alfa 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 para o formato de ponto flutuante interno da mesma forma que o componente vermelho de um pixel RGBA e converte-o 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 para o 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 para 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 Windows DIBs (bitmaps independentes do dispositivo). Assim, seus aplicativos podem usar os mesmos dados com Windows chamadas de função 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 Windows DIBs (bitmaps independentes do dispositivo). Assim, seus aplicativos podem usar os mesmos dados com Windows chamadas de função 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 sem sinal de 8 bits
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 do 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 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 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 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 grava-os no quadro de código em relação à posição atual do raster. Use glRasterPos para definir a posição de raster atual e use glGet com GL_CURRENT_RASTER_POSITION de argumento para consultar a posição de raster.

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 cofre de quadros. Esses parâmetros são definidos com quatro funções: glPixelStore, glPixelTransfer, glPixelMap e glPixelZoom. Este tópico descreve os efeitos sobre 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 não assinados, 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. Os índices individuais e os grupos de componentes são conhecidos como 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 a ordenação de bits determinada por GL_UNPACK_LSB_FIRST (consulte glPixelStore).

A largura por pixels de altura é lida da memória, começando nos 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 GL_UNPACK_ALIGNMENT de argumento 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 de 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 pelo 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 raster atual e um determinado pixel estiver na nth coluna e na linha mth 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, yrzoomym + )

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

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

As seguintes funções recuperam informações relacionadas ao 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