У меня проблема с рисованием ячеек в Вулкане.Я хочу привязать UniformBufferObject в следующей форме к объекту.
void mainLoop() {
..
vulkanDrawing.Draw();
plane.UpdateUniformBuffers();
..
}
Чтобы получить currentImage, я создал метод SetCurrentImage (uint32_t currentImage).SetCurrentImage устанавливается из метода VulkanDrawing :: Draw ().Это текущее изображение используется в UpdateUniformBuffers ().Я получаю только черный экран, если я запускаю это приложение.Так как я хочу увидеть квадрат.В прошлом я вызывал метод UpdateUniformBuffers с параметром imageIndex в VulkanDrawing :: Draw ().Я думаю, что это может быть проблема с заборами или семафорами.Но я не знаю, как это исправить.Использую ли я в конечном итоге неправильную архитектуру?
Я приложил важные методы:
void CVulkanDrawing::Draw()
{
vkWaitForFences(m_LogicalDevice.getDevice(), 1, &inFlightFences[currentFrame], VK_TRUE, std::numeric_limits<uint64_t>::max());
vkResetFences(m_LogicalDevice.getDevice(), 1,inFlightFences[currentFrame]);
uint32_t imageIndex;
vkAcquireNextImageKHR(m_LogicalDevice.getDevice(), m_Presentation.GetSwapChain(), std::numeric_limits<uint64_t>::max(), imageAvailableSemaphores[currentFrame], VK_NULL_HANDLE, &imageIndex);
for(unsigned int i = 0; i < m_VulkanMesh.size(); i++)
{
//m_VulkanMesh.at(i).UpdateUniformBuffers(imageIndex);
m_VulkanMesh.at(i).SetCurrentImage(imageIndex);
}
VkSubmitInfo submitInfo = {};
...
currentFrame = (currentFrame + 1) % MAX_FRAMES_IN_FLIGHT;
}
void CVulkanMesh::UpdateUniformBuffers()
{
...
vkMapMemory(m_LogicalDevice.getDevice(), uniformBuffersMemory[this->m_CurrentImage], 0, sizeof(ubo), 0, &data);
memcpy(data, &ubo, sizeof(ubo));
vkUnmapMemory(m_LogicalDevice.getDevice(), uniformBuffersMemory[this->m_CurrentImage]);
}
void CVulkanMesh::SetCurrentImage(uint32_t currentImage)
{
this->m_CurrentImage = currentImage;
}
Я дополнительно создал ветку с именем: https://github.com/dekorlp/VulkanWrapper/tree/VulkanTest
Я надеюсь, что вы можетепомогите мне:)
С наилучшими пожеланиями
Pixma