// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - Renderer module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_VULKANRENDERER_VULKANRENDERIMAGE_HPP #define NAZARA_VULKANRENDERER_VULKANRENDERIMAGE_HPP #include #include #include #include #include #include #include #include namespace Nz { class VkRenderWindow; class NAZARA_VULKANRENDERER_API VulkanRenderImage : public RenderImage { public: VulkanRenderImage(VkRenderWindow& owner); VulkanRenderImage(const VulkanRenderImage&) = delete; VulkanRenderImage(VulkanRenderImage&&) noexcept = default; ~VulkanRenderImage(); void Execute(const std::function& callback, QueueTypeFlags queueTypeFlags) override; inline Vk::Fence& GetInFlightFence(); inline Vk::Semaphore& GetImageAvailableSemaphore(); inline UInt32 GetImageIndex(); inline Vk::Semaphore& GetRenderFinishedSemaphore(); VulkanUploadPool& GetUploadPool() override; void Present() override; inline void Reset(UInt32 imageIndex); void SubmitCommandBuffer(CommandBuffer* commandBuffer, QueueTypeFlags queueTypeFlags) override; void SubmitCommandBuffer(VkCommandBuffer commandBuffer, QueueTypeFlags queueTypeFlags); VulkanRenderImage& operator=(const VulkanRenderImage&) = delete; VulkanRenderImage& operator=(VulkanRenderImage&&) = delete; private: std::size_t m_currentCommandBuffer; std::vector m_inFlightCommandBuffers; std::vector m_graphicalCommandsBuffers; VkRenderWindow& m_owner; Vk::CommandPool m_commandPool; Vk::Fence m_inFlightFence; Vk::Semaphore m_imageAvailableSemaphore; Vk::Semaphore m_renderFinishedSemaphore; VulkanUploadPool m_uploadPool; UInt32 m_imageIndex; }; } #include #endif // NAZARA_VULKANRENDERER_VULKANRENDERIMAGE_HPP