Por que uma coordenada de textura de 1.0 ultrapassa a borda da textura?

Eu estou fazendo uma pesquisa de cor usando uma textura para aplicar um efeito a uma imagem. Minha pesquisa é um mapa de gradiente usando a luminância do fragmento da primeira textura e, em seguida, procurando uma segunda textura. A segunda textura é 256x256 com gradientes indo horizontalmente e vários gradientes diferentes de cima para baixo. Então 32 listras horizontais cada 8 pixels de altura. Minha pesquisa no x é a luminância, no y é um gradiente e eu viso o centro da faixa para evitar o cruzamento.

Meu fragmento shader é assim:

 lowp vec4 source = texture2D(u_textureSampler, v_fragmentTexCoord0);
 float luminance = 1.0 - dot(source.rgb, W);
 lowp vec2 texPos;
 texPos.x = clamp(luminance, 0.0, 1.0);
 // the y value selects which gradient to use by supplying a T value
 // this would be more efficient in the vertex shader
 texPos.y = clamp(u_value4, 0.0, 1.0);

 lowp vec4 newColor1 = texture2D(u_textureSampler2, texPos);

Funciona bem, mas eu estava ficando distorcido nas partes mais brancas dos brancos e na parte mais negra dos negros. Basicamente, parecia que pegava essa nova cor de um lugar completamente diferente em texture2, ou possivelmente não estava conseguindo nada para esses fragmentos. Eu adicionei os grampos no shader para tentar evitar que ele saísse da borda da textura da pesquisa, mas isso não ajudou. Eu não estou usando o grampo corretamente?

Finalmente, considerei que poderia ter algo a ver com minha textura de origem ou com a maneira como ela é carregada. Acabei consertando adicionando:

    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

Então por que?

É um pouco chato ter que apertar as texturas porque isso significa que eu tenho que escrever uma exceção no meu código quando estou carregando as tabelas de pesquisa.

Se meus textPos.x e .y estiverem fixados em 0-1 ... como ele está puxando uma amostra além da borda?

Também .. eu tenho que usar a chamada clamp acima ao criar a textura ou posso chamá-la quando estou prestes a usar a textura?

questionAnswers(1)

yourAnswerToTheQuestion