WHATSAFUCKINGRENDERPASS

This commit is contained in:
Benjamin Kyd
2023-11-23 12:14:40 +00:00
parent 682cc6158e
commit 921047c146
7 changed files with 22 additions and 11 deletions

View File

@@ -11,6 +11,7 @@ struct Shader;
typedef struct Pipeline {
GraphicsDevice* Device;
// TODO: Pipeline should not need to know about the swapchain
SwapChain* Swap;
VkPipeline GraphicsPipeline;

View File

@@ -98,7 +98,7 @@ void renderpass_configure_command_buffer(RenderPass* renderpass)
yolo::debug("Command buffer created");
}
void renderpass_begin(RenderPass* renderpass)
void renderpass_begin(RenderPass* renderpass, uint32_t imageIndex)
{
VkCommandBufferBeginInfo beginInfo {};
beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
@@ -113,7 +113,7 @@ void renderpass_begin(RenderPass* renderpass)
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
renderPassInfo.renderPass = renderpass->VulkanRenderPass;
renderPassInfo.framebuffer
= renderpass->RenderPipeline->Swap->SwapFramebuffers[renderpass->FrameIndex];
= renderpass->RenderPipeline->Swap->SwapFramebuffers[imageIndex];
renderPassInfo.renderArea.offset = { 0, 0 };
renderPassInfo.renderArea.extent = renderpass->RenderPipeline->Swap->Extent;

View File

@@ -23,7 +23,7 @@ void renderpass_cleanup(RenderPass* renderpass);
void renderpass_configure_command_buffer(RenderPass* renderpass);
void renderpass_begin(RenderPass* renderpass);
void renderpass_begin(RenderPass* renderpass, uint32_t imageIndex);
void renderpass_end(RenderPass* renderpass);
}

View File

@@ -47,7 +47,7 @@ void renderer_cleanup(VulkanRenderer* renderer)
vkDestroyFence(renderer->Device->VulkanDevice, renderer->InFlightFence, nullptr);
}
void renderer_begin_frame(VulkanRenderer* renderer)
void renderer_begin_frame(VulkanRenderer* renderer, RenderPass* renderpass)
{
vkWaitForFences(
renderer->Device->VulkanDevice, 1, &renderer->InFlightFence, VK_TRUE, UINT64_MAX);
@@ -57,7 +57,14 @@ void renderer_begin_frame(VulkanRenderer* renderer)
vkAcquireNextImageKHR(renderer->Device->VulkanDevice, renderer->Swap->Handle,
UINT64_MAX, renderer->ImageAvailableSemaphore, VK_NULL_HANDLE, &imageIndex);
// renderer->Swap->CurrentImageIndex = imageIndex;
vkResetCommandBuffer(renderpass->CommandBuffer, 0);
renderpass_begin(renderpass, imageIndex);
}
void renderer_draw_frame(Renderer* renderer, RenderPass* renderpass)
{
renderpass_end(renderpass);
}
}

View File

@@ -7,6 +7,7 @@ namespace inferno::graphics {
struct GraphicsDevice;
struct Pipeline;
struct SwapChain;
struct RenderPass;
typedef struct VulkanRenderer {
GraphicsDevice* Device;
@@ -20,8 +21,8 @@ typedef struct VulkanRenderer {
Renderer* renderer_create(GraphicsDevice* device, SwapChain* swapchain);
void renderer_cleanup(Renderer* renderer);
void renderer_begin_frame(Renderer* renderer);
void renderer_draw_frame(Renderer* renderer);
void renderer_begin_frame(Renderer* renderer, RenderPass* renderpass);
void renderer_draw_frame(Renderer* renderer, RenderPass* renderpass);
}

View File

@@ -960,7 +960,7 @@ private:
}
};
int main()
int notmain()
{
HelloTriangleApplication app;

View File

@@ -9,6 +9,7 @@
#include "graphics/device.hpp"
#include "graphics/pipeline.hpp"
#include "graphics/renderpass.hpp"
#include "graphics/vkrenderer.hpp"
#include "window.hpp"
// #include "preview_renderer/debug.hpp"
@@ -96,6 +97,7 @@ InfernoApp* inferno_create()
app->Device = graphics::device_create();
app->RenderPass = graphics::renderpass_create(app->Device);
graphics::renderpass_configure_command_buffer(app->RenderPass);
app->Renderer = graphics::renderer_create(app->Device, app->RenderPass->RenderPipeline->Swap);
// // setup the scene
// scene::Material* basicMaterial = new scene::Material("basic");
@@ -244,13 +246,13 @@ int inferno_run(InfernoApp* app)
if (!inferno_pre(app))
break;
graphics::renderpass_begin(app->RenderPass);
graphics::renderer_begin_frame(app->Renderer, app->RenderPass);
vkCmdBindPipeline(app->RenderPass->CommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
app->RenderPass->RenderPipeline->GraphicsPipeline);
vkCmdDraw(app->RenderPass->CommandBuffer, 3, 1, 0, 0);
graphics::renderpass_end(app->RenderPass);
graphics::renderer_draw_frame(app->Renderer, app->RenderPass);
i++;
yolo::debug("{}", i);
if (i == 10)