Função glTexImage2D

A função glTexImage2D especifica uma imagem de textura bidimensional.

Sintaxe

void WINAPI glTexImage2D(
         GLenum  target,
         GLint   level,
         GLint   internalformat,
         GLsizei width,
         GLsizei height,
         GLint   border,
         GLint   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 é o nível de imagem base. O nível n é a enésima imagem de redução do mipmap.

internalformat

O número de componentes de cor na textura. Deve ser 1, 2, 3 ou 4, ou uma das seguintes constantes simbólicas: GL_ALPHA, GL_ALPHA4, GL_ALPHA8, GL_ALPHA12, GL_ALPHA16, GL_LUMINANCE, GL_LUMINANCE4, GL_LUMINANCE8, GL_LUMINANCE12, GL_LUMINANCE16, GL_LUMINANCE_ALPHA, GL_LUMINANCE4_ALPHA4, GL_LUMINANCE6_ALPHA2, GL_LUMINANCE8_ALPHA8, GL_LUMINANCE12_ALPHA4, GL_LUMINANCE12_ALPHA12, GL_LUMINANCE16_ALPHA16, GL_INTENSITY, GL_INTENSITY4, GL_INTENSITY8, GL_INTENSITY12, GL_INTENSITY16, GL_R3_G3_B2, GL_RGB, GL_RGB4, GL_RGB5, GL_RGB8, GL_RGB10, GL_RGB12, GL_RGB16, GL_RGBA, GL_RGBA2, GL_RGBA4, GL_RGB5_A1, GL_RGBA8, GL_RGB10_A2, GL_RGBA12 ou GL_RGBA16.

width

A largura da imagem da textura. Deve ser 2n + 2(borda) para alguns inteiros n.

altura

A altura da imagem da textura. Deve ser 2*m* + 2(borda) para algum inteiro m.

borda

A largura da borda. Deve ser 0 ou 1.

format

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

Valor Significado
GL_COLOR_INDEX
Cada elemento é um valor individual, um índice de cores. É convertido em ponto fixo (com um número não especificado de 0 bits à direita do ponto binário), deslocado para a esquerda ou 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 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 e fixado ao intervalo [0,1].
GL_RED
Cada elemento é um componente vermelho individual. É convertido em ponto flutuante e montado em um elemento RGBA anexando 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. É convertido em ponto flutuante e montado em um elemento RGBA anexando 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. É convertido em ponto flutuante e montado em um elemento RGBA anexando 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 vermelho individual. É convertido em ponto flutuante e montado em um elemento RGBA anexando 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. É convertido em ponto flutuante e montado em um elemento RGBA anexando 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. É 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_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 do 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 do OpenGL.
GL_LUMINANCE
Cada elemento é um valor de luminância individual. Ele é convertido em ponto flutuante e, em seguida, montado em um elemento RGBA replicando o valor de luminância três vezes para vermelho, verde e azul e anexando 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 em ponto flutuante e, em seguida, montado em um elemento RGBA replicando o 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 um GL_TEXTURE_2D.
GL_INVALID_ENUM
O format não era uma constante de formato aceito. Somente as constantes de formato diferentes de GL_STENCIL_INDEX e GL_DEPTH_COMPONENT são aceitas. Confira a descrição do parâmetro de format para obter uma lista de valores possíveis.
GL_INVALID_ENUM
O type não era uma constante de tipo.
GL_INVALID_ENUM
O type era GL_BITMAP e o format não era GL_COLOR_INDEX.
GL_INVALID_VALUE
O n4 era menor que zero ou maior que log2 max, sendo max o valor retornado de GL_MAX_TEXTURE_SIZE.
GL_INVALID_VALUE
internalformat não era 1, 2, 3 ou 4.
GL_INVALID_VALUE
width ou height eram menores que zero ou maiores que 2 + GL_MAX_TEXTURE_SIZE, ou não podiam ser representados como 2n + 2(border) para um valor inteiro de n.
GL_INVALID_VALUE
Aborder não era 0 ou 1.
GL_INVALID_OPERATION
A função foi chamada entre uma chamada para glBegin e a chamada correspondente para glEnd.

Comentários

A função glTexImage2D especifica uma imagem de textura bidimensional. A texturização mapeia uma parte de uma imagem de textura especificada para cada primitivo gráfico para o qual a texturização está habilitada. A texturização bidimensional é habilitada e desabilitada usando glEnable e glDisable com o argumento GL_TEXTURE_2D.

As imagens de textura são definidas com glTexImage2D. Os argumentos descrevem os parâmetros da imagem de textura, como altura, largura, largura da borda, número de nível de detalhe (confiraglTexParameter) e número de componentes de cor fornecidos. Os três últimos argumentos descrevem a forma como a imagem é representada na memória. Esses argumentos são idênticos aos formatos de pixel usados para glDrawPixels.

Os dados são lidos de pixels como uma sequência de bytes assinados ou não assinados, curtos ou longos ou valores de ponto flutuante de precisão única, dependendo do type. Esses valores são agrupados em conjuntos de um, dois, três ou quatro valores, dependendo do format, para formar elementos. Se o type for GL_BITMAP, os dados serão considerados como uma cadeia de caracteres de bytes não assinados (e o format deverá ser GL_COLOR_INDEX). Cada byte de dados é tratado como oito elementos de 1 bit, com a ordenação de bits determinada por GL_UNPACK_LSB_FIRST (confira glPixelStore). Confira glDrawPixels para obter uma descrição dos valores aceitáveis para o parâmetro de type.

Uma imagem de textura pode ter até quatro componentes por elemento de textura, dependendo dos componentes. Uma imagem de textura de um componente usa apenas o componente vermelho da cor RGBA extraída de pixels. Uma imagem de dois componentes usa os valores R e A. Uma imagem de três componentes usa os valores R, G e B. Uma imagem de quatro componentes usa todos os componentes do RGBA.

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

A imagem de textura pode ser representada pelos mesmos formatos de dados que os pixels em um comando glDrawPixels, exceto 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.

Uma imagem de textura com altura ou largura zero indica a textura nula. Se a textura nula for especificada para o nível de detalhes 0, será como se a texturização estivesse desabilitada.

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

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

glBegin

glDrawPixels

glEnd

glFog

glIsEnabled

glPixelStore

glPixelTransfer

glTexEnv

glTexGen

glTexImage1D

glTexParameter