Acabei de escrever o código para meus objetos de textura e amostra, mas agora não sei como implementar os descritores separados em GLSL.
Acessando um amostrador de imagens combinado no conjunto de descritores 0, a ligação 0 seria feita usando:
layout(set = 0, binding = 0) uniform sampler2D texSampler;
O fragment shader então amostraria a imagem usando sampler2D
a texture
função:
layout(location = 0) in vec2 fragTexCoord;
layout(location = 0) out vec4 outColor;
void main() {
outColor = texture(texSampler, fragTexCoord);
}
Pelo que entendi, um conjunto de descritores (ou ligação) é criado para um amostrador usando VK_DESCRIPTOR_TYPE_SAMPLER
e outro é criado para uma imagem amostrada com o tipo VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
. No entanto, não sei qual sintaxe seria usada para acessar os descritores separados.
layout(set = 0, binding = 0) uniform /* idk what type it is */ sampler
layout(set = 0, binding = 1) uniform /* idk */ sampledImage
// alternatively...
layout(set = 0, binding = 0) uniform /* idk */ sampler
layout(set = 1, binding = 0) uniform /* idk */ sampledImage
Os samplers e imagens são armazenados em diferentes conjuntos/ligações conforme especificado ao criar os conjuntos de descritores?
Se sampler2D
for usado para amostras de imagens combinadas com o descritor type VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
, qual será a sintaxe usada para cada um dos tipos separados?
VK_DESCRIPTOR_TYPE_SAMPLER
, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
, VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
, e VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
?
Como esses objetos separados seriam chamados main
para definir o outColor
valor?
Os tipos GLSL
sampler*
(onde*
é o tipo de textura, como1D
,Cube
, etc) representam descritores da formaVK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
.Conforme especificado na extensão GL_KHR_vulkan_glsl , o tipo GLSL
sampler
(no*
) representa um descritor da formaVK_DESCRIPTOR_TYPE_SAMPLER
. Para descritores do formatoVK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
, os tipos GLSL apropriados sãotexture*
(onde*
está novamente o tipo da textura).Para combinar uma imagem amostrada com um amostrador, você cria um
sampler*
objeto a partir dos dois usando a sintaxe do construtor:texture(sampler2D(t, s), ...);