VulkanTest now longer require Vulkan

This commit is contained in:
Lynix 2020-04-10 17:36:26 +02:00
parent d9a08640d6
commit 8eccbe8189
1 changed files with 28 additions and 63 deletions

View File

@ -39,8 +39,6 @@ int main()
return __LINE__;
}
Nz::VulkanRenderer* rendererImpl = static_cast<Nz::VulkanRenderer*>(Nz::Renderer::GetRendererImpl());
Nz::Vk::Instance& instance = Nz::Vulkan::GetInstance();
VkDebugUtilsMessengerCreateInfoEXT callbackCreateInfo = { VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT };
@ -203,87 +201,56 @@ int main()
std::unique_ptr<Nz::RenderPipeline> pipeline = device->InstantiateRenderPipeline(pipelineInfo);
std::array<VkClearValue, 2> clearValues;
clearValues[0].color = {0.0f, 0.0f, 0.0f, 0.0f};
clearValues[1].depthStencil = {1.f, 0};
Nz::RenderDevice* renderDevice = window.GetRenderDevice().get();
Nz::VkRenderWindow& vulkanWindow = *static_cast<Nz::VkRenderWindow*>(window.GetImpl());
Nz::VulkanDevice& vulkanDevice = vulkanWindow.GetDevice();
std::unique_ptr<Nz::CommandPool> commandPool = vulkanWindow.CreateCommandPool(Nz::QueueType::Graphics);
Nz::UInt32 imageCount = vulkanWindow.GetFramebufferCount();
std::vector<std::unique_ptr<Nz::CommandBuffer>> renderCmds(imageCount);
Nz::RenderWindowImpl* windowImpl = window.GetImpl();
std::unique_ptr<Nz::CommandPool> commandPool = windowImpl->CreateCommandPool(Nz::QueueType::Graphics);
Nz::RenderBuffer* renderBufferIB = static_cast<Nz::RenderBuffer*>(drfreakIB->GetBuffer()->GetImpl());
Nz::RenderBuffer* renderBufferVB = static_cast<Nz::RenderBuffer*>(drfreakVB->GetBuffer()->GetImpl());
if (!renderBufferIB->Synchronize(&vulkanDevice))
if (!renderBufferIB->Synchronize(renderDevice))
{
NazaraError("Failed to synchronize render buffer");
return __LINE__;
}
if (!renderBufferVB->Synchronize(&vulkanDevice))
if (!renderBufferVB->Synchronize(renderDevice))
{
NazaraError("Failed to synchronize render buffer");
return __LINE__;
}
Nz::AbstractBuffer* indexBufferImpl = renderBufferIB->GetHardwareBuffer(&vulkanDevice);
Nz::AbstractBuffer* vertexBufferImpl = renderBufferVB->GetHardwareBuffer(&vulkanDevice);
Nz::AbstractBuffer* indexBufferImpl = renderBufferIB->GetHardwareBuffer(renderDevice);
Nz::AbstractBuffer* vertexBufferImpl = renderBufferVB->GetHardwareBuffer(renderDevice);
Nz::VulkanRenderPipeline* vkPipeline = static_cast<Nz::VulkanRenderPipeline*>(pipeline.get());
for (Nz::UInt32 i = 0; i < imageCount; ++i)
std::unique_ptr<Nz::CommandBuffer> drawCommandBuffer = commandPool->BuildCommandBuffer([&](Nz::CommandBufferBuilder& builder)
{
auto& commandBufferPtr = renderCmds[i];
Nz::Recti renderRect(0, 0, window.GetSize().x, window.GetSize().y);
VkRect2D renderArea = {
{ // VkOffset2D offset
0, // int32_t x
0 // int32_t y
},
{ // VkExtent2D extent
windowSize.x, // int32_t width
windowSize.y, // int32_t height
}
};
Nz::CommandBufferBuilder::ClearValues clearValues[2];
clearValues[0].color = Nz::Color::Black;
clearValues[1].depth = 1.f;
clearValues[1].stencil = 0;
VkRenderPassBeginInfo render_pass_begin_info = {
VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, // VkStructureType sType
nullptr, // const void *pNext
vulkanWindow.GetRenderPass(), // VkRenderPass renderPass
vulkanWindow.GetFrameBuffer(i), // VkFramebuffer framebuffer
renderArea,
2U, // uint32_t clearValueCount
clearValues.data() // const VkClearValue *pClearValues
};
commandBufferPtr = commandPool->BuildCommandBuffer([&](Nz::CommandBufferBuilder& builder)
builder.BeginDebugRegion("Main window rendering", Nz::Color::Green);
{
Nz::Vk::CommandBuffer& vkCommandBuffer = static_cast<Nz::VulkanCommandBufferBuilder&>(builder).GetCommandBuffer();
builder.BeginDebugRegion("Main window rendering", Nz::Color::Green);
builder.BeginRenderPass(windowImpl->GetFramebuffer(), windowImpl->GetRenderPass(), renderRect, { clearValues[0], clearValues[1] });
{
vkCommandBuffer.BeginRenderPass(render_pass_begin_info);
{
builder.BindIndexBuffer(indexBufferImpl);
builder.BindVertexBuffer(0, vertexBufferImpl);
builder.BindShaderBinding(*shaderBinding);
builder.BindIndexBuffer(indexBufferImpl);
builder.BindPipeline(*pipeline);
builder.BindVertexBuffer(0, vertexBufferImpl);
builder.BindShaderBinding(*shaderBinding);
builder.SetScissor(Nz::Recti{ 0, 0, int(windowSize.x), int(windowSize.y) });
builder.SetViewport(Nz::Recti{ 0, 0, int(windowSize.x), int(windowSize.y) });
builder.SetScissor(Nz::Recti{ 0, 0, int(windowSize.x), int(windowSize.y) });
builder.SetViewport(Nz::Recti{ 0, 0, int(windowSize.x), int(windowSize.y) });
vkCommandBuffer.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, vkPipeline->Get(vulkanWindow.GetRenderPass())); //< TODO
builder.DrawIndexed(drfreakIB->GetIndexCount());
}
vkCommandBuffer.EndRenderPass();
builder.DrawIndexed(drfreakIB->GetIndexCount());
}
builder.EndDebugRegion();
});
}
builder.EndRenderPass();
}
builder.EndDebugRegion();
});
Nz::Vector3f viewerPos = Nz::Vector3f::Zero();
@ -357,7 +324,7 @@ int main()
viewerPos += Nz::Vector3f::Down() * cameraSpeed;
}
Nz::VulkanRenderImage& renderImage = vulkanWindow.Acquire();
Nz::RenderImage& renderImage = windowImpl->Acquire();
ubo.viewMatrix = Nz::Matrix4f::ViewMatrix(viewerPos, camAngles);
@ -376,9 +343,7 @@ int main()
builder.EndDebugRegion();
}, Nz::QueueType::Transfer);
Nz::UInt32 imageIndex = renderImage.GetImageIndex();
renderImage.SubmitCommandBuffer(renderCmds[imageIndex].get(), Nz::QueueType::Graphics);
renderImage.SubmitCommandBuffer(drawCommandBuffer.get(), Nz::QueueType::Graphics);
renderImage.Present();