Link

Descrições de ligações

Depois que os dados de vértice forem carregados na memória do dispositivo, o pipeline deve ser informado com a especificação desses dados. Isso será útil para recuperar e interpretar os dados. Por exemplo, os dados de vértice de geometria precedentes compreendem informações de posição e cor, armazenadas de maneira intercalada. Esta informação precisa ser comunicada ao pipeline subjacente com a ajuda da ligação de entrada de vértice (VkVertexInputBindingDescription) e do descritor de atributo de entrada de vértice (VkVertexInputAttributeDescription).

Primeiro, adicionaremos uma função membro à estrutura Vertex para preencher a estrutura VkVertexInputBindingDescription com os dados corretos.

#include <QVulkanFunctions>

...

struct Vertex {
    QVector2D pos;
    QVector3D color;

    static VkVertexInputBindingDescription getBindingDescription() {
        VkVertexInputBindingDescription bindingDescription = {};

        return bindingDescription;
    }
};

Essa estrutura descreve em qual taxa carregar dados da memória em todos os vértices. Ela especifica o número de bytes entre as entradas de dados e se deve mover para a próxima entrada de dados após cada vértice ou após cada instância.

VkVertexInputBindingDescription bindingDescription = {};
bindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
bindingDescription.stride = sizeof(Vertex);
bindingDescription.binding = 0;

Todos os nossos dados por vértice são reunidos em um array, então teremos apenas uma ligação. O parâmetro binding é um índice no array pBuffers ligado por vkCmdBindVertexBuffers que usaremos mais adiante7. O parâmetro stride especifica o número de bytes de uma entrada para a próxima e o parâmetro inputRate pode ter um dos seguintes valores:

  • VK_VERTEX_INPUT_RATE_VERTEX especifica que o endereçamento de atributos de vértices é uma função do índice de vértices.
  • VK_VERTEX_INPUT_RATE_INSTANCE especifica que o endereçamento de atributos de vértices é uma função do índice da instância.

Como não vamos usar renderização instanciada, vamos nos ater aos dados por vértices.

7 Cada atributo de vértice tem uma ligação que indica de qual índice de ligação do buffer o atributo obtém seus dados. Mas o buffer em si não é especificado no momento da criação. Definimos dinamicamente com vkCmdBindVertexBuffers. Portanto, o valor de ligação de um atributo é equivalente ao valor de ligação fornecido a glVertexAttribBinding no OpenGL.


Anterior Próximo