je veux créer un tableau de l'objet ubo dans mon CPU le mettre à jour, puis le télécharger sur le GPU dans un appel comme ça. (pour l'exemple disons que je n'ai que deux objets).créer tableau de ubo et présenter chacun à la fois à son shader
std::vector<UniformBufferObject> ubo(m_allObject.size());
int index = 0;
for (RenderableObject* rendObj : m_allObject)
{
ubo[index].proj = m_camera->getProjection();
ubo[index].view = m_camera->getView();
ubo[index].model = rendObj->getTransform().getModel();
ubo[index].proj[1][1] *= -1;
index++;
}
int size = sizeof(UniformBufferObject) *m_allObject.size();
void* data;
m_instance->getLogicalDevice().mapMemory(ykEngine::Buffer::m_uniformBuffer.m_bufferMemory, 0, size , vk::MemoryMapFlags(), &data);
memcpy(data, ubo.data(), size);
m_instance->getLogicalDevice().unmapMemory(ykEngine::Buffer::m_uniformBuffer.m_bufferMemory);
J'ai créé un tampon de la taille de deux ubo. (la création fonctionne, car elle fonctionne avec ubo en taille 1).
vk::DeviceSize bufferSize = sizeof(UniformBufferObject) * 2;
createBuffer(logicalDevice, bufferSize, vk::BufferUsageFlagBits::eUniformBuffer, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent, m_uniformBuffer.m_buffer, m_uniformBuffer.m_bufferMemory);
et que je mets un décalage dans la création de jeu de descripteur:
vk::DescriptorBufferInfo bufferInfo;
bufferInfo.buffer = uniformBuffer;
bufferInfo.offset = offsetForUBO;
bufferInfo.range = sizeof(UniformBufferObject);
le décalage est la taille de UniformBufferObject * l'indice de l'objet.
chaque objet ont est propre descriptorsetLayout mais le samepipline
lorsque je tente de mettre à jour l'ensemble de descripteurs je reçois l'erreur:
je ne pourrais pas trouver enum Aligement qui précisent que information.
Si quelqu'un sait comment faire cela, cela aidera beaucoup.
merci.
comment puis-je obtenir cet alinment? son erreur de lien avec la méthode normale et quand j'essaie d'utiliser: auto func = (PFN_vkGetPhysicalDeviceProperties2KHR) vkGetDeviceProcAddr (* this, "vkGetPhysicalDeviceProperties2KHR"); Ce n'est pas non plus un travail. –
@OriYampolsky: Votre implémentation ne prend peut-être pas en charge cette extension. La fonction principale s'appelle 'vkGetPhysicalDeviceProperties'. –
@OriYampolsky la version 2KHR a besoin d'une extension d'instance "VK_KHR_get_physical_device_properties2" –