Объекты синхронизации
This commit is contained in:
parent
158f8c76df
commit
fd4061639d
|
@ -31,6 +31,9 @@ class Vulkan
|
|||
VkDeviceMemory vertexBufferMemory; // Память буфера вершин
|
||||
VkBuffer indexBuffer; // Буфер индексов
|
||||
VkDeviceMemory indexBufferMemory; // Память буфера индексов
|
||||
std::vector<VkSemaphore> imageAvailableSemaphores; // семафор доступности изображения
|
||||
std::vector<VkSemaphore> renderFinishedSemaphores; // семафор окончания рендера
|
||||
std::vector<VkFence> inWorkFences; // барьер кадра в работе
|
||||
|
||||
// Структура для хранения флагов
|
||||
struct
|
||||
|
@ -53,6 +56,7 @@ class Vulkan
|
|||
void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size); // Копирование между буферами данных
|
||||
void createVertexBuffer(); // Создание буфера вершин
|
||||
void createIndexBuffer(); // Создание буфера индексов
|
||||
void createSyncObjects(); // Создание объектов синхронизации
|
||||
};
|
||||
|
||||
#endif // VK_H
|
35
src/vk.cpp
35
src/vk.cpp
|
@ -22,6 +22,7 @@ void Vulkan::init(GLFWwindow* window)
|
|||
createCommandPool(); // Создание пула команд
|
||||
createVertexBuffer(); // Создание буфера вершин
|
||||
createIndexBuffer(); // Создание буфера индексов
|
||||
createSyncObjects(); // Создание объектов синхронизации
|
||||
}
|
||||
|
||||
// завершение работы
|
||||
|
@ -33,6 +34,14 @@ void Vulkan::destroy()
|
|||
vkDestroyBuffer(logicalDevice, vertexBuffer, nullptr); // Уничтожение буфера вершин
|
||||
vkFreeMemory(logicalDevice, vertexBufferMemory, nullptr); // Освобождение памяти буфера вершин
|
||||
|
||||
// Уничтожение объектов синхронизации
|
||||
for (int i = 0; i < surface.imageCount; i++)
|
||||
{
|
||||
vkDestroySemaphore(logicalDevice, renderFinishedSemaphores[i], nullptr);
|
||||
vkDestroySemaphore(logicalDevice, imageAvailableSemaphores[i], nullptr);
|
||||
vkDestroyFence(logicalDevice, inWorkFences[i], nullptr);
|
||||
}
|
||||
|
||||
vkDestroyCommandPool(logicalDevice, commandPool, nullptr); // Уничтожение командного пула
|
||||
|
||||
vkDestroyPipeline(logicalDevice, graphicsPipeline, nullptr); // Уничтожение графического конвейера
|
||||
|
@ -920,3 +929,29 @@ void Vulkan::createIndexBuffer()
|
|||
vkDestroyBuffer(logicalDevice, stagingBuffer, nullptr);
|
||||
vkFreeMemory(logicalDevice, stagingBufferMemory, nullptr);
|
||||
}
|
||||
|
||||
// Создание объектов синхронизации
|
||||
void Vulkan::createSyncObjects()
|
||||
{
|
||||
imageAvailableSemaphores.resize(surface.imageCount);
|
||||
renderFinishedSemaphores.resize(surface.imageCount);
|
||||
inWorkFences.resize(surface.imageCount);
|
||||
|
||||
VkSemaphoreCreateInfo semaphoreInfo{};
|
||||
semaphoreInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
|
||||
|
||||
VkFenceCreateInfo fenceInfo{};
|
||||
fenceInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
|
||||
fenceInfo.flags = VK_FENCE_CREATE_SIGNALED_BIT;
|
||||
|
||||
for (int i = 0; i < surface.imageCount; i++)
|
||||
{
|
||||
if (vkCreateSemaphore(logicalDevice, &semaphoreInfo, nullptr, &imageAvailableSemaphores[i]) != VK_SUCCESS
|
||||
|| vkCreateSemaphore(logicalDevice, &semaphoreInfo, nullptr, &renderFinishedSemaphores[i]) != VK_SUCCESS
|
||||
|| vkCreateFence(logicalDevice, &fenceInfo, nullptr, &inWorkFences[i]) != VK_SUCCESS)
|
||||
{
|
||||
throw std::runtime_error("Unable to create synchronization objects for frame");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue