Browse Source

reworked engine structure

Moved a lot of the methods inside the first_app class into their own class (coral_renderer and render_system).
This lays a nice foundation to build upon.
Jef Belmans 2 years ago
parent
commit
17677351f4
31 changed files with 563 additions and 334 deletions
  1. 4 0
      coral_renderer/CMakeLists.txt
  2. 17 26
      coral_renderer/coral_pipeline.cpp
  3. 8 3
      coral_renderer/coral_pipeline.h
  4. 165 0
      coral_renderer/coral_renderer.cpp
  5. 57 0
      coral_renderer/coral_renderer.h
  6. 9 4
      coral_renderer/coral_swapchain.cpp
  7. 8 0
      coral_renderer/coral_swapchain.h
  8. 12 167
      coral_renderer/first_app.cpp
  9. 3 22
      coral_renderer/first_app.h
  10. 84 0
      coral_renderer/render_system.cpp
  11. 34 0
      coral_renderer/render_system.h
  12. 2 2
      out/build/x64-Debug/.cmake/api/v1/reply/codemodel-v2-c81bc7e9141c5479d1e0.json
  13. 2 2
      out/build/x64-Debug/.cmake/api/v1/reply/index-2023-07-04T21-04-52-0762.json
  14. 1 1
      out/build/x64-Debug/.cmake/api/v1/reply/target-Shaders-Debug-df18d665ca42a2d74c3a.json
  15. 34 6
      out/build/x64-Debug/.cmake/api/v1/reply/target-coral_renderer-Debug-5e1c5e75e37de59a2f13.json
  16. BIN
      out/build/x64-Debug/.ninja_deps
  17. 34 78
      out/build/x64-Debug/.ninja_log
  18. 2 2
      out/build/x64-Debug/Testing/Temporary/LastTest.log
  19. 17 1
      out/build/x64-Debug/build.ninja
  20. BIN
      out/build/x64-Debug/coral_renderer/CMakeFiles/coral_renderer.dir/vc140.pdb
  21. BIN
      out/build/x64-Debug/coral_renderer/coral_renderer.ilk
  22. BIN
      out/build/x64-Debug/coral_renderer/coral_renderer.pdb
  23. 2 2
      out/build/x64-Release/.cmake/api/v1/reply/codemodel-v2-74daa3b1014395a5e6a4.json
  24. 2 2
      out/build/x64-Release/.cmake/api/v1/reply/index-2023-07-04T21-27-50-0673.json
  25. 1 1
      out/build/x64-Release/.cmake/api/v1/reply/target-Shaders-Release-13841c2b337be2ce961a.json
  26. 36 8
      out/build/x64-Release/.cmake/api/v1/reply/target-coral_renderer-Release-4c330dfb115919c6410b.json
  27. BIN
      out/build/x64-Release/.ninja_deps
  28. 10 4
      out/build/x64-Release/.ninja_log
  29. 2 2
      out/build/x64-Release/Testing/Temporary/LastTest.log
  30. 17 1
      out/build/x64-Release/build.ninja
  31. BIN
      out/build/x64-Release/coral_renderer/shaders/simple_shader.vert.spv

+ 4 - 0
coral_renderer/CMakeLists.txt

@@ -17,6 +17,10 @@ add_executable(coral_renderer
     "coral_mesh.cpp"
     "coral_gameobject.h"
     "coral_gameobject.cpp"
+    "coral_renderer.h"
+    "coral_renderer.cpp"
+    "render_system.h"
+    "render_system.cpp"
 )
 
 add_dependencies(coral_renderer Shaders)

+ 17 - 26
coral_renderer/coral_pipeline.cpp

@@ -31,24 +31,18 @@ void coral_pipeline::bind(VkCommandBuffer command_buffer)
 	vkCmdBindPipeline(command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, graphics_pipeline_);
 }
 
-PipelineConfigInfo coral_3d::coral_pipeline::default_pipeline_config_info(uint32_t width, uint32_t height)
+void coral_3d::coral_pipeline::default_pipeline_config_info(PipelineConfigInfo& config_info)
 {
-	PipelineConfigInfo config_info{};
-
 	// IA
 	config_info.input_assembly_info = vkinit::input_assembly_ci(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST);
 
-	// VIEWPORT
-	config_info.viewport.x = 0.f;
-	config_info.viewport.y = 0.f;
-	config_info.viewport.width = static_cast<float>(width);
-	config_info.viewport.height = static_cast<float>(height);
-	config_info.viewport.minDepth = 0.f;
-	config_info.viewport.maxDepth = 1.f;
-
-	// SCISSOR
-	config_info.scissor.offset = { 0,0 };
-	config_info.scissor.extent = {width, height};
+	// VIEWPORT INFO
+	config_info.viewport_info.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
+	config_info.viewport_info.pNext = nullptr;
+	config_info.viewport_info.viewportCount = 1;
+	config_info.viewport_info.pViewports = nullptr;
+	config_info.viewport_info.scissorCount = 1;
+	config_info.viewport_info.pScissors = nullptr;
 
 	// RASTERIZER
 	config_info.rasterization_info = vkinit::rasterization_state_ci(VK_POLYGON_MODE_FILL);
@@ -74,7 +68,13 @@ PipelineConfigInfo coral_3d::coral_pipeline::default_pipeline_config_info(uint32
 	// DEPTH INFO
 	config_info.depth_stencil_info = vkinit::depth_stencil_ci(true, true, VK_COMPARE_OP_LESS_OR_EQUAL);
 
-	return config_info;
+	// DYNAMIC STATE
+	config_info.dynamic_state_enables = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR };
+	config_info.dynamic_state_info.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
+	config_info.dynamic_state_info.pDynamicStates = config_info.dynamic_state_enables.data();
+	config_info.dynamic_state_info.dynamicStateCount =
+		static_cast<uint32_t>(config_info.dynamic_state_enables.size());
+	config_info.dynamic_state_info.flags = 0;
 }
 
 std::vector<char> coral_pipeline::read_file(const std::string& file_path)
@@ -142,27 +142,18 @@ void coral_pipeline::create_graphics_pipeline(
 	vertex_input_info.vertexBindingDescriptionCount = static_cast<uint32_t>(vertex_desc.bindings.size());
 	vertex_input_info.pVertexBindingDescriptions = vertex_desc.bindings.data();
 
-	// VIEWPORT INFO
-	VkPipelineViewportStateCreateInfo viewport_info{};
-	viewport_info.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
-	viewport_info.pNext = nullptr;
-	viewport_info.viewportCount = 1;
-	viewport_info.pViewports = &config_info.viewport;
-	viewport_info.scissorCount = 1;
-	viewport_info.pScissors = &config_info.scissor;
-
 	VkGraphicsPipelineCreateInfo pipeline_info{};
 	pipeline_info.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
 	pipeline_info.stageCount = 2;
 	pipeline_info.pStages = shader_stages;
 	pipeline_info.pVertexInputState = &vertex_input_info;
 	pipeline_info.pInputAssemblyState = &config_info.input_assembly_info;
-	pipeline_info.pViewportState = &viewport_info;
+	pipeline_info.pViewportState = &config_info.viewport_info;
 	pipeline_info.pRasterizationState = &config_info.rasterization_info;
 	pipeline_info.pMultisampleState = &config_info.multisample_info;
 	pipeline_info.pColorBlendState = &config_info.color_blend_info;
 	pipeline_info.pDepthStencilState = &config_info.depth_stencil_info;
-	pipeline_info.pDynamicState = nullptr;
+	pipeline_info.pDynamicState = &config_info.dynamic_state_info;
 
 	pipeline_info.layout = config_info.pipeline_layout;
 	pipeline_info.renderPass = config_info.render_pass;

+ 8 - 3
coral_renderer/coral_pipeline.h

@@ -10,14 +10,19 @@ namespace coral_3d
 {
 	struct PipelineConfigInfo
 	{
-		VkViewport viewport;
-		VkRect2D scissor;
+		PipelineConfigInfo() = default;
+		PipelineConfigInfo(const PipelineConfigInfo&) = delete;
+		PipelineConfigInfo& operator=(const PipelineConfigInfo&) = delete;
+
+		VkPipelineViewportStateCreateInfo viewport_info;
 		VkPipelineInputAssemblyStateCreateInfo input_assembly_info;
 		VkPipelineRasterizationStateCreateInfo rasterization_info;
 		VkPipelineMultisampleStateCreateInfo multisample_info;
 		VkPipelineColorBlendAttachmentState color_blend_attachment;
 		VkPipelineColorBlendStateCreateInfo color_blend_info;
 		VkPipelineDepthStencilStateCreateInfo depth_stencil_info;
+		std::vector<VkDynamicState> dynamic_state_enables;
+		VkPipelineDynamicStateCreateInfo dynamic_state_info;
 		VkPipelineLayout pipeline_layout = nullptr;
 		VkRenderPass render_pass = nullptr;
 		uint32_t subpass = 0;
@@ -39,7 +44,7 @@ namespace coral_3d
 
 		void bind(VkCommandBuffer command_buffer);
 
-		static PipelineConfigInfo default_pipeline_config_info(uint32_t width, uint32_t height);
+		static void default_pipeline_config_info(PipelineConfigInfo& config_info);
 
 	private:
 		static std::vector<char> read_file(const std::string& file_path);

+ 165 - 0
coral_renderer/coral_renderer.cpp

@@ -0,0 +1,165 @@
+#include "coral_renderer.h"
+
+// STD
+#include <array>
+#include <stdexcept>
+
+#include "vk_initializers.h"
+
+using namespace coral_3d;
+
+coral_renderer::coral_renderer(coral_window& window, coral_device& device)
+    : window_{window}
+    , device_{device}
+{
+    recreate_swapchain();
+    create_command_buffers();
+}
+
+coral_renderer::~coral_renderer()
+{
+    free_command_buffers();
+}
+
+VkCommandBuffer coral_renderer::begin_frame()
+{
+	assert(!is_frame_started_ && "ERROR! coral_renderer::begin_frame() >> Can't call begin frame while already in progress!");
+    
+	auto result = swapchain_->aqcuire_next_image(&current_image_index_);
+
+	// Window has been resized
+	if (result == VK_ERROR_OUT_OF_DATE_KHR)
+	{
+		recreate_swapchain();
+		return nullptr;
+	}
+
+	if (result != VK_SUCCESS && result != VK_SUBOPTIMAL_KHR)
+		throw std::runtime_error("ERROR! coral_renderer::begin_frame() >> Failed to aquire swapchain image!");
+
+	is_frame_started_ = true;
+
+	auto command_buffer{ get_current_command_buffer() };
+
+	VkCommandBufferBeginInfo begin_info{};
+	begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
+
+	if (vkBeginCommandBuffer(command_buffer, &begin_info) != VK_SUCCESS)
+		throw std::runtime_error("ERROR! coral_renderer::begin_frame() >> Failed to begin recording command buffer!");
+
+	return command_buffer;
+}
+
+void coral_renderer::end_frame()
+{
+	assert(is_frame_started_ && "ERROR! coral_renderer::end_frame() >> Can't call end_frame() if frame is not in progress!");
+
+	auto command_buffer{ get_current_command_buffer() };
+	if (vkEndCommandBuffer(command_buffer) != VK_SUCCESS)
+		throw std::runtime_error("ERROR! coral_renderer::end_frame() >> Failed to record command buffer!");
+
+	auto result = swapchain_->submit_command_buffer(&command_buffer, &current_image_index_);
+
+	if (result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_SUBOPTIMAL_KHR || window_.was_window_resized())
+	{
+		window_.reset_window_resized();
+		recreate_swapchain();
+	}
+	else if (result != VK_SUCCESS)
+		throw std::runtime_error("ERROR! coral_renderer::end_frame() >> Failed to present swapchain image!");
+
+	is_frame_started_ = false;
+	current_frame_index_ = (current_frame_index_ + 1) % coral_swapchain::MAX_FRAMES_IN_FLIGHT;
+}
+
+void coral_renderer::begin_swapchain_render_pass(VkCommandBuffer command_buffer)
+{
+	assert(is_frame_started_ && "ERROR! first_app::begin_swapchain_render_pass() >> Can't call begin_swapchain_render_pass() if frame is not in progress!");
+	assert(command_buffer == get_current_command_buffer() &&
+		"ERROR! first_app::begin_swapchain_render_pass() >> Can't begin render pass on a buffer from a different frame");
+
+	VkCommandBufferBeginInfo begin_info{};
+	begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
+
+	VkRenderPassBeginInfo render_pass_info{};
+	render_pass_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
+	render_pass_info.renderPass = swapchain_->get_render_pass();
+	render_pass_info.framebuffer = swapchain_->get_frame_buffers(current_image_index_);
+
+	render_pass_info.renderArea.offset = { 0, 0 };
+	render_pass_info.renderArea.extent = swapchain_->get_swapchain_extent();
+
+	std::array<VkClearValue, 2> clear_values{};
+	clear_values[0].color = { 0.1f, 0.1f, 0.1f, 1.0f };
+	clear_values[1].depthStencil = { 1.0f, 0 };
+	render_pass_info.clearValueCount = static_cast<uint32_t>(clear_values.size());
+	render_pass_info.pClearValues = clear_values.data();
+
+	vkCmdBeginRenderPass(command_buffer, &render_pass_info, VK_SUBPASS_CONTENTS_INLINE);
+
+	VkViewport viewport{};
+	viewport.x = 0.0f;
+	viewport.y = 0.0f;
+	viewport.width = static_cast<float>(swapchain_->get_swapchain_extent().width);
+	viewport.height = static_cast<float>(swapchain_->get_swapchain_extent().height);
+	viewport.minDepth = 0.0f;
+	viewport.maxDepth = 1.0f;
+	VkRect2D scissor{ {0, 0}, swapchain_->get_swapchain_extent() };
+	vkCmdSetViewport(command_buffer, 0, 1, &viewport);
+	vkCmdSetScissor(command_buffer, 0, 1, &scissor);
+
+}
+
+void coral_renderer::end_swapchain_render_pass(VkCommandBuffer command_buffer)
+{
+	assert(is_frame_started_ && "ERROR! first_app::end_swapchain_render_pass() >> Can't call end_swapchain_render_pass() if frame is not in progress!");
+	assert(command_buffer == get_current_command_buffer() &&
+		"ERROR! first_app::end_swapchain_render_pass() >> Can't end render pass on a buffer from a different frame");
+
+	vkCmdEndRenderPass(command_buffer);
+}
+
+void coral_renderer::create_command_buffers()
+{
+	command_buffers_.resize(coral_swapchain::MAX_FRAMES_IN_FLIGHT);
+
+	VkCommandBufferAllocateInfo alloc_info{ vkinit::command_buffer_ai(device_.get_command_pool(), static_cast<uint32_t>(command_buffers_.size())) };
+	if (vkAllocateCommandBuffers(device_.device(), &alloc_info, command_buffers_.data()) != VK_SUCCESS)
+		throw std::runtime_error("ERROR! first_app::create_command_buffers() >> Failed to allocate command buffers!");
+}
+
+void coral_renderer::free_command_buffers()
+{
+	vkFreeCommandBuffers(
+		device_.device(),
+		device_.get_command_pool(),
+		static_cast<uint32_t>(command_buffers_.size()),
+		command_buffers_.data());
+
+	command_buffers_.clear();
+}
+
+void coral_renderer::recreate_swapchain()
+{
+	auto extent{ window_.get_extent() };
+
+	// Idle when minimized
+	while (extent.width == 0 || extent.height == 0)
+	{
+		extent = window_.get_extent();
+		glfwWaitEvents();
+	}
+
+	vkDeviceWaitIdle(device_.device());
+
+	if (swapchain_ == nullptr)
+		swapchain_ = std::make_unique<coral_swapchain>(device_, extent);
+	else
+	{
+		std::shared_ptr<coral_swapchain> old_swapchain { std::move(swapchain_) };
+		swapchain_ = std::make_unique<coral_swapchain>(device_, extent, old_swapchain);
+
+		if (!old_swapchain->compare_swap_formats(*swapchain_.get()))
+			throw std::runtime_error("ERROR! coral_renderer::recreate_swapchain() >> Swapchain image or depth format has changed!");
+	}
+}

+ 57 - 0
coral_renderer/coral_renderer.h

@@ -0,0 +1,57 @@
+#pragma once
+
+#include "coral_device.h"
+#include "coral_swapchain.h"
+#include "coral_window.h"
+
+// STD
+#include <memory>
+#include <vector>
+#include <cassert>
+
+namespace coral_3d
+{
+	class coral_renderer final
+	{
+	public:
+		coral_renderer(coral_window& window, coral_device& device);
+		~coral_renderer();
+
+		coral_renderer(const coral_renderer&) = delete;
+		coral_renderer& operator=(const coral_renderer&) = delete;
+
+		VkRenderPass get_swapchain_render_pass() const { return swapchain_->get_render_pass(); }
+		bool is_frame_in_progress() const { return is_frame_started_; }
+		
+		VkCommandBuffer get_current_command_buffer() const
+		{
+			assert(is_frame_started_ && "ERROR! coral_renderer::get_current_command_buffer() >> Cannot get buffer when frame not in progress");
+			return command_buffers_[current_frame_index_];
+		}
+
+		int get_frame_index() const
+		{
+			assert(is_frame_started_ && "ERROR! coral_renderer::get_frame_index() >> Cannot get frame index when frame not in progress");
+			return current_frame_index_;
+		}
+
+		VkCommandBuffer begin_frame();
+		void end_frame();
+		void begin_swapchain_render_pass(VkCommandBuffer command_buffer);
+		void end_swapchain_render_pass(VkCommandBuffer command_buffer);
+
+	private:
+		void create_command_buffers();
+		void free_command_buffers();
+		void recreate_swapchain();
+
+		coral_window& window_;
+		coral_device& device_;
+		std::unique_ptr<coral_swapchain> swapchain_;
+		std::vector<VkCommandBuffer> command_buffers_;
+
+		uint32_t current_image_index_;
+		int current_frame_index_{ 0 };
+		bool is_frame_started_{ false };
+	};
+}

+ 9 - 4
coral_renderer/coral_swapchain.cpp

@@ -266,12 +266,16 @@ void coral_swapchain::create_render_pass()
 
 	// These dependencies tell Vulkan that the attachment cannot be used before the previous renderpasses have finished using it
 	VkSubpassDependency dependency{};
-	dependency.srcSubpass = VK_SUBPASS_EXTERNAL;
 	dependency.dstSubpass = 0;
+
+	dependency.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
+	dependency.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT;
+
+	dependency.srcSubpass = VK_SUBPASS_EXTERNAL;
 	dependency.srcAccessMask = 0;
-	dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
-	dependency.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
-	dependency.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
+	dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT;
+	
+	
 
 	std::array<VkAttachmentDescription, 2> attachments { color_attachment, depth_attachment };
 
@@ -302,6 +306,7 @@ void coral_swapchain::create_render_pass()
 void coral_swapchain::create_depth_resources()
 {
 	VkFormat depth_format{ find_depth_format() };
+	swapchain_depth_format_ = depth_format;
 
 	depth_images_.resize(image_count());
 	depth_image_views_.resize(image_count());

+ 8 - 0
coral_renderer/coral_swapchain.h

@@ -64,6 +64,13 @@ namespace coral_3d
         VkResult aqcuire_next_image(uint32_t* image_index);
         VkResult submit_command_buffer(const VkCommandBuffer* buffers, uint32_t* image_index);
 
+        bool compare_swap_formats(const coral_swapchain& swapchain) const
+        {
+            return
+                swapchain.swapchain_depth_format_ == swapchain_depth_format_ &&
+                swapchain.swapchain_image_format_ == swapchain_image_format_;
+        }
+
     private:
         void init();
         void create_swapchain();
@@ -83,6 +90,7 @@ namespace coral_3d
         DeletionQueue deletion_queue_;
 
         VkFormat swapchain_image_format_;
+        VkFormat swapchain_depth_format_;
         VkExtent2D swapchain_extent_;
 
         std::vector<VkFramebuffer> swapchain_frame_buffers_;

+ 12 - 167
coral_renderer/first_app.cpp

@@ -1,5 +1,7 @@
 #include "first_app.h"
 
+#include "render_system.h"
+
 // STD
 #include <stdexcept>
 #include <array>
@@ -11,22 +13,27 @@ using namespace coral_3d;
 first_app::first_app()
 {
 	load_gameobjects();
-	create_pipeline_layout();
-	recreate_swapchain();
-	create_command_buffers();
 }
 
 first_app::~first_app()
 {
-	vkDestroyPipelineLayout(device_.device(), pipeline_layout_, nullptr);
 }
 
 void first_app::run()
 {
+	render_system render_system{ device_, renderer_.get_swapchain_render_pass() };
+
 	while (!window_.should_close())
 	{
 		glfwPollEvents();
-		draw_frame();
+
+		if (auto command_buffer = renderer_.begin_frame())
+		{
+			renderer_.begin_swapchain_render_pass(command_buffer);
+			render_system.render_gameobjects(command_buffer, gameobjects_);
+			renderer_.end_swapchain_render_pass(command_buffer);
+			renderer_.end_frame();
+		}
 	}
 
 	vkDeviceWaitIdle(device_.device());
@@ -48,166 +55,4 @@ void first_app::load_gameobjects()
 	triangle.transform_.translation.x = -.2f;
 
 	gameobjects_.emplace_back(std::move(triangle));
-}
-
-void first_app::create_pipeline_layout()
-{
-	VkPushConstantRange push_constant_range{};
-	push_constant_range.stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT;
-	push_constant_range.offset = 0;
-	push_constant_range.size = sizeof(PushConstant);
-
-	VkPipelineLayoutCreateInfo layout_info{ vkinit::pipeline_layout_ci() };
-	layout_info.pushConstantRangeCount = 1;
-	layout_info.pPushConstantRanges = &push_constant_range;
-
-	if (vkCreatePipelineLayout(device_.device(), &layout_info, nullptr, &pipeline_layout_) != VK_SUCCESS)
-		throw std::runtime_error("ERROR! first_app::create_pipeline_layout() >> Failed to create pipeline layout!");
-}
-
-void first_app::create_pipeline()
-{
-	auto pipeline_config{ coral_pipeline::default_pipeline_config_info(swapchain_->width(), swapchain_->height()) };
-	pipeline_config.render_pass = swapchain_->get_render_pass();
-	pipeline_config.pipeline_layout = pipeline_layout_;
-
-	pipeline_ = std::make_unique<coral_pipeline>(
-		device_,
-		// "shaders/PosNormCol.vert.spv",
-		// "shaders/PosNormCol.frag.spv",
-		"shaders/simple_shader.vert.spv",
-		"shaders/simple_shader.frag.spv",
-		pipeline_config
-	);
-}
-
-void first_app::create_command_buffers()
-{
-	command_buffers_.resize(swapchain_->image_count());
-
-	VkCommandBufferAllocateInfo alloc_info{ vkinit::command_buffer_ai(device_.get_command_pool(), static_cast<uint32_t>(command_buffers_.size())) };
-	if (vkAllocateCommandBuffers(device_.device(), &alloc_info, command_buffers_.data()) != VK_SUCCESS)
-		throw std::runtime_error("ERROR! first_app::create_command_buffers() >> Failed to allocate command buffers!");
-}
-
-void first_app::free_command_buffers()
-{
-	vkFreeCommandBuffers(
-		device_.device(),
-		device_.get_command_pool(),
-		static_cast<uint32_t>(command_buffers_.size()),
-		command_buffers_.data());
-
-	command_buffers_.clear();
-}
-
-void first_app::draw_frame()
-{
-	uint32_t image_index;
-	auto result = swapchain_->aqcuire_next_image(&image_index);
-
-	// Window has been resized
-	if (result == VK_ERROR_OUT_OF_DATE_KHR)
-	{
-		recreate_swapchain();
-		return;
-	}
-
-	if (result != VK_SUCCESS && result != VK_SUBOPTIMAL_KHR)
-		throw std::runtime_error("ERROR! first_app::draw_frame() >> Failed to aquire swapchain image!");
-
-	record_command_buffer(image_index);
-	result = swapchain_->submit_command_buffer(&command_buffers_[image_index], &image_index);
-
-	if (result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_SUBOPTIMAL_KHR || window_.was_window_resized())
-	{
-		window_.reset_window_resized();
-		recreate_swapchain();
-		return;
-	}
-
-	if(result != VK_SUCCESS)
-		throw std::runtime_error("ERROR! first_app::draw_frame() >> Failed to present swapchain image!");
-}
-
-void first_app::recreate_swapchain()
-{
-	auto extent{ window_.get_extent() };
-
-	// Idle when minimized
-	while (extent.width == 0 || extent.height == 0)
-	{
-		extent = window_.get_extent();
-		glfwWaitEvents();
-	}
-
-	vkDeviceWaitIdle(device_.device());
-
-	if(swapchain_ == nullptr)
-		swapchain_ = std::make_unique<coral_swapchain>(device_, extent);
-	else
-	{
-		swapchain_ = std::make_unique<coral_swapchain>(device_, extent, std::move(swapchain_));
-		if (swapchain_->image_count() != command_buffers_.size())
-		{
-			free_command_buffers();
-			create_command_buffers();
-		}
-	}
-		
-	create_pipeline();
-}
-
-void first_app::record_command_buffer(int image_index)
-{
-	VkCommandBufferBeginInfo begin_info{};
-	begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
-
-	if (vkBeginCommandBuffer(command_buffers_[image_index], &begin_info) != VK_SUCCESS)
-		throw std::runtime_error("ERROR! first_app::create_command_buffers() >> Failed to begin recording command buffer!");
-
-	VkRenderPassBeginInfo render_pass_info{};
-	render_pass_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
-	render_pass_info.renderPass = swapchain_->get_render_pass();
-	render_pass_info.framebuffer = swapchain_->get_frame_buffers(image_index);
-
-	render_pass_info.renderArea.offset = { 0, 0 };
-	render_pass_info.renderArea.extent = swapchain_->get_swapchain_extent();
-
-	std::array<VkClearValue, 2> clear_values{};
-	clear_values[0].color = { 0.1f, 0.1f, 0.1f, 1.0f };
-	clear_values[1].depthStencil = { 1.0f, 0 };
-	render_pass_info.clearValueCount = static_cast<uint32_t>(clear_values.size());
-	render_pass_info.pClearValues = clear_values.data();
-
-	vkCmdBeginRenderPass(command_buffers_[image_index], &render_pass_info, VK_SUBPASS_CONTENTS_INLINE);
-
-	render_gameobjects(command_buffers_[image_index]);
-
-	vkCmdEndRenderPass(command_buffers_[image_index]);
-
-	if (vkEndCommandBuffer(command_buffers_[image_index]) != VK_SUCCESS)
-		throw std::runtime_error("ERROR! first_app::create_command_buffers() >> Failed to record command buffer!");
-}
-
-void coral_3d::first_app::render_gameobjects(VkCommandBuffer command_buffer)
-{
-	pipeline_->bind(command_buffer);
-
-	for (auto& obj : gameobjects_)
-	{
-		PushConstant push{};
-		push.offset = obj.transform_.translation;
-		push.color = obj.color_;
-		push.transform = obj.transform_.mat3();
-
-		vkCmdPushConstants(
-			command_buffer,
-			pipeline_layout_,
-			VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT,
-			0, sizeof(PushConstant), &push);
-
-		obj.mesh_->bind(command_buffer);
-		obj.mesh_->draw(command_buffer);
-	}
 }

+ 3 - 22
coral_renderer/first_app.h

@@ -1,11 +1,9 @@
 #pragma once
 
 #include "coral_device.h"
-#include "coral_pipeline.h"
-#include "coral_swapchain.h"
 #include "coral_window.h"
-#include "coral_mesh.h"
 #include "coral_gameobject.h"
+#include "coral_renderer.h"
 
 // STD
 #include <memory>
@@ -13,13 +11,6 @@
 
 namespace coral_3d
 {
-	struct PushConstant
-	{
-		alignas(16) glm::mat3 transform;
-		alignas(16) glm::vec3 offset;
-		alignas(16) glm::vec3 color;
-	};
-
 	class first_app final
 	{
 	public:
@@ -36,21 +27,11 @@ namespace coral_3d
 
 	private:
 		void load_gameobjects();
-		void create_pipeline_layout();
-		void create_pipeline();
-		void create_command_buffers();
-		void free_command_buffers();
-		void draw_frame();
-		void recreate_swapchain();
-		void record_command_buffer(int image_index);
-		void render_gameobjects(VkCommandBuffer command_buffer);
 
 		coral_window window_{ WIDTH, HEIGHT, "Coral Renderer" };
 		coral_device device_{ window_ };
-		std::unique_ptr<coral_swapchain> swapchain_;
-		std::unique_ptr<coral_pipeline> pipeline_;
-		VkPipelineLayout pipeline_layout_;
-		std::vector<VkCommandBuffer> command_buffers_;
+		coral_renderer renderer_{ window_, device_ };
+
 		std::vector<coral_gameobject> gameobjects_;
 	};
 }

+ 84 - 0
coral_renderer/render_system.cpp

@@ -0,0 +1,84 @@
+#include "render_system.h"
+
+#include "vk_initializers.h"
+#include <stdexcept>
+
+using namespace coral_3d;
+
+struct PushConstant
+{
+	alignas(16) glm::mat3 transform;
+	alignas(16) glm::vec3 offset;
+	alignas(16) glm::vec3 color;
+};
+
+render_system::render_system(coral_device& device, VkRenderPass render_pass)
+	: device_{device}
+{
+	create_pipeline_layout();
+	create_pipeline(render_pass);
+}
+
+render_system::~render_system()
+{
+	vkDestroyPipelineLayout(device_.device(), pipeline_layout_, nullptr);
+}
+
+void render_system::render_gameobjects(VkCommandBuffer command_buffer, std::vector<coral_gameobject>& gameobjects)
+{
+	pipeline_->bind(command_buffer);
+
+	for (auto& obj : gameobjects)
+	{
+		PushConstant push{};
+		push.offset = obj.transform_.translation;
+		push.color = obj.color_;
+		push.transform = obj.transform_.mat3();
+
+		vkCmdPushConstants(
+			command_buffer,
+			pipeline_layout_,
+			VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT,
+			0, sizeof(PushConstant), &push);
+
+		obj.mesh_->bind(command_buffer);
+		obj.mesh_->draw(command_buffer);
+	}
+}
+
+void render_system::create_pipeline_layout()
+{
+	VkPushConstantRange push_constant_range{};
+	push_constant_range.stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT;
+	push_constant_range.offset = 0;
+	push_constant_range.size = sizeof(PushConstant);
+
+	VkPipelineLayoutCreateInfo layout_info{ vkinit::pipeline_layout_ci() };
+	layout_info.pushConstantRangeCount = 1;
+	layout_info.pPushConstantRanges = &push_constant_range;
+
+	if (vkCreatePipelineLayout(device_.device(), &layout_info, nullptr, &pipeline_layout_) != VK_SUCCESS)
+		throw std::runtime_error("ERROR! first_app::create_pipeline_layout() >> Failed to create pipeline layout!");
+}
+
+void render_system::create_pipeline(VkRenderPass render_pass)
+{
+
+	assert(pipeline_layout_ != nullptr &&
+		"ERROR! first_app::create_pipeline() >> Cannot create pipeline before pipeline layout!");
+
+	PipelineConfigInfo pipeline_config{};
+	coral_pipeline::default_pipeline_config_info(pipeline_config);
+
+	pipeline_config.render_pass = render_pass;
+	pipeline_config.pipeline_layout = pipeline_layout_;
+
+	pipeline_ = std::make_unique<coral_pipeline>(
+		device_,
+		// "shaders/PosNormCol.vert.spv",
+		// "shaders/PosNormCol.frag.spv",
+		"shaders/simple_shader.vert.spv",
+		"shaders/simple_shader.frag.spv",
+		pipeline_config
+	);
+}

+ 34 - 0
coral_renderer/render_system.h

@@ -0,0 +1,34 @@
+#pragma once
+
+#include "coral_device.h"
+#include "coral_pipeline.h"
+#include "coral_gameobject.h"
+
+// STD
+#include <memory>
+#include <vector>
+
+namespace coral_3d
+{
+	class render_system final
+	{
+	public:
+		render_system(coral_device& device, VkRenderPass render_pass);
+		~render_system();
+
+		render_system(const render_system&) = delete;
+		render_system& operator=(const render_system&) = delete;
+
+		void render_gameobjects(VkCommandBuffer command_buffer, std::vector<coral_gameobject>& gameobjects);
+
+	private:
+		void create_pipeline_layout();
+		void create_pipeline(VkRenderPass render_pass);
+
+		coral_device& device_;
+
+		std::unique_ptr<coral_pipeline> pipeline_;
+		VkPipelineLayout pipeline_layout_;
+
+	};
+}

+ 2 - 2
out/build/x64-Debug/.cmake/api/v1/reply/codemodel-v2-dd7c0d3ab377d75ba727.json → out/build/x64-Debug/.cmake/api/v1/reply/codemodel-v2-c81bc7e9141c5479d1e0.json

@@ -139,14 +139,14 @@
 				{
 					"directoryIndex" : 1,
 					"id" : "Shaders::@189d46817749ee15bd40",
-					"jsonFile" : "target-Shaders-Debug-d193690a6c358df9f7c9.json",
+					"jsonFile" : "target-Shaders-Debug-df18d665ca42a2d74c3a.json",
 					"name" : "Shaders",
 					"projectIndex" : 0
 				},
 				{
 					"directoryIndex" : 1,
 					"id" : "coral_renderer::@189d46817749ee15bd40",
-					"jsonFile" : "target-coral_renderer-Debug-4a53fc9937c5c41731fd.json",
+					"jsonFile" : "target-coral_renderer-Debug-5e1c5e75e37de59a2f13.json",
 					"name" : "coral_renderer",
 					"projectIndex" : 0
 				},

+ 2 - 2
out/build/x64-Debug/.cmake/api/v1/reply/index-2023-07-04T17-54-43-0602.json → out/build/x64-Debug/.cmake/api/v1/reply/index-2023-07-04T21-04-52-0762.json

@@ -26,7 +26,7 @@
 	"objects" : 
 	[
 		{
-			"jsonFile" : "codemodel-v2-dd7c0d3ab377d75ba727.json",
+			"jsonFile" : "codemodel-v2-c81bc7e9141c5479d1e0.json",
 			"kind" : "codemodel",
 			"version" : 
 			{
@@ -108,7 +108,7 @@
 						}
 					},
 					{
-						"jsonFile" : "codemodel-v2-dd7c0d3ab377d75ba727.json",
+						"jsonFile" : "codemodel-v2-c81bc7e9141c5479d1e0.json",
 						"kind" : "codemodel",
 						"version" : 
 						{

+ 1 - 1
out/build/x64-Debug/.cmake/api/v1/reply/target-Shaders-Debug-d193690a6c358df9f7c9.json → out/build/x64-Debug/.cmake/api/v1/reply/target-Shaders-Debug-df18d665ca42a2d74c3a.json

@@ -18,7 +18,7 @@
 			{
 				"command" : 0,
 				"file" : 0,
-				"line" : 59,
+				"line" : 63,
 				"parent" : 0
 			}
 		]

+ 34 - 6
out/build/x64-Debug/.cmake/api/v1/reply/target-coral_renderer-Debug-4a53fc9937c5c41731fd.json → out/build/x64-Debug/.cmake/api/v1/reply/target-coral_renderer-Debug-5e1c5e75e37de59a2f13.json

@@ -46,7 +46,7 @@
 			{
 				"command" : 2,
 				"file" : 0,
-				"line" : 22,
+				"line" : 26,
 				"parent" : 0
 			},
 			{
@@ -129,7 +129,9 @@
 				10,
 				13,
 				15,
-				17
+				17,
+				19,
+				21
 			]
 		}
 	],
@@ -141,11 +143,11 @@
 		},
 		{
 			"backtrace" : 3,
-			"id" : "vkbootstrap::@037116246cbfaaeb5504"
+			"id" : "tinyobjloader::@037116246cbfaaeb5504"
 		},
 		{
 			"backtrace" : 3,
-			"id" : "tinyobjloader::@037116246cbfaaeb5504"
+			"id" : "vkbootstrap::@037116246cbfaaeb5504"
 		},
 		{
 			"backtrace" : 3,
@@ -218,7 +220,9 @@
 				10,
 				13,
 				15,
-				17
+				17,
+				19,
+				21
 			]
 		},
 		{
@@ -233,7 +237,9 @@
 				11,
 				12,
 				14,
-				16
+				16,
+				18,
+				20
 			]
 		}
 	],
@@ -337,6 +343,28 @@
 			"compileGroupIndex" : 0,
 			"path" : "coral_renderer/coral_gameobject.cpp",
 			"sourceGroupIndex" : 0
+		},
+		{
+			"backtrace" : 1,
+			"path" : "coral_renderer/coral_renderer.h",
+			"sourceGroupIndex" : 1
+		},
+		{
+			"backtrace" : 1,
+			"compileGroupIndex" : 0,
+			"path" : "coral_renderer/coral_renderer.cpp",
+			"sourceGroupIndex" : 0
+		},
+		{
+			"backtrace" : 1,
+			"path" : "coral_renderer/render_system.h",
+			"sourceGroupIndex" : 1
+		},
+		{
+			"backtrace" : 1,
+			"compileGroupIndex" : 0,
+			"path" : "coral_renderer/render_system.cpp",
+			"sourceGroupIndex" : 0
 		}
 	],
 	"type" : "EXECUTABLE"

BIN
out/build/x64-Debug/.ninja_deps


+ 34 - 78
out/build/x64-Debug/.ninja_log

@@ -1,92 +1,48 @@
 # ninja log v5
-54	916	7101797253873148	third_party/GLFW/src/CMakeFiles/glfw.dir/vulkan.c.obj	aa414f7e617935ab
-898	1546	7101797260609318	coral_renderer/CMakeFiles/coral_renderer.dir/vk_initializers.cpp.obj	e2dbff82d1c3ba0d
-89	918	7101797253903152	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_window.c.obj	a8e8a800f8bba3b2
-8	204	7101797247160227	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/PosNormCol.frag.spv	fe5845b8ffa9c1e4
-1948	2000	7101797265153588	third_party/tinyobjloader.lib	c2812261322ebfda
-13	198	7101797247098422	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/PosNormCol.vert.spv	c8f5e229bc7280d6
-39	883	7101797253853157	third_party/GLFW/src/CMakeFiles/glfw.dir/init.c.obj	4c5b5a61c74a0503
-75	890	7101797253893155	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_monitor.c.obj	f3bcdc54fc50d40e
-50	918	7101797253953169	third_party/GLFW/src/CMakeFiles/glfw.dir/monitor.c.obj	9c133f055c1c47
-12	988	7101924450531072	coral_renderer/CMakeFiles/coral_renderer.dir/main.cpp.obj	f207d5295f665d92
-84	915	7101797253953169	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_thread.c.obj	ac4ae588ab2b3867
-80	866	7101797253748007	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_time.c.obj	694a8d84a0a6a42f
-65	898	7101797253903152	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_init.c.obj	f9e962456dc8d656
-204	916	7101797254053199	third_party/GLFW/src/CMakeFiles/glfw.dir/egl_context.c.obj	336c5a07a7e8f201
-70	909	7101797253953169	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_joystick.c.obj	360eb123f11402ca
-34	903	7101797253883159	third_party/GLFW/src/CMakeFiles/glfw.dir/context.c.obj	40de073679fe6a2e
-198	914	7101797254073198	third_party/GLFW/src/CMakeFiles/glfw.dir/wgl_context.c.obj	e21c7032fbb2c637
-918	988	7101797255003457	third_party/GLFW/src/glfw3.lib	90fe5d3bf3988c3
-44	874	7101797253798021	third_party/GLFW/src/CMakeFiles/glfw.dir/input.c.obj	956df7c8cf242b34
-60	914	7101797253913164	third_party/GLFW/src/CMakeFiles/glfw.dir/window.c.obj	b364e0375cf5f3ae
-958	1147	7101925970042345	coral_renderer/coral_renderer.exe	a2f5951cf56c54b9
-217	917	7101797254053199	third_party/GLFW/src/CMakeFiles/glfw.dir/osmesa_context.c.obj	e9ed1005530706e4
-17	880	7101924449447028	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	2fa3f3bbdc72680a
-30	1948	7101797264615494	third_party/CMakeFiles/tinyobjloader.dir/tinyobjloader/tiny_obj_loader.cc.obj	1e9e954b98b13f50
-38	1597	7101891512526678	third_party/CMakeFiles/vkbootstrap.dir/vkbootstrap/VkBootstrap.cpp.obj	64385be2816b800a
-21	1512	7101914378868226	coral_renderer/CMakeFiles/coral_renderer.dir/coral_pipeline.cpp.obj	429a0363ba93b7c7
-9	24	0	clean	21a4d0550fd2b6b1
-18	910	7101866207942490	coral_renderer/CMakeFiles/coral_renderer.dir/coral_window.cpp.obj	bedfd30a6102baa8
-1597	1651	7101891513064033	third_party/vkbootstrap.lib	b339a5cc36d209fb
-12	1320	7101914586261436	coral_renderer/CMakeFiles/coral_renderer.dir/coral_device.cpp.obj	f65feb738e17e8d7
-4	141	7101850315847728	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.frag.spv	abf5977eb3a7ad06
-5	958	7101925968908874	coral_renderer/CMakeFiles/coral_renderer.dir/coral_swapchain.cpp.obj	1e16c3634dad8b40
-9	148	7101850315924648	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.vert.spv	668e2527d551a6cf
-33	1586	7101914379607641	coral_renderer/CMakeFiles/coral_renderer.dir/coral_mesh.cpp.obj	ab6486da48f5e166
-12	134	7101964851368764	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.frag.spv	abf5977eb3a7ad06
-17	134	7101964851423145	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.vert.spv	668e2527d551a6cf
-17	846	7101964921256433	coral_renderer/CMakeFiles/coral_renderer.dir/coral_gameobject.cpp.obj	c77989e656e646b
-14	919	7101964921971655	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	2fa3f3bbdc72680a
-9	1024	7101964923036947	coral_renderer/CMakeFiles/coral_renderer.dir/main.cpp.obj	f207d5295f665d92
-1024	1274	7101964924572258	coral_renderer/coral_renderer.exe	c94332e8b1cc34e4
-11	806	7101965957957405	coral_renderer/CMakeFiles/coral_renderer.dir/coral_gameobject.cpp.obj	c77989e656e646b
-8	892	7101965958820094	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	2fa3f3bbdc72680a
-4	993	7101965959828220	coral_renderer/CMakeFiles/coral_renderer.dir/main.cpp.obj	f207d5295f665d92
-993	1177	7101965960878917	coral_renderer/coral_renderer.exe	c94332e8b1cc34e4
-18	1007	7101966436707492	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	2fa3f3bbdc72680a
-13	1104	7101966437677721	coral_renderer/CMakeFiles/coral_renderer.dir/main.cpp.obj	f207d5295f665d92
-1104	1347	7101966439276275	coral_renderer/coral_renderer.exe	c94332e8b1cc34e4
-13	977	7101966709312557	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	2fa3f3bbdc72680a
-978	1168	7101966710427667	coral_renderer/coral_renderer.exe	c94332e8b1cc34e4
-13	900	7101966916024278	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	2fa3f3bbdc72680a
-901	1092	7101966917114630	coral_renderer/coral_renderer.exe	c94332e8b1cc34e4
-13	124	7101970467749869	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.vert.spv	668e2527d551a6cf
-129	1060	7101970477113186	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	2fa3f3bbdc72680a
-125	1161	7101970478128316	coral_renderer/CMakeFiles/coral_renderer.dir/main.cpp.obj	f207d5295f665d92
-1162	1416	7101970479256056	coral_renderer/coral_renderer.exe	c94332e8b1cc34e4
-4	109	7101973221311429	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.vert.spv	668e2527d551a6cf
-3	23	0	clean	21a4d0550fd2b6b1
+68	558	7101973444064144	third_party/GLFW/src/CMakeFiles/glfw.dir/vulkan.c.obj	aa414f7e617935ab
+602	1380	7101973452417223	coral_renderer/CMakeFiles/coral_renderer.dir/vk_initializers.cpp.obj	e2dbff82d1c3ba0d
+112	625	7101973444659420	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_window.c.obj	a8e8a800f8bba3b2
 12	260	7101973441006803	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/PosNormCol.frag.spv	fe5845b8ffa9c1e4
-27	265	7101973441246850	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.vert.spv	668e2527d551a6cf
-22	270	7101973441256850	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.frag.spv	abf5977eb3a7ad06
+2019	2087	7101973459447985	third_party/tinyobjloader.lib	c2812261322ebfda
 17	274	7101973441316871	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/PosNormCol.vert.spv	c8f5e229bc7280d6
-68	558	7101973444064144	third_party/GLFW/src/CMakeFiles/glfw.dir/vulkan.c.obj	aa414f7e617935ab
 50	578	7101973444184155	third_party/GLFW/src/CMakeFiles/glfw.dir/init.c.obj	4c5b5a61c74a0503
+91	728	7101973445769622	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_monitor.c.obj	f3bcdc54fc50d40e
+62	602	7101973444224165	third_party/GLFW/src/CMakeFiles/glfw.dir/monitor.c.obj	9c133f055c1c47
+12	1002	7102061580310622	coral_renderer/CMakeFiles/coral_renderer.dir/main.cpp.obj	f207d5295f665d92
 106	588	7101973444304181	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_thread.c.obj	ac4ae588ab2b3867
 97	595	7101973444374204	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_time.c.obj	694a8d84a0a6a42f
-62	602	7101973444224165	third_party/GLFW/src/CMakeFiles/glfw.dir/monitor.c.obj	9c133f055c1c47
-45	609	7101973444424217	third_party/GLFW/src/CMakeFiles/glfw.dir/context.c.obj	40de073679fe6a2e
-73	614	7101973444494240	third_party/GLFW/src/CMakeFiles/glfw.dir/window.c.obj	b364e0375cf5f3ae
-56	619	7101973444544320	third_party/GLFW/src/CMakeFiles/glfw.dir/input.c.obj	956df7c8cf242b34
 79	624	7101973444594317	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_init.c.obj	f9e962456dc8d656
-112	625	7101973444659420	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_window.c.obj	a8e8a800f8bba3b2
+265	789	7101973446534469	third_party/GLFW/src/CMakeFiles/glfw.dir/egl_context.c.obj	336c5a07a7e8f201
 85	685	7101973445484462	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_joystick.c.obj	360eb123f11402ca
-91	728	7101973445769622	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_monitor.c.obj	f3bcdc54fc50d40e
+45	609	7101973444424217	third_party/GLFW/src/CMakeFiles/glfw.dir/context.c.obj	40de073679fe6a2e
 260	753	7101973446079702	third_party/GLFW/src/CMakeFiles/glfw.dir/wgl_context.c.obj	e21c7032fbb2c637
-270	781	7101973446444418	third_party/GLFW/src/CMakeFiles/glfw.dir/osmesa_context.c.obj	e9ed1005530706e4
-265	789	7101973446534469	third_party/GLFW/src/CMakeFiles/glfw.dir/egl_context.c.obj	336c5a07a7e8f201
 789	857	7101973447191803	third_party/GLFW/src/glfw3.lib	90fe5d3bf3988c3
-602	1380	7101973452417223	coral_renderer/CMakeFiles/coral_renderer.dir/vk_initializers.cpp.obj	e2dbff82d1c3ba0d
-559	1390	7101973452538406	coral_renderer/CMakeFiles/coral_renderer.dir/coral_window.cpp.obj	bedfd30a6102baa8
+56	619	7101973444544320	third_party/GLFW/src/CMakeFiles/glfw.dir/input.c.obj	956df7c8cf242b34
+73	614	7101973444494240	third_party/GLFW/src/CMakeFiles/glfw.dir/window.c.obj	b364e0375cf5f3ae
+599	777	7102075010809496	coral_renderer/coral_renderer.exe	e6478834e107908c
+270	781	7101973446444418	third_party/GLFW/src/CMakeFiles/glfw.dir/osmesa_context.c.obj	e9ed1005530706e4
+14	1084	7102062767086652	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	2fa3f3bbdc72680a
 39	2019	7101973458839719	third_party/CMakeFiles/tinyobjloader.dir/tinyobjloader/tiny_obj_loader.cc.obj	1e9e954b98b13f50
-619	2083	7101973459468086	coral_renderer/CMakeFiles/coral_renderer.dir/coral_gameobject.cpp.obj	c77989e656e646b
-2019	2087	7101973459447985	third_party/tinyobjloader.lib	c2812261322ebfda
-609	2162	7101973460102600	coral_renderer/CMakeFiles/coral_renderer.dir/coral_swapchain.cpp.obj	1e16c3634dad8b40
-578	2191	7101973460529835	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	2fa3f3bbdc72680a
-274	2205	7101973460704922	coral_renderer/CMakeFiles/coral_renderer.dir/main.cpp.obj	f207d5295f665d92
 34	2228	7101973460924970	third_party/CMakeFiles/vkbootstrap.dir/vkbootstrap/VkBootstrap.cpp.obj	64385be2816b800a
+4	1216	7102074183059557	coral_renderer/CMakeFiles/coral_renderer.dir/coral_pipeline.cpp.obj	429a0363ba93b7c7
+3	23	0	clean	21a4d0550fd2b6b1
+559	1390	7101973452538406	coral_renderer/CMakeFiles/coral_renderer.dir/coral_window.cpp.obj	bedfd30a6102baa8
 2228	2277	7101973461425969	third_party/vkbootstrap.lib	b339a5cc36d209fb
-588	2367	7101973462331274	coral_renderer/CMakeFiles/coral_renderer.dir/coral_pipeline.cpp.obj	429a0363ba93b7c7
-614	2403	7101973462696382	coral_renderer/CMakeFiles/coral_renderer.dir/coral_mesh.cpp.obj	ab6486da48f5e166
 596	2726	7101973465905305	coral_renderer/CMakeFiles/coral_renderer.dir/coral_device.cpp.obj	f65feb738e17e8d7
-2726	2952	7101973467305130	coral_renderer/coral_renderer.exe	c94332e8b1cc34e4
+22	270	7101973441256850	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.frag.spv	abf5977eb3a7ad06
+609	2162	7101973460102600	coral_renderer/CMakeFiles/coral_renderer.dir/coral_swapchain.cpp.obj	1e16c3634dad8b40
+27	265	7101973441246850	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.vert.spv	668e2527d551a6cf
+614	2403	7101973462696382	coral_renderer/CMakeFiles/coral_renderer.dir/coral_mesh.cpp.obj	ab6486da48f5e166
+619	2083	7101973459468086	coral_renderer/CMakeFiles/coral_renderer.dir/coral_gameobject.cpp.obj	c77989e656e646b
+4	598	7102075009798086	coral_renderer/CMakeFiles/coral_renderer.dir/coral_renderer.cpp.obj	e29bbecb11efe784
+14	1476	7102085006855697	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	2fa3f3bbdc72680a
+9	1593	7102085008028486	coral_renderer/CMakeFiles/coral_renderer.dir/main.cpp.obj	f207d5295f665d92
+12	1167	7102085119578344	coral_renderer/CMakeFiles/coral_renderer.dir/render_system.cpp.obj	20337cea0957cedb
+1167	1476	7102085121774649	coral_renderer/coral_renderer.exe	2538c05964e31f03
+19	1059	7102091956748143	coral_renderer/CMakeFiles/coral_renderer.dir/coral_renderer.cpp.obj	e29bbecb11efe784
+10	1183	7102091957983464	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	2fa3f3bbdc72680a
+15	1189	7102091958043495	coral_renderer/CMakeFiles/coral_renderer.dir/coral_swapchain.cpp.obj	1e16c3634dad8b40
+5	1316	7102091959313847	coral_renderer/CMakeFiles/coral_renderer.dir/main.cpp.obj	f207d5295f665d92
+1316	1516	7102091960556048	coral_renderer/coral_renderer.exe	2538c05964e31f03
+15	861	7102092594788281	coral_renderer/CMakeFiles/coral_renderer.dir/coral_swapchain.cpp.obj	1e16c3634dad8b40
+862	1050	7102092595915771	coral_renderer/coral_renderer.exe	2538c05964e31f03

+ 2 - 2
out/build/x64-Debug/Testing/Temporary/LastTest.log

@@ -1,3 +1,3 @@
-Start testing: Jul 04 19:54 Romance Daylight Time
+Start testing: Jul 04 23:04 Romance Daylight Time
 ----------------------------------------------------------
-End testing: Jul 04 19:54 Romance Daylight Time
+End testing: Jul 04 23:04 Romance Daylight Time

+ 17 - 1
out/build/x64-Debug/build.ninja

@@ -179,6 +179,22 @@ build coral_renderer\CMakeFiles\coral_renderer.dir\coral_gameobject.cpp.obj: CXX
   TARGET_COMPILE_PDB = coral_renderer\CMakeFiles\coral_renderer.dir\
   TARGET_PDB = coral_renderer\coral_renderer.pdb
 
+build coral_renderer\CMakeFiles\coral_renderer.dir\coral_renderer.cpp.obj: CXX_COMPILER__coral_renderer_unscanned_Debug C$:\Game$ Development\Visual$ Studio$ Solutions\Coral3D\coral_renderer\coral_renderer.cpp || cmake_object_order_depends_target_coral_renderer
+  FLAGS = /DWIN32 /D_WINDOWS /EHsc /Zi /Ob0 /Od /RTC1 -std:c++latest -MDd /W4 /WX /w
+  INCLUDES = -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\GLFW\include" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\glm" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\vkbootstrap" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\tinyobjloader" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\vma" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\stb_image" -external:IC:\VulkanSDK\1.3.250.0\Include -external:W0
+  OBJECT_DIR = coral_renderer\CMakeFiles\coral_renderer.dir
+  OBJECT_FILE_DIR = coral_renderer\CMakeFiles\coral_renderer.dir
+  TARGET_COMPILE_PDB = coral_renderer\CMakeFiles\coral_renderer.dir\
+  TARGET_PDB = coral_renderer\coral_renderer.pdb
+
+build coral_renderer\CMakeFiles\coral_renderer.dir\render_system.cpp.obj: CXX_COMPILER__coral_renderer_unscanned_Debug C$:\Game$ Development\Visual$ Studio$ Solutions\Coral3D\coral_renderer\render_system.cpp || cmake_object_order_depends_target_coral_renderer
+  FLAGS = /DWIN32 /D_WINDOWS /EHsc /Zi /Ob0 /Od /RTC1 -std:c++latest -MDd /W4 /WX /w
+  INCLUDES = -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\GLFW\include" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\glm" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\vkbootstrap" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\tinyobjloader" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\vma" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\stb_image" -external:IC:\VulkanSDK\1.3.250.0\Include -external:W0
+  OBJECT_DIR = coral_renderer\CMakeFiles\coral_renderer.dir
+  OBJECT_FILE_DIR = coral_renderer\CMakeFiles\coral_renderer.dir
+  TARGET_COMPILE_PDB = coral_renderer\CMakeFiles\coral_renderer.dir\
+  TARGET_PDB = coral_renderer\coral_renderer.pdb
+
 
 # =============================================================================
 # Link build statements for EXECUTABLE target coral_renderer
@@ -187,7 +203,7 @@ build coral_renderer\CMakeFiles\coral_renderer.dir\coral_gameobject.cpp.obj: CXX
 #############################################
 # Link the executable coral_renderer\coral_renderer.exe
 
-build coral_renderer\coral_renderer.exe: CXX_EXECUTABLE_LINKER__coral_renderer_Debug coral_renderer\CMakeFiles\coral_renderer.dir\main.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_window.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\first_app.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_pipeline.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_device.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\vk_initializers.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_swapchain.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_mesh.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_gameobject.cpp.obj | C$:\VulkanSDK\1.3.250.0\Lib\vulkan-1.lib third_party\GLFW\src\glfw3.lib third_party\vkbootstrap.lib third_party\tinyobjloader.lib C$:\VulkanSDK\1.3.250.0\Lib\vulkan-1.lib || coral_renderer\Shaders third_party\GLFW\src\glfw3.lib third_party\tinyobjloader.lib third_party\vkbootstrap.lib
+build coral_renderer\coral_renderer.exe: CXX_EXECUTABLE_LINKER__coral_renderer_Debug coral_renderer\CMakeFiles\coral_renderer.dir\main.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_window.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\first_app.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_pipeline.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_device.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\vk_initializers.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_swapchain.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_mesh.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_gameobject.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_renderer.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\render_system.cpp.obj | C$:\VulkanSDK\1.3.250.0\Lib\vulkan-1.lib third_party\GLFW\src\glfw3.lib third_party\vkbootstrap.lib third_party\tinyobjloader.lib C$:\VulkanSDK\1.3.250.0\Lib\vulkan-1.lib || coral_renderer\Shaders third_party\GLFW\src\glfw3.lib third_party\tinyobjloader.lib third_party\vkbootstrap.lib
   FLAGS = /DWIN32 /D_WINDOWS /EHsc /Zi /Ob0 /Od /RTC1 -MDd
   LINK_FLAGS = /machine:x64 /debug /INCREMENTAL /subsystem:console
   LINK_LIBRARIES = C:\VulkanSDK\1.3.250.0\Lib\vulkan-1.lib  third_party\GLFW\src\glfw3.lib  third_party\vkbootstrap.lib  third_party\tinyobjloader.lib  C:\VulkanSDK\1.3.250.0\Lib\vulkan-1.lib  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib

BIN
out/build/x64-Debug/coral_renderer/CMakeFiles/coral_renderer.dir/vc140.pdb


BIN
out/build/x64-Debug/coral_renderer/coral_renderer.ilk


BIN
out/build/x64-Debug/coral_renderer/coral_renderer.pdb


+ 2 - 2
out/build/x64-Release/.cmake/api/v1/reply/codemodel-v2-9926e25c7e77137afa1f.json → out/build/x64-Release/.cmake/api/v1/reply/codemodel-v2-74daa3b1014395a5e6a4.json

@@ -139,14 +139,14 @@
 				{
 					"directoryIndex" : 1,
 					"id" : "Shaders::@189d46817749ee15bd40",
-					"jsonFile" : "target-Shaders-Release-faa531a4d7893e11e462.json",
+					"jsonFile" : "target-Shaders-Release-13841c2b337be2ce961a.json",
 					"name" : "Shaders",
 					"projectIndex" : 0
 				},
 				{
 					"directoryIndex" : 1,
 					"id" : "coral_renderer::@189d46817749ee15bd40",
-					"jsonFile" : "target-coral_renderer-Release-87c67d57c444935f2ea0.json",
+					"jsonFile" : "target-coral_renderer-Release-4c330dfb115919c6410b.json",
 					"name" : "coral_renderer",
 					"projectIndex" : 0
 				},

+ 2 - 2
out/build/x64-Release/.cmake/api/v1/reply/index-2023-07-04T17-15-38-0103.json → out/build/x64-Release/.cmake/api/v1/reply/index-2023-07-04T21-27-50-0673.json

@@ -26,7 +26,7 @@
 	"objects" : 
 	[
 		{
-			"jsonFile" : "codemodel-v2-9926e25c7e77137afa1f.json",
+			"jsonFile" : "codemodel-v2-74daa3b1014395a5e6a4.json",
 			"kind" : "codemodel",
 			"version" : 
 			{
@@ -108,7 +108,7 @@
 						}
 					},
 					{
-						"jsonFile" : "codemodel-v2-9926e25c7e77137afa1f.json",
+						"jsonFile" : "codemodel-v2-74daa3b1014395a5e6a4.json",
 						"kind" : "codemodel",
 						"version" : 
 						{

+ 1 - 1
out/build/x64-Release/.cmake/api/v1/reply/target-Shaders-Release-faa531a4d7893e11e462.json → out/build/x64-Release/.cmake/api/v1/reply/target-Shaders-Release-13841c2b337be2ce961a.json

@@ -18,7 +18,7 @@
 			{
 				"command" : 0,
 				"file" : 0,
-				"line" : 59,
+				"line" : 63,
 				"parent" : 0
 			}
 		]

+ 36 - 8
out/build/x64-Release/.cmake/api/v1/reply/target-coral_renderer-Release-87c67d57c444935f2ea0.json → out/build/x64-Release/.cmake/api/v1/reply/target-coral_renderer-Release-4c330dfb115919c6410b.json

@@ -46,7 +46,7 @@
 			{
 				"command" : 2,
 				"file" : 0,
-				"line" : 22,
+				"line" : 26,
 				"parent" : 0
 			},
 			{
@@ -129,16 +129,14 @@
 				10,
 				13,
 				15,
-				17
+				17,
+				19,
+				21
 			]
 		}
 	],
 	"dependencies" : 
 	[
-		{
-			"backtrace" : 4,
-			"id" : "Shaders::@189d46817749ee15bd40"
-		},
 		{
 			"backtrace" : 3,
 			"id" : "tinyobjloader::@037116246cbfaaeb5504"
@@ -147,6 +145,10 @@
 			"backtrace" : 3,
 			"id" : "vkbootstrap::@037116246cbfaaeb5504"
 		},
+		{
+			"backtrace" : 4,
+			"id" : "Shaders::@189d46817749ee15bd40"
+		},
 		{
 			"backtrace" : 3,
 			"id" : "glfw::@6b3fa3a0e2a82742d65f"
@@ -218,7 +220,9 @@
 				10,
 				13,
 				15,
-				17
+				17,
+				19,
+				21
 			]
 		},
 		{
@@ -233,7 +237,9 @@
 				11,
 				12,
 				14,
-				16
+				16,
+				18,
+				20
 			]
 		}
 	],
@@ -337,6 +343,28 @@
 			"compileGroupIndex" : 0,
 			"path" : "coral_renderer/coral_gameobject.cpp",
 			"sourceGroupIndex" : 0
+		},
+		{
+			"backtrace" : 1,
+			"path" : "coral_renderer/coral_renderer.h",
+			"sourceGroupIndex" : 1
+		},
+		{
+			"backtrace" : 1,
+			"compileGroupIndex" : 0,
+			"path" : "coral_renderer/coral_renderer.cpp",
+			"sourceGroupIndex" : 0
+		},
+		{
+			"backtrace" : 1,
+			"path" : "coral_renderer/render_system.h",
+			"sourceGroupIndex" : 1
+		},
+		{
+			"backtrace" : 1,
+			"compileGroupIndex" : 0,
+			"path" : "coral_renderer/render_system.cpp",
+			"sourceGroupIndex" : 0
 		}
 	],
 	"type" : "EXECUTABLE"

BIN
out/build/x64-Release/.ninja_deps


+ 10 - 4
out/build/x64-Release/.ninja_log

@@ -6,7 +6,7 @@
 57	562	7101968576651531	third_party/GLFW/src/CMakeFiles/glfw.dir/vulkan.c.obj	50112318efae01fe
 62	593	7101968576961605	third_party/GLFW/src/CMakeFiles/glfw.dir/window.c.obj	b267b6f52b0557e
 283	786	7101968579148730	third_party/GLFW/src/CMakeFiles/glfw.dir/osmesa_context.c.obj	2663e4857ff8180d
-1333	1687	7101970208554647	coral_renderer/coral_renderer.exe	f655b1ed9e317b83
+1106	1400	7101970343569400	coral_renderer/coral_renderer.exe	f655b1ed9e317b83
 127	1291	7101970205084471	coral_renderer/CMakeFiles/coral_renderer.dir/main.cpp.obj	b04a92f83a26ca98
 89	552	7101968576481500	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_thread.c.obj	6c2cec83621ddafc
 68	578	7101968576821574	third_party/GLFW/src/CMakeFiles/glfw.dir/win32_init.c.obj	68f7b915a77efee8
@@ -33,7 +33,7 @@
 26	1697	7100852052759820	vk_renderer/CMakeFiles/vulkan_renderer.dir/vk_mesh.cpp.obj	19e27ee69060c408
 14	4028	7100852076065734	vk_renderer/CMakeFiles/vulkan_renderer.dir/vk_engine.cpp.obj	2c2e8f4c68659d3e
 4028	4204	7100852077869201	vk_renderer/vulkan_renderer.exe	4a4de8c4dd150dc4
-131	1332	7101970205524782	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	f6aa697f38bcc8c1
+17	1105	7101970341163279	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	f6aa697f38bcc8c1
 553	1352	7101968584818420	coral_renderer/CMakeFiles/coral_renderer.dir/coral_window.cpp.obj	8f70bdc66a8c898
 5	127	7101970193471740	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.vert.spv	8117d59f521bfb38
 18	283	7101968573906826	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.frag.spv	c6f90537dba2deae
@@ -41,5 +41,11 @@
 585	3500	7101968606280340	coral_renderer/CMakeFiles/coral_renderer.dir/coral_device.cpp.obj	54ea3dd64d178489
 613	2801	7101968599296036	coral_renderer/CMakeFiles/coral_renderer.dir/coral_mesh.cpp.obj	c9cebafec58901df
 624	1989	7101968591065934	coral_renderer/CMakeFiles/coral_renderer.dir/coral_gameobject.cpp.obj	64827c5e097e7ac3
-17	1105	7101970341163279	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	f6aa697f38bcc8c1
-1106	1400	7101970343569400	coral_renderer/coral_renderer.exe	f655b1ed9e317b83
+14	131	7102092808514442	C:/Game Development/Visual Studio Solutions/Coral3D/shaders/compiled/simple_shader.vert.spv	8117d59f521bfb38
+148	860	7102092815804843	coral_renderer/CMakeFiles/coral_renderer.dir/coral_renderer.cpp.obj	417b97074434047c
+153	1083	7102092818017321	coral_renderer/CMakeFiles/coral_renderer.dir/render_system.cpp.obj	cb6eac27cd1d72a5
+135	1161	7102092818794205	coral_renderer/CMakeFiles/coral_renderer.dir/first_app.cpp.obj	f6aa697f38bcc8c1
+144	1208	7102092819273977	coral_renderer/CMakeFiles/coral_renderer.dir/coral_swapchain.cpp.obj	73d0ad4b7fd6b8be
+131	1391	7102092821088656	coral_renderer/CMakeFiles/coral_renderer.dir/main.cpp.obj	b04a92f83a26ca98
+140	1424	7102092821428842	coral_renderer/CMakeFiles/coral_renderer.dir/coral_pipeline.cpp.obj	547825035d4ce491
+1425	1872	7102092825435598	coral_renderer/coral_renderer.exe	b68df8e0d5188ad5

+ 2 - 2
out/build/x64-Release/Testing/Temporary/LastTest.log

@@ -1,3 +1,3 @@
-Start testing: Jul 04 19:15 Romance Daylight Time
+Start testing: Jul 04 23:27 Romance Daylight Time
 ----------------------------------------------------------
-End testing: Jul 04 19:15 Romance Daylight Time
+End testing: Jul 04 23:27 Romance Daylight Time

+ 17 - 1
out/build/x64-Release/build.ninja

@@ -179,6 +179,22 @@ build coral_renderer\CMakeFiles\coral_renderer.dir\coral_gameobject.cpp.obj: CXX
   TARGET_COMPILE_PDB = coral_renderer\CMakeFiles\coral_renderer.dir\
   TARGET_PDB = coral_renderer\coral_renderer.pdb
 
+build coral_renderer\CMakeFiles\coral_renderer.dir\coral_renderer.cpp.obj: CXX_COMPILER__coral_renderer_unscanned_Release C$:\Game$ Development\Visual$ Studio$ Solutions\Coral3D\coral_renderer\coral_renderer.cpp || cmake_object_order_depends_target_coral_renderer
+  FLAGS = /DWIN32 /D_WINDOWS /EHsc /O2 /Ob2 /DNDEBUG -std:c++latest -MD /W4 /WX /w
+  INCLUDES = -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\GLFW\include" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\glm" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\vkbootstrap" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\tinyobjloader" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\vma" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\stb_image" -external:IC:\VulkanSDK\1.3.250.0\Include -external:W0
+  OBJECT_DIR = coral_renderer\CMakeFiles\coral_renderer.dir
+  OBJECT_FILE_DIR = coral_renderer\CMakeFiles\coral_renderer.dir
+  TARGET_COMPILE_PDB = coral_renderer\CMakeFiles\coral_renderer.dir\
+  TARGET_PDB = coral_renderer\coral_renderer.pdb
+
+build coral_renderer\CMakeFiles\coral_renderer.dir\render_system.cpp.obj: CXX_COMPILER__coral_renderer_unscanned_Release C$:\Game$ Development\Visual$ Studio$ Solutions\Coral3D\coral_renderer\render_system.cpp || cmake_object_order_depends_target_coral_renderer
+  FLAGS = /DWIN32 /D_WINDOWS /EHsc /O2 /Ob2 /DNDEBUG -std:c++latest -MD /W4 /WX /w
+  INCLUDES = -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\GLFW\include" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\glm" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\vkbootstrap" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\tinyobjloader" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\vma" -I"C:\Game Development\Visual Studio Solutions\Coral3D\third_party\stb_image" -external:IC:\VulkanSDK\1.3.250.0\Include -external:W0
+  OBJECT_DIR = coral_renderer\CMakeFiles\coral_renderer.dir
+  OBJECT_FILE_DIR = coral_renderer\CMakeFiles\coral_renderer.dir
+  TARGET_COMPILE_PDB = coral_renderer\CMakeFiles\coral_renderer.dir\
+  TARGET_PDB = coral_renderer\coral_renderer.pdb
+
 
 # =============================================================================
 # Link build statements for EXECUTABLE target coral_renderer
@@ -187,7 +203,7 @@ build coral_renderer\CMakeFiles\coral_renderer.dir\coral_gameobject.cpp.obj: CXX
 #############################################
 # Link the executable coral_renderer\coral_renderer.exe
 
-build coral_renderer\coral_renderer.exe: CXX_EXECUTABLE_LINKER__coral_renderer_Release coral_renderer\CMakeFiles\coral_renderer.dir\main.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_window.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\first_app.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_pipeline.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_device.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\vk_initializers.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_swapchain.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_mesh.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_gameobject.cpp.obj | C$:\VulkanSDK\1.3.250.0\Lib\vulkan-1.lib third_party\GLFW\src\glfw3.lib third_party\vkbootstrap.lib third_party\tinyobjloader.lib C$:\VulkanSDK\1.3.250.0\Lib\vulkan-1.lib || coral_renderer\Shaders third_party\GLFW\src\glfw3.lib third_party\tinyobjloader.lib third_party\vkbootstrap.lib
+build coral_renderer\coral_renderer.exe: CXX_EXECUTABLE_LINKER__coral_renderer_Release coral_renderer\CMakeFiles\coral_renderer.dir\main.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_window.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\first_app.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_pipeline.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_device.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\vk_initializers.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_swapchain.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_mesh.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_gameobject.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\coral_renderer.cpp.obj coral_renderer\CMakeFiles\coral_renderer.dir\render_system.cpp.obj | C$:\VulkanSDK\1.3.250.0\Lib\vulkan-1.lib third_party\GLFW\src\glfw3.lib third_party\vkbootstrap.lib third_party\tinyobjloader.lib C$:\VulkanSDK\1.3.250.0\Lib\vulkan-1.lib || coral_renderer\Shaders third_party\GLFW\src\glfw3.lib third_party\tinyobjloader.lib third_party\vkbootstrap.lib
   FLAGS = /DWIN32 /D_WINDOWS /EHsc /O2 /Ob2 /DNDEBUG -MD
   LINK_FLAGS = /machine:x64 /INCREMENTAL:NO /subsystem:console
   LINK_LIBRARIES = C:\VulkanSDK\1.3.250.0\Lib\vulkan-1.lib  third_party\GLFW\src\glfw3.lib  third_party\vkbootstrap.lib  third_party\tinyobjloader.lib  C:\VulkanSDK\1.3.250.0\Lib\vulkan-1.lib  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib

BIN
out/build/x64-Release/coral_renderer/shaders/simple_shader.vert.spv