Compartilhar via


Função glTexSubImage2D

A função glTexSubImage2D especifica uma parte de uma imagem de textura unidimensional existente. Não é possível definir uma nova textura com glTexSubImage2D.

Sintaxe

void WINAPI glTexSubImage2D(
         GLenum  target,
         GLint   level,
         GLint   xoffset,
         GLint   yoffset,
         GLsizei width,
         GLsizei height,
         GLenum  format,
         GLenum  type,
   const GLvoid  *pixels
);

Parâmetros

destino

A textura de destino. Precisa ser GL_TEXTURE_2D.

level

O número do nível de detalhe. O nível 0 é a imagem base. O nível n é a enésima imagem de redução do mipmap.

xoffset

Um deslocamento texel na direção x dentro da matriz de textura.

yoffset

Um deslocamento texel na direção y dentro da matriz de textura.

width

A largura da subimagem de textura.

altura

A altura da subimagem de textura.

format

O formato dos dados de pixel. Pode assumir um dos valores simbólicos a seguir.

Valor Significado
GL_COLOR_INDEX
Cada elemento é um valor individual, um índice de cores. Ele é convertido no formato de ponto fixo (com um número não especificado de 0 bits à direita do ponto binário), deslocado para a esquerda ou para a direita, dependendo do valor e do sinal de GL_INDEX_SHIFT, e adicionado a GL_INDEX_OFFSET (confira glPixelTransfer). O índice resultante é convertido em um conjunto de componentes de cor por meio das 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 e fixado ao intervalo [0,1].
GL_RED
Cada elemento é um componente vermelho individual. Ele é convertido no formato de ponto flutuante e montado em um elemento RGBA pela anexação de 0,0 para verde e azul e 1,0 para alfa. Em seguida, cada componente é multiplicado pelo fator de escala com sinal GL_c_SCALE, adicionado ao desvio com sinal GL_c_BIAS e fixado ao intervalo [0,1] (confira glPixelTransfer).
GL_GREEN
Cada elemento é um componente verde individual. Ele é convertido no formato de ponto flutuante e montado em um elemento RGBA pela anexação de 0,0 para vermelho e azul e 1,0 para alfa. Em seguida, cada componente é multiplicado pelo fator de escala com sinal GL_c_SCALE, adicionado ao desvio com sinal GL_c_BIAS e fixado ao intervalo [0,1] (confira glPixelTransfer).
GL_BLUE
Cada elemento é um componente azul individual. Ele é convertido no formato de ponto flutuante e montado em um elemento RGBA pela anexação de 0,0 para vermelho e verde e 1,0 para alfa. Em seguida, cada componente é multiplicado pelo fator de escala com sinal GL_c_SCALE, adicionado ao desvio com sinal GL_c_BIAS e fixado ao intervalo [0,1] (confira glPixelTransfer).
GL_ALPHA
Cada elemento é um componente alfa individual. Ele é convertido no formato de ponto flutuante e montado em um elemento RGBA pela anexação de 0,0 para vermelho, verde e azul. Em seguida, cada componente é multiplicado pelo fator de escala com sinal GL_c_SCALE, adicionado ao desvio com sinal GL_c_BIAS e fixado ao intervalo [0,1] (confira glPixelTransfer).
GL_RGB
Cada elemento é um triplo RGB. Ele é convertido no formato de ponto flutuante e montado em um elemento RGBA pela anexação de 1.0 para alfa. Em seguida, cada componente é multiplicado pelo fator de escala com sinal GL_c_SCALE, adicionado ao desvio com sinal GL_c_BIAS e fixado ao intervalo [0,1] (confira glPixelTransfer).
GL_RGBA
Cada elemento é um elemento RGBA completo. Ele é convertido em ponto flutuante. Em seguida, cada componente é multiplicado pelo fator de escala com sinal GL_c_SCALE, adicionado ao desvio com sinal GL_c_BIAS e fixado ao intervalo [0,1] (confira glPixelTransfer).
GL_LUMINANCE
Cada elemento é um valor de luminância individual. Ele é convertido no formato de ponto flutuante e montado em um elemento RGBA pela replicação do valor de luminância três vezes para vermelho, verde e azul, e pela anexação de 1,0 para alfa. Em seguida, cada componente é multiplicado pelo fator de escala com sinal GL_c_SCALE, adicionado ao desvio com sinal GL_c_BIAS e fixado ao intervalo [0,1] (confira glPixelTransfer).
GL_LUMINANCE_ALPHA
Cada elemento é um par luminância/alfa. Ele é convertido no formato de ponto flutuante e montado em um elemento RGBA pela replicação do valor de luminância três vezes para vermelho, verde e azul. Em seguida, cada componente é multiplicado pelo fator de escala com sinal GL_c_SCALE, adicionado ao desvio com sinal GL_c_BIAS e fixado ao intervalo [0,1] (confira glPixelTransfer).

tipo

O tipo de dados dos dados de pixel. São aceitos os seguintes valores simbólicos: GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT e GL_FLOAT.

pixels

Um ponteiro para os dados da imagem na memória.

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_ENUM
O target não era GL_TEXTURE_2D.
GL_INVALID_ENUM
O format não era uma constante aceita.
GL_INVALID_ENUM
O type não era uma constante aceita.
GL_INVALID_ENUM
O type era GL_BITMAP e o format não era GL_COLOR_INDEX.
GL_INVALID_VALUE
O level era menor que zero ou maior que log2 max, sendo max o valor retornado de GL_MAX_TEXTURE_SIZE.
GL_INVALID_VALUE
xoffset era menor que -b; ou xoffset + width era maior que w - b; ou yoffset era menor que -b; ou yoffset + height era maior que h - b, sendo w a GL_TEXTURE_WIDTH, h a GL_TEXTURE_HEIGHT e b a largura da GL_TEXTURE_BORDER da imagem de textura que está sendo modificada.
Observe que w e h incluem o dobro da largura da borda.
GL_INVALID_VALUE
A width era menor que b, sendo b a borda da matriz de textura.
GL_INVALID_VALUE
A border não era zero ou 1.
GL_INVALID_OPERATION
A matriz de textura não foi definida por uma operação glTexImage2D anterior.
GL_INVALID_OPERATION
A função foi chamada entre uma chamada a glBegin e a chamada correspondente a glEnd.

Comentários

A texturização bidimensional de uma primitiva é habilitada por meio de glEnable e glDisable com o argumento GL_TEXTURE_2D. Durante a texturização, parte de uma imagem de textura especificada é mapeada em cada primitiva habilitada. Use a função glTexSubImage2D para especificar uma subimagem contígua de uma imagem de textura bidimensional existente para texturização.

Os texels referenciados por pixels substituem uma região da matriz de textura existente por x índices de xoffset e xoffset + (width 1) inclusive e y índices de yoffset e yoffset + (height 1) inclusive. Essa região não pode incluir nenhum texel fora do intervalo da matriz de textura especificada originalmente.

A especificação de uma subimagem com uma width igual a zero não tem nenhum efeito e não gera um erro.

A texturização não tem nenhum efeito no modo de índice de cores.

Em geral, as imagens de textura podem ser representadas pelos mesmos formatos de dados que os pixels em um comando glDrawPixels, com a exceção de que GL_STENCIL_INDEX e GL_DEPTH_COMPONENT não podem ser usados. Os modos glPixelStore e glPixelTransfer afetam as imagens de textura exatamente da mesma forma que afetam glDrawPixels.

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

glGetTexImage

glIsEnabled com o argumento GL_TEXTURE_2D

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

glCopyTexImage1D

glCopyTexImage2D

glCopyTexSubImage1D

glCopyTexSubImage2D

glDrawPixels

glEnable

glFog

glGetTexImage

glIsEnabled

glPixelStore

glPixelTransfer

glTexEnv

glTexGen

glTexImage1D

glTexImage2D

glTexSubImage1D

glTexImage2D

glTexParameter