Modificando os shaders
A etapa final é modificar os shaders para amostrar as cores da textura. Primeiro, precisamos modificar o vertex shader para passar coordenadas de textura para o fragment shader:
layout(location = 0) in vec2 inPosition;
layout(location = 1) in vec3 inColor;
layout(location = 2) in vec2 inTexCoord;
layout(location = 0) out vec3 fragColor;
layout(location = 1) out vec2 fragTexCoord;
void main() {
gl_Position = vec4(inPosition, 0.0, 1.0);
fragColor = inColor;
fragTexCoord = inTexCoord;
}
Assim como as cores por vértice, os valores de fragTexCoord
serão interpolados através da área do quadrado pelo rasterizador.
Um descritor de sampler e imagem combinados é representado no GLSL pelo qualificador de tipo uniform
e o tipo de variável sampler
da dimensionalidade apropriada. Adicionamos uma referência a ele no fragment shader:
layout(location = 0) in vec3 fragColor;
layout(location = 1) in vec2 fragTexCoord;
layout(set = 0, binding = 0) uniform sampler2D texSampler;
layout(location = 0) out vec4 outColor;
void main() {
outColor = texture(texSampler, fragTexCoord);
}
As diretivas set
e location
são semelhantes à diretiva location
para atributos. Estamos referenciando aqui o conjunto de descritores do conjunto 0
e da ligação 0
, como especificamos no layout do conjunto de descritores.
As texturas são amostradas usando a função integrada texture
. Ela recebe um sampler e a coordenada como argumentos. O sampler cuida automaticamente da filtragem e das transformações por de trás. Devemos nos certificar de recompilar os shaders
.
Agora devemos ver a textura no quadrado ao executar o aplicativo, conforme mostrado na Figura 8.

Neste capítulo, renderizamos um quadrado que tem uma textura aplicada em sua superfície. O quadrado deve ajustar seu tamanho (e aspecto) para corresponder ao tamanho e à forma da janela (se esticarmos a janela, o quadrado e a imagem também serão esticados). No próximo capítulo iremos corrigir isso através do uso da matriz de projeção.