105 VkBufferUsageFlags usage,
106 VkMemoryPropertyFlags properties,
108 VkDeviceMemory& bufferMemory);
115 void CopyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size);
128 VkImageLayout oldLayout,
129 VkImageLayout newLayout,
130 std::uint32_t mipmapLevels);
138 void CopyBufferToImage(VkBuffer buffer, VkImage image, uint32_t width, uint32_t height);
148 VkFormat imageFormat,
158 uint32_t
FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties);
182 return mCurrentFrame;
195 VkDescriptorSetLayout& descriptorSetLayout,
196 std::vector<char>& spvVertShaderCode,
197 std::vector<char>& spvFragShaderCode);
203 template <
typename T>
209 template <
typename T>
213 void CreateInstance();
214 bool CheckValidationLayerSupport();
215 std::vector<const char*> GetRequiredExtensions();
216 void PopulateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo);
217 static VKAPI_ATTR VkBool32 VKAPI_CALL DebugCallback(
218 VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
219 VkDebugUtilsMessageTypeFlagsEXT messageType,
220 const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
222 void SetupDebugMessenger();
223 VkResult CreateDebugUtilsMessengerEXT(VkInstance instance,
224 VkDebugUtilsMessengerCreateInfoEXT
const* pCreateInfo,
225 VkAllocationCallbacks
const* pAllocator,
226 VkDebugUtilsMessengerEXT* pDebugMessenger);
227 void DestroyDebugUtilsMessengerEXT(VkInstance instance,
228 VkDebugUtilsMessengerEXT debugMessenger,
229 const VkAllocationCallbacks* pAllocator);
230 void CreateSurface();
232 void PickPhysicalDevice();
233 bool IsDeviceSuitable(VkPhysicalDevice device);
235 bool CheckDeviceExtensionSupport(VkPhysicalDevice physicalDevice);
237 VkSampleCountFlagBits CheckMaxUsableSampleCount();
239 void CreateLogicalDevice();
241 void CreateSwapChain();
242 VkSurfaceFormatKHR ChooseSwapSurfaceFormat(std::vector<VkSurfaceFormatKHR>
const& availableFormats);
243 VkPresentModeKHR ChooseSwapPresentMode(std::vector<VkPresentModeKHR>
const& availablePresentModes);
244 VkExtent2D ChooseSwapExtent(VkSurfaceCapabilitiesKHR
const& capabilities);
245 void CleanupSwapChain();
246 void RecreateSwapChain();
248 void CreateImageViews();
249 VkImageView CreateImageView(VkImage image, VkFormat format, VkImageAspectFlags aspectFlags, std::uint32_t mipmapLevels);
251 void CreateRenderPass();
252 VkFormat FindDepthFormat();
253 VkFormat FindSupportedFormat(
const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features);
256 void CreateCommandPool();
258 void CreateColorResources();
260 void CreateVulkanImage(uint32_t width, uint32_t height, std::uint32_t mipmapLevels,
261 VkSampleCountFlagBits numSamples, VkFormat format, VkImageTiling tiling,
262 VkImageUsageFlags usage, VkMemoryPropertyFlags properties, VkImage& image, VkDeviceMemory& imageMemory);
264 void CreateDepthResources();
266 void CreateFramebuffers();
268 void CreateCommandBuffers();
270 void CreateSyncObjects();
272 VkShaderModule CreateShaderModule(std::vector<char>& code);
274 void RecordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex);
276 VkCommandBuffer BeginSingleTimeCommand();
277 bool HasStencilComponent(VkFormat format);
278 void EndSingleTimeCommand(VkCommandBuffer commandBuffer);
282 size_t mCurrentFrame;
284 VkInstance mInstance;
285 VkSurfaceKHR mSurface;
286 std::vector<const char*>
const mValidationLayers = {
"VK_LAYER_KHRONOS_validation" };
287 VkDebugUtilsMessengerEXT mDebugMessenger;
288 std::vector<const char*>
const mDeviceExtensions = { VK_KHR_SWAPCHAIN_EXTENSION_NAME };
289 VkPhysicalDevice mPhysicalDevice = VK_NULL_HANDLE;
290 VkPhysicalDeviceProperties mPhysicalDeviceProperties;
291 VkPhysicalDeviceFeatures mPhysDevSupportedFeatures;
293 VkSampleCountFlagBits mMSAASamples;
295 VkDevice mLogicalDevice;
296 VkQueue mGraphicsQueue;
297 VkQueue mPresentQueue;
299 VkSwapchainKHR mSwapChain;
300 std::vector<VkImage> mSwapChainImages;
301 VkFormat mSwapChainImageFormat;
302 VkExtent2D mSwapChainExtent;
304 std::vector<VkImageView> mSwapChainImageViews;
305 std::vector<VkFramebuffer> mSwapChainFramebuffers;
307 VkRenderPass mRenderPass;
309 VkCommandPool mCommandPool;
310 std::vector<VkCommandBuffer> mCommandBuffers;
311 uint32_t mImageIndex = 0;
314 VkDeviceMemory mColorImageMemory;
315 VkImageView mColorImageView;
318 VkDeviceMemory mDepthImageMemory;
319 VkImageView mDepthImageView;
321 std::vector<VkSemaphore> mImageAvailableSemaphores;
322 std::vector<VkSemaphore> mRenderFinishedSemaphores;
323 std::vector<VkFence> mInFlightFences;
324 std::vector<VkFence> mImagesInFlight;
325 std::vector<IRendererObserver*> mObservers;
Manages texture loading, GPU uploading, and caching for reuse.