2024-08-17 18:01:21 +08:00
|
|
|
#include "vkn/vulkan_api.h"
|
|
|
|
|
#include "vkn/vulkan_window.h"
|
2024-08-27 20:21:32 +08:00
|
|
|
#include "vkn/wrapper/buffer.h"
|
2024-09-07 17:48:12 +08:00
|
|
|
#include "vkn/wrapper/device.h"
|
2024-08-27 20:21:32 +08:00
|
|
|
#include "vkn/thread/buffer_worker.h"
|
|
|
|
|
#include "vkn/thread/command_worker.h"
|
2024-08-25 22:41:25 +08:00
|
|
|
#include "render/asset/mesh.h"
|
2024-08-17 18:01:21 +08:00
|
|
|
namespace vkn {
|
2024-09-07 17:48:12 +08:00
|
|
|
VulkanAPI::VulkanAPI() : RenderAPI(new VulkanContext())
|
|
|
|
|
, window(*VulkanWindow::Ptr())
|
|
|
|
|
, backend(VulkanEngineName)
|
2024-08-17 18:01:21 +08:00
|
|
|
{
|
2024-08-23 22:13:05 +08:00
|
|
|
|
2024-08-17 18:01:21 +08:00
|
|
|
}
|
|
|
|
|
void VulkanAPI::Init()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
void VulkanAPI::Shutdown()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
2024-08-25 22:41:25 +08:00
|
|
|
void VulkanAPI::SetStaticMesh(Mesh& mesh)
|
|
|
|
|
{
|
2024-08-27 20:21:32 +08:00
|
|
|
auto& Indices = mesh.GetIndices();
|
|
|
|
|
auto& Vertices = mesh.GetVertices();
|
|
|
|
|
MeshVAO& VAO = MeshTable[mesh.GetGuid()];
|
|
|
|
|
VAO.indexCount = Indices.size();
|
|
|
|
|
VAO.vertexCount = Vertices.size();
|
2024-08-25 22:41:25 +08:00
|
|
|
|
2024-08-27 20:21:32 +08:00
|
|
|
Buffer indexBuffer{};
|
|
|
|
|
indexBuffer.ppBuffer = &VAO.indexBuffer;
|
|
|
|
|
indexBuffer.pCpuData = Indices.data();
|
|
|
|
|
indexBuffer.size = sizeof(decltype(Indices[0])) * Indices.size();
|
|
|
|
|
indexBuffer.usage = VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
|
|
|
|
|
Backend::TransferWorker->Invoke(indexBuffer);
|
|
|
|
|
|
|
|
|
|
Buffer vertexBuffer{};
|
|
|
|
|
vertexBuffer.ppBuffer = &VAO.vertexBuffer;
|
|
|
|
|
vertexBuffer.pCpuData = Vertices.data();
|
|
|
|
|
vertexBuffer.size = Vertices.data_size();
|
|
|
|
|
vertexBuffer.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
|
|
|
|
|
Backend::TransferWorker->Invoke(vertexBuffer);
|
2024-08-25 22:41:25 +08:00
|
|
|
}
|
|
|
|
|
void VulkanAPI::DrawStaticMesh(Mesh& mesh)
|
|
|
|
|
{
|
2024-08-27 20:21:32 +08:00
|
|
|
|
2024-08-25 22:41:25 +08:00
|
|
|
}
|
|
|
|
|
void VulkanAPI::LoadShader(Shader& shader)
|
|
|
|
|
{
|
|
|
|
|
}
|
2024-08-30 22:09:05 +08:00
|
|
|
void VulkanAPI::BeginFrame()
|
|
|
|
|
{
|
2024-09-07 17:48:12 +08:00
|
|
|
window.Aquire(*(VulkanContext*)&context);
|
2024-08-30 22:09:05 +08:00
|
|
|
}
|
|
|
|
|
void VulkanAPI::EndFrame()
|
|
|
|
|
{
|
2024-09-07 17:48:12 +08:00
|
|
|
window.Present(*(VulkanContext*)&context);
|
|
|
|
|
}
|
|
|
|
|
VkRenderPass VulkanAPI::GetRenderPass(RenderPassKey config) {
|
|
|
|
|
// Finally, create the VkRenderPass.
|
|
|
|
|
VkRenderPassCreateInfo renderPassInfo{
|
|
|
|
|
.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
|
|
|
|
|
.attachmentCount = 0u,
|
|
|
|
|
.pAttachments = attachments,
|
|
|
|
|
.subpassCount = hasSubpasses ? 2u : 1u,
|
|
|
|
|
.pSubpasses = subpasses,
|
|
|
|
|
.dependencyCount = hasSubpasses ? 1u : 0u,
|
|
|
|
|
.pDependencies = dependencies
|
|
|
|
|
};
|
|
|
|
|
VkRenderPass renderPass;
|
|
|
|
|
VkResult error = vkCreateRenderPass(backend.GetDevice().Ptr(), &renderPassInfo, nullptr, &renderPass);
|
2024-08-30 22:09:05 +08:00
|
|
|
}
|
2024-08-17 18:01:21 +08:00
|
|
|
}
|