Função glCopyPixels

A função glCopyPixels copia pixels no framebuffer.

Sintaxe

void WINAPI glCopyPixels(
   GLint   x,
   GLint   y,
   GLsizei width,
   GLsizei height,
   GLenum  type
);

Parâmetros

x

A coordenada x-plane da janela do canto inferior esquerdo da região retangular dos pixels a serem copiados.

y

A coordenada do plano y da janela do canto inferior esquerdo da região retangular dos pixels a serem copiados.

width

A dimensão de largura da região retangular dos pixels a serem copiados. Deve ser não negativo.

altura

A dimensão de altura da região retangular dos pixels a serem copiados. Deve ser não negativo.

tipo

Especifica se glCopyPixels deve copiar valores de cor, valores de profundidade ou valores de estêncil. As constantes simbólicas aceitáveis são.

Valor Significado
GL_COLOR
A função glCopyPixels lê índices ou cores RGBA do buffer especificado atualmente como o buffer de origem de leitura (consulte glReadBuffer).
Se OpenGL estiver no modo de índice de cores:
  1. Cada índice lido desse buffer é convertido em um formato de ponto fixo com um número não especificado de bits à direita do ponto binário.
  2. Cada índice é deslocado para a esquerda por GL_INDEX_SHIFT bits e adicionado 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_COLOR for true, o índice será substituído pelo valor referenciado 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á and edcom 2b 1, em que b é o número de bits em um buffer de índice de cores.
Se OpenGL estiver no modo RGBA:
  1. Os componentes vermelho, verde, azul e alfa de cada pixel lido são convertidos em um formato de ponto flutuante interno com precisão não especificada.
  2. A conversão mapeia o maior valor de componente representável para 1,0 e o valor do componente zero para 0,0.
  3. Os valores de cor de ponto flutuante resultantes são multiplicados por GL_c_SCALE e adicionados a GL_c_BIAS, em que c é VERMELHO, VERDE, AZUL e ALFA para os respectivos componentes de cor.
  4. Os resultados são fixados no intervalo [0,1].
  5. Se GL_MAP_COLOR for true, cada componente de cor será dimensionado pelo tamanho da tabela de pesquisa GL_PIXEL_MAP_c_TO_c e substituído pelo valor referenciado nessa tabela; c é R, G, B ou A, respectivamente. Os índices resultantes ou as cores RGBA são convertidos em fragmentos anexando as coordenadas z-coordinate e textura da posição do raster atual a cada pixel e, em seguida, atribuindo coordenadas de janela (xr + i, yr + j), em que (xr , yr ) é a posição de raster atual e o pixel era o pixel na posição i na linha j . Esses fragmentos de pixel são tratados da mesma forma que os fragmentos gerados por pontos de rasterização, linhas ou polígonos. Mapeamento de textura, neblina e todas as operações de fragmento são aplicados antes que os fragmentos sejam gravados no quadro.
GL_DEPTH
Os valores de profundidade são lidos do buffer de profundidade e convertidos diretamente em um formato de ponto flutuante interno com precisão não especificada. O valor de profundidade de ponto flutuante resultante é multiplicado por GL_DEPTH_SCALE e adicionado a GL_DEPTH_BIAS. O resultado é fixado no intervalo [0,1].
Os componentes de profundidade resultantes são convertidos em fragmentos anexando a cor da posição do raster atual ou as coordenadas de índice de cor e textura a cada pixel e, em seguida, atribuindo coordenadas de janela (xr + i, yr + j), em que (xr , yr ) é a posição de raster atual e o pixel era o pixel na posição i na linha j . Esses fragmentos de pixel são tratados da mesma forma que os fragmentos gerados por pontos de rasterização, linhas ou polígonos. Mapeamento de textura, neblina e todas as operações de fragmento são aplicados antes que os fragmentos sejam gravados no quadro.
GL_STENCIL
Os índices de estêncil são lidos do buffer de estêncil e convertidos em um formato de ponto fixo interno com um número não especificado de bits à direita do ponto binário. Cada índice de ponto fixo é então deslocado para a esquerda por GL_INDEX_SHIFT bits e adicionado 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. Se GL_MAP_STENCIL for true, o índice será substituído pelo valor referenciado na tabela de pesquisa GL_PIXEL_MAP_S_TO_S. 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 índice lido do local i da linha j seja gravado no local (xr + i, yr + j), 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.

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_ENUM
type não era um valor aceito.
GL_INVALID_VALUE
A largura ou a altura foram negativas.
GL_INVALID_OPERATION
o tipo era GL_DEPTH e não havia nenhum buffer de profundidade.
GL_INVALID_OPERATION
o tipo era GL_STENCIL 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 glCopyPixels copia um retângulo alinhado à tela de pixels do local do quadro especificado para uma região em relação à posição do raster atual. Sua operação será bem definida somente se toda a região de origem de pixel estiver dentro da parte exposta da janela. Os resultados de cópias de fora da janela ou de regiões da janela que não estão expostas são dependentes de hardware e indefinidos.

Os parâmetros x e y especificam as coordenadas de janela do canto inferior esquerdo da região retangular a ser copiada. Os parâmetros de largura e altura especificam as dimensões da região retangular a ser copiada. Largura ealtura devem ser nãonegativas.

Vários parâmetros controlam o processamento dos dados de pixel enquanto eles estão sendo copiados. Esses parâmetros são definidos com três funções: glPixelTransfer, glPixelMap e glPixelZoom. Este tópico descreve os efeitos em glCopyPixels da maioria, mas não todos, dos parâmetros especificados por essas três funções.

A função glCopyPixels copia valores de cada pixel com o canto inferior esquerdo em (x + i, y + j) para 0 = i<width e 0 = j<height. Diz-se que esse pixel é o i pixel na linha j . Os pixels são copiados em ordem de linha da linha mais baixa para a linha mais alta, da esquerda para a direita em cada linha.

O parâmetro de tipo especifica se os dados de cor, profundidade ou estêncil devem ser copiados.

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 localização i na linha j do retângulo de pixel de origem, os fragmentos serão gerados para pixels cujos centros estão no retângulo com cantos em

(xr + zoom? i, yr + zoomyj)

e

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

em que zoom? é o valor de GL_ZOOM_X e zoomy é o valor de GL_ZOOM_Y.

Os modos especificados pelo glPixelStore não têm efeito na operação do glCopyPixels.

As seguintes funções recuperam informações relacionadas ao glCopyPixels:

glGet com GL_CURRENT_RASTER_POSITION de argumento

glGet com GL_CURRENT_RASTER_POSITION_VALID de argumento

Para copiar o pixel de cor no canto inferior esquerdo da janela para a posição atual do raster, use

glCopyPixels( 0, 0, 1, 1, GL_COLOR );

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

glBegin

glDepthFunc

glDrawBuffer

glDrawPixels

glEnd

glGet

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadBuffer

glReadPixels

glStencilFunc