Link

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.

Figura 8 – Geometria com textura usando Vulkan

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.


Anterior Próximo