Orange/src/Orange/Render/RenderContext_Util.cpp

59 lines
1.9 KiB
C++

#include <Orange/Render/RenderContext.h>
#include <vulkan/vulkan_core.h>
namespace orange
{
VulkanResult<VkFence> RenderContext::CreateFence(bool signalled)
{
VkFenceCreateInfo fenceInfo =
{
.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
.flags = signalled ? VK_FENCE_CREATE_SIGNALED_BIT : 0u,
};
VkFence fence = VK_NULL_HANDLE;
VkResult res = VK_SUCCESS;
if ((res = vkCreateFence(m_device, &fenceInfo, nullptr, &fence)) != VK_SUCCESS)
return VulkanResult<VkFence>::Error(res);
return VulkanResult<VkFence>::Success(fence);
}
VulkanResult<VkSemaphore> RenderContext::CreateSemaphore()
{
VkSemaphoreCreateInfo semaphoreInfo =
{
.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
};
VkSemaphore semaphore = VK_NULL_HANDLE;
VkResult res = VK_SUCCESS;
if ((res = vkCreateSemaphore(m_device, &semaphoreInfo, nullptr, &semaphore)) != VK_SUCCESS)
return VulkanResult<VkSemaphore>::Error(res);
return VulkanResult<VkSemaphore>::Success(semaphore);
}
VulkanResult<VoidResult> RenderContext::BeginCommandBuffer(VkCommandBuffer buffer)
{
VkCommandBufferBeginInfo beginInfo =
{
.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
};
VkResult res = VK_SUCCESS;
if ((res = vkBeginCommandBuffer(buffer, &beginInfo)) != VK_SUCCESS)
return VulkanResult<VoidResult>::Error(res);
return VulkanResult<VoidResult>::Success();
}
VulkanResult<VoidResult> RenderContext::EndCommandBuffer(VkCommandBuffer buffer)
{
VkResult res = VK_SUCCESS;
if ((res = vkEndCommandBuffer(buffer)) != VK_SUCCESS)
return VulkanResult<VoidResult>::Error(res);
return VulkanResult<VoidResult>::Success();
}
}