Acessando comandos principais do Vulkan
Por padrão, o Qt não se vincula a nenhuma biblioteca Vulkan. Em vez disso, todas as funções são resolvidas dinamicamente em tempo de execução. Cada objeto QVulkanInstance
fornece um objeto QVulkanFunctions
recuperável via QVulkanInstance::functions()
. Esse objeto não contém funções de nível de dispositivo para evitar a sobrecarga potencial de um despacho interno. Em vez disso, funções que dependem de um dispositivo, ou um objeto filho despachável de um dispositivo, são expostas por meio do objeto QVulkanDeviceFunctions
recuperável via QVulkanInstance::deviceFunctions()
. QVulkanFunctions
e QVulkanDeviceFunctions
juntos fornecem acesso ao núcleo completo da API Vulkan, excluindo quaisquer extensões.
Normalmente as funções de QVulkanDeviceFunctions
no renderizador são muito usadas, portanto, um padrão comum é adicionar o campo privado QVulkanDeviceFunctions *m_deviceFunctions
à classe Renderer
e inicializá-lo na função virtual initResources()
:
void Renderer::initResources() {
VkDevice device = m_window->device();
m_deviceFunctions = m_window->vulkanInstance()->deviceFunctions(device);
}
Não podemos nos esquecer de adicionar a função pública void initResources() override;
e #include <QVulkanDeviceFunctions>
em renderer.h
.
Quanto aos tipos de dados do Vulkan podemos usá-los diretamente sem nos preocuparmos com os detalhes da plataforma. É o suficiente ter os cabeçalhos do SDK Vulkan presentes no sistema.