WHATSAFUCKINGRENDERPASS
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -960,7 +960,7 @@ private:
|
||||
}
|
||||
};
|
||||
|
||||
int main()
|
||||
int notmain()
|
||||
{
|
||||
HelloTriangleApplication app;
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user