Triangle is ready.
This commit is contained in:
parent
703624eb86
commit
b8b620a723
|
|
@ -30,5 +30,6 @@ class BufferManager final
|
|||
[[nodiscard]] Ref<StorageBuffer> CreateStorageBuffer(usize size, cstr name = nullptr) const;
|
||||
[[nodiscard]] Ref<UniformBuffer> CreateUniformBuffer(usize size, cstr name = nullptr) const;
|
||||
[[nodiscard]] Ref<StagingBuffer> CreateStagingBuffer(usize size, cstr name = nullptr) const;
|
||||
[[nodiscard]] Ref<VertexBuffer> CreateVertexBuffer(usize size, cstr name = nullptr) const;
|
||||
};
|
||||
} // namespace systems
|
||||
|
|
@ -43,6 +43,16 @@ BufferManager::CreateStagingBuffer(const usize size, const cstr name) const
|
|||
return std::make_shared<StagingBuffer>(Buffer{m_Device, size, usage, createFlags, memoryUsage, name});
|
||||
}
|
||||
|
||||
Ref<VertexBuffer>
|
||||
BufferManager::CreateVertexBuffer(const usize size, const cstr name) const
|
||||
{
|
||||
constexpr vk::BufferUsageFlags usage = vk::BufferUsageFlagBits::eVertexBuffer;
|
||||
constexpr VmaAllocationCreateFlags createFlags =
|
||||
VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT;
|
||||
constexpr VmaMemoryUsage memoryUsage = VMA_MEMORY_USAGE_AUTO;
|
||||
return std::make_shared<VertexBuffer>(Buffer{m_Device, size, usage, createFlags, memoryUsage, name});
|
||||
}
|
||||
|
||||
//
|
||||
// void
|
||||
// UniformBuffer::Init(const Device *device, const usize size, const cstr name)
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#include "aster/core/window.h"
|
||||
|
||||
#include "helpers.h"
|
||||
#include "aster/systems/resource_manager.h"
|
||||
|
||||
#include <EASTL/array.h>
|
||||
|
||||
|
|
@ -92,6 +93,7 @@ main(int, char **)
|
|||
vk::Queue commandQueue = device.GetQueue(queueAllocation.m_Family, 0);
|
||||
Swapchain swapchain = {&surface, &device, window.GetSize(), "Primary Chain"};
|
||||
Pipeline pipeline = CreatePipeline(&device, &swapchain);
|
||||
systems::ResourceManager resourceManager{&device};
|
||||
|
||||
vk::CommandPool copyPool;
|
||||
vk::CommandBuffer copyBuffer;
|
||||
|
|
@ -117,45 +119,8 @@ main(int, char **)
|
|||
Vertex{.m_Position = {0.5f, -0.5f, 0.0f}, .m_Color = {0.0f, 1.0f, 0.0f}},
|
||||
Vertex{.m_Position = {0.0f, 0.5f, 0.0f}, .m_Color = {0.0f, 0.0f, 1.0f}},
|
||||
};
|
||||
VertexBuffer vbo;
|
||||
vbo.Init(&device, vertices.size() * sizeof vertices[0], "VBO");
|
||||
{
|
||||
StagingBuffer staging;
|
||||
staging.Init(&device, vertices.size() * sizeof vertices[0], "Staging");
|
||||
staging.Write(0, vertices.size() * sizeof vertices[0], vertices.data());
|
||||
|
||||
vk::Fence fence;
|
||||
vk::FenceCreateInfo fenceCreateInfo = {};
|
||||
auto result = device.m_Device.createFence(&fenceCreateInfo, nullptr, &fence);
|
||||
ERROR_IF(Failed(result), "Fence creation failed. Cause: {}", result) THEN_ABORT(result);
|
||||
|
||||
vk::CommandBufferBeginInfo beginInfo = {.flags = vk::CommandBufferUsageFlagBits::eOneTimeSubmit};
|
||||
result = copyBuffer.begin(&beginInfo);
|
||||
ERROR_IF(Failed(result), "Copy begin failed. Cause: {}", result) THEN_ABORT(result);
|
||||
|
||||
vk::BufferCopy bufferCopy = {.srcOffset = 0, .dstOffset = 0, .size = staging.m_Size};
|
||||
copyBuffer.copyBuffer(staging.m_Buffer, vbo.m_Buffer, 1, &bufferCopy);
|
||||
|
||||
result = copyBuffer.end();
|
||||
ERROR_IF(Failed(result), "Copy end failed. Cause: {}", result) THEN_ABORT(result);
|
||||
|
||||
vk::SubmitInfo submitInfo = {
|
||||
.commandBufferCount = 1,
|
||||
.pCommandBuffers = ©Buffer,
|
||||
};
|
||||
|
||||
result = commandQueue.submit(1, &submitInfo, fence);
|
||||
ERROR_IF(Failed(result), "Submit failed. Cause: {}", result) THEN_ABORT(result) ELSE_INFO("Submit copy");
|
||||
|
||||
result = device.m_Device.waitForFences(1, &fence, true, MaxValue<u64>);
|
||||
ERROR_IF(Failed(result), "Fence wait failed. Cause: {}", result) THEN_ABORT(result) ELSE_INFO("Fence wait");
|
||||
|
||||
result = device.m_Device.resetCommandPool(copyPool, {});
|
||||
ERROR_IF(Failed(result), "Couldn't reset command pool. Cause: {}", result) THEN_ABORT(result);
|
||||
|
||||
device.m_Device.destroy(fence, nullptr);
|
||||
staging.Destroy();
|
||||
}
|
||||
auto vbo = resourceManager.Buffers().CreateVertexBuffer(vertices.size() * sizeof vertices[0], "VBO");
|
||||
vbo->Write(0, vertices.size() * sizeof vertices[0], vertices.data());
|
||||
|
||||
// Persistent variables
|
||||
vk::Viewport viewport = {
|
||||
|
|
@ -294,7 +259,7 @@ main(int, char **)
|
|||
cmd.setScissor(0, 1, &scissor);
|
||||
cmd.bindPipeline(vk::PipelineBindPoint::eGraphics, pipeline.m_Pipeline);
|
||||
usize offsets = 0;
|
||||
cmd.bindVertexBuffers(0, 1, &vbo.m_Buffer, &offsets);
|
||||
cmd.bindVertexBuffers(0, 1, &vbo->m_Buffer, &offsets);
|
||||
cmd.draw(3, 1, 0, 0);
|
||||
|
||||
cmd.endRendering();
|
||||
|
|
@ -352,7 +317,6 @@ main(int, char **)
|
|||
device.WaitIdle();
|
||||
|
||||
device.m_Device.destroy(copyPool, nullptr);
|
||||
vbo.Destroy();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
add_subdirectory("00_util")
|
||||
# add_subdirectory("01_triangle")
|
||||
add_subdirectory("01_triangle")
|
||||
add_subdirectory("02_box")
|
||||
add_subdirectory("03_model_render")
|
||||
# add_subdirectory("04_scenes")
|
||||
|
|
|
|||
Loading…
Reference in New Issue