almost first rendering, fixing renderer issues

This commit is contained in:
2022-12-19 00:59:45 +01:00
parent c907c52968
commit 2c6c3a945e
417 changed files with 60861 additions and 298 deletions

View File

@@ -6,26 +6,27 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:18:06 by maldavid #+# #+# */
/* Updated: 2022/12/17 23:34:57 by maldavid ### ########.fr */
/* Updated: 2022/12/18 20:01:51 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
#include <volk.h>
#include <renderer/core/render_core.h>
#include <renderer/renderer.h>
namespace mlx
{
void FrameBuffer::init(SwapChain* swapchain, ImageView& image)
void FrameBuffer::init(Renderer& renderer, ImageView& image)
{
VkImageView attachments[] = { image() };
VkFramebufferCreateInfo framebufferInfo{};
framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
framebufferInfo.renderPass = Render_Core::get().getRenderPass().get();
framebufferInfo.renderPass = renderer.getRenderPass().get();
framebufferInfo.attachmentCount = 1;
framebufferInfo.pAttachments = attachments;
framebufferInfo.width = swapchain->_swapChainExtent.width;
framebufferInfo.height = swapchain->_swapChainExtent.height;
framebufferInfo.width = renderer.getSwapChain()._swapChainExtent.width;
framebufferInfo.height = renderer.getSwapChain()._swapChainExtent.height;
framebufferInfo.layers = 1;
if(vkCreateFramebuffer(Render_Core::get().getDevice().get(), &framebufferInfo, nullptr, &_framebuffer) != VK_SUCCESS)

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:19:44 by maldavid #+# #+# */
/* Updated: 2022/12/18 01:07:54 by maldavid ### ########.fr */
/* Updated: 2022/12/18 19:53:00 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
@@ -20,7 +20,7 @@ namespace mlx
class FrameBuffer
{
public:
void init(class SwapChain* swapchain, class ImageView& image);
void init(class Renderer& renderer, class ImageView& image);
void destroy() noexcept;
inline VkFramebuffer& operator()() noexcept { return _framebuffer; }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:20:49 by maldavid #+# #+# */
/* Updated: 2022/10/06 18:21:51 by maldavid ### ########.fr */
/* Updated: 2022/12/18 19:55:03 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
@@ -16,13 +16,13 @@
namespace mlx
{
void ImageView::init(SwapChain* swapchain, VkImage& image)
void ImageView::init(SwapChain& swapchain, VkImage& image)
{
VkImageViewCreateInfo createInfo{};
createInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
createInfo.image = image;
createInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
createInfo.format = swapchain->_swapChainImageFormat;
createInfo.format = swapchain._swapChainImageFormat;
createInfo.components.r = VK_COMPONENT_SWIZZLE_IDENTITY;
createInfo.components.g = VK_COMPONENT_SWIZZLE_IDENTITY;
createInfo.components.b = VK_COMPONENT_SWIZZLE_IDENTITY;

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:20:19 by maldavid #+# #+# */
/* Updated: 2022/12/18 01:07:51 by maldavid ### ########.fr */
/* Updated: 2022/12/18 19:54:44 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
@@ -20,7 +20,7 @@ namespace mlx
class ImageView
{
public:
void init(class SwapChain* swapchain, VkImage& image);
void init(class SwapChain& swapchain, VkImage& image);
void destroy() noexcept;
inline VkImageView& operator()() noexcept { return _image; }

View File

@@ -6,19 +6,24 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:21:36 by maldavid #+# #+# */
/* Updated: 2022/12/18 01:13:49 by maldavid ### ########.fr */
/* Updated: 2022/12/19 00:06:34 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
#include "vk_render_pass.h"
#include <renderer/core/render_core.h>
#include <renderer/renderer.h>
namespace mlx
{
void RenderPass::init()
static const VkClearValue clearColor = { 0.0f, 0.0f, 0.0f, 1.0f };
void RenderPass::init(Renderer* renderer)
{
_renderer = renderer;
VkAttachmentDescription colorAttachment{};
colorAttachment.format = Render_Core::get().getSwapChain()._swapChainImageFormat;
colorAttachment.format = renderer->getSwapChain()._swapChainImageFormat;
colorAttachment.samples = VK_SAMPLE_COUNT_1_BIT;
colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
colorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
@@ -52,18 +57,16 @@ namespace mlx
if(_is_running)
return;
static const VkClearValue clearColor = {0.0f, 0.0f, 0.0f, 1.0f};
VkRenderPassBeginInfo renderPassInfo{};
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
renderPassInfo.renderPass = _renderPass;
renderPassInfo.framebuffer = Render_Core::get().getSwapChain()._framebuffers[Render_Core::get().getImageIndex()].get();
renderPassInfo.framebuffer = _renderer->getSwapChain()._framebuffers[_renderer->getImageIndex()].get();
renderPassInfo.renderArea.offset = { 0, 0 };
renderPassInfo.renderArea.extent = Render_Core::get().getSwapChain()._swapChainExtent;
renderPassInfo.renderArea.extent = _renderer->getSwapChain()._swapChainExtent;
renderPassInfo.clearValueCount = 1;
renderPassInfo.pClearValues = &clearColor;
vkCmdBeginRenderPass(Render_Core::get().getActiveCmdBuffer().get(), &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE);
vkCmdBeginRenderPass(_renderer->getActiveCmdBuffer().get(), &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE);
_is_running = true;
}
@@ -73,7 +76,7 @@ namespace mlx
if(!_is_running)
return;
vkCmdEndRenderPass(Render_Core::get().getActiveCmdBuffer().get());
vkCmdEndRenderPass(_renderer->getActiveCmdBuffer().get());
_is_running = false;
}

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:22:00 by maldavid #+# #+# */
/* Updated: 2022/12/18 01:07:47 by maldavid ### ########.fr */
/* Updated: 2022/12/18 20:33:28 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
@@ -20,7 +20,7 @@ namespace mlx
class RenderPass
{
public:
void init();
void init(class Renderer* renderer);
void destroy() noexcept;
void begin();
@@ -31,6 +31,7 @@ namespace mlx
private:
VkRenderPass _renderPass = VK_NULL_HANDLE;
class Renderer* _renderer = nullptr;
bool _is_running = false;
};
}

View File

@@ -6,22 +6,25 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:22:28 by maldavid #+# #+# */
/* Updated: 2022/12/18 01:01:32 by maldavid ### ########.fr */
/* Updated: 2022/12/19 00:05:32 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
#include <renderer/core/render_core.h>
#include <renderer/renderer.h>
#include <platform/window.h>
#include <SDL2/SDL_vulkan.h>
#include <algorithm>
namespace mlx
{
void SwapChain::init()
void SwapChain::init(Renderer* renderer)
{
_renderer = renderer;
_swapChainSupport = querySwapChainSupport(Render_Core::get().getDevice().getPhysicalDevice());
VkSurfaceFormatKHR surfaceFormat = Render_Core::get().getSurface().chooseSwapSurfaceFormat(_swapChainSupport.formats);
VkSurfaceFormatKHR surfaceFormat = renderer->getSurface().chooseSwapSurfaceFormat(_swapChainSupport.formats);
VkPresentModeKHR presentMode = VK_PRESENT_MODE_IMMEDIATE_KHR;
VkExtent2D extent = chooseSwapExtent(_swapChainSupport.capabilities);
@@ -31,7 +34,7 @@ namespace mlx
VkSwapchainCreateInfoKHR createInfo{};
createInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
createInfo.surface = Render_Core::get().getSurface().get();
createInfo.surface = renderer->getSurface().get();
createInfo.minImageCount = imageCount;
createInfo.imageFormat = surfaceFormat.format;
@@ -40,7 +43,7 @@ namespace mlx
createInfo.imageArrayLayers = 1;
createInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
Queues::QueueFamilyIndices indices = Render_Core::get().getQueue().findQueueFamilies(Render_Core::get().getDevice().getPhysicalDevice());
Queues::QueueFamilyIndices indices = Render_Core::get().getQueue().getFamilies();
uint32_t queueFamilyIndices[] = {indices.graphicsFamily.value(), indices.presentFamily.value()};
if(indices.graphicsFamily != indices.presentFamily)
@@ -74,10 +77,7 @@ namespace mlx
_imageViews.resize(_swapChainImages.size());
for(size_t i = 0; i < _swapChainImages.size(); i++)
{
_imageViews.emplace_back();
_imageViews.back().init(this, _swapChainImages[i]);
}
_imageViews[i].init(*this, _swapChainImages[i]);
}
void SwapChain::initFB()
@@ -85,16 +85,13 @@ namespace mlx
_framebuffers.resize(_imageViews.size());
for(size_t i = 0; i < _imageViews.size(); i++)
{
_framebuffers.emplace_back();
_framebuffers.back().init(this, _imageViews[i]);
}
_framebuffers[i].init(*_renderer, _imageViews[i]);
}
SwapChain::SwapChainSupportDetails SwapChain::querySwapChainSupport(VkPhysicalDevice device)
{
SwapChain::SwapChainSupportDetails details;
VkSurfaceKHR surface = Render_Core::get().getSurface().get();
VkSurfaceKHR surface = _renderer->getSurface().get();
vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device, surface, &details.capabilities);
@@ -115,7 +112,7 @@ namespace mlx
return capabilities.currentExtent;
int width, height;
SDL_Vulkan_GetDrawableSize(Render_Core::get().getWindow()->getNativeWindow(), &width, &height);
SDL_Vulkan_GetDrawableSize(_renderer->getWindow()->getNativeWindow(), &width, &height);
VkExtent2D actualExtent = { static_cast<uint32_t>(width), static_cast<uint32_t>(height) };
@@ -129,10 +126,10 @@ namespace mlx
{
destroyFB();
destroy();
Render_Core::get().getRenderPass().destroy();
_renderer->getRenderPass().destroy();
init();
Render_Core::get().getRenderPass().init();
init(_renderer);
_renderer->getRenderPass().init(_renderer);
initFB();
}

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:23:27 by maldavid #+# #+# */
/* Updated: 2022/12/18 01:07:44 by maldavid ### ########.fr */
/* Updated: 2022/12/18 22:08:36 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
@@ -26,7 +26,7 @@ namespace mlx
friend class ImageView;
friend class GraphicPipeline;
friend class RenderPass;
friend class RendererComponent;
friend class Renderer;
public:
struct SwapChainSupportDetails
@@ -35,7 +35,7 @@ namespace mlx
std::vector<VkSurfaceFormatKHR> formats;
};
void init();
void init(class Renderer* renderer);
void initFB();
void destroy() noexcept;
void destroyFB() noexcept;
@@ -53,12 +53,13 @@ namespace mlx
private:
SwapChainSupportDetails _swapChainSupport;
VkSwapchainKHR _swapChain;
std::vector<VkImage> _swapChainImages;
VkFormat _swapChainImageFormat;
VkExtent2D _swapChainExtent;
std::vector<FrameBuffer> _framebuffers;
std::vector<ImageView> _imageViews;
VkSwapchainKHR _swapChain;
VkFormat _swapChainImageFormat;
VkExtent2D _swapChainExtent;
class Renderer* _renderer = nullptr;
};
}