VulkanTest now longer require Vulkan
This commit is contained in:
parent
d9a08640d6
commit
8eccbe8189
|
|
@ -39,8 +39,6 @@ int main()
|
||||||
return __LINE__;
|
return __LINE__;
|
||||||
}
|
}
|
||||||
|
|
||||||
Nz::VulkanRenderer* rendererImpl = static_cast<Nz::VulkanRenderer*>(Nz::Renderer::GetRendererImpl());
|
|
||||||
|
|
||||||
Nz::Vk::Instance& instance = Nz::Vulkan::GetInstance();
|
Nz::Vk::Instance& instance = Nz::Vulkan::GetInstance();
|
||||||
|
|
||||||
VkDebugUtilsMessengerCreateInfoEXT callbackCreateInfo = { VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT };
|
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::unique_ptr<Nz::RenderPipeline> pipeline = device->InstantiateRenderPipeline(pipelineInfo);
|
||||||
|
|
||||||
std::array<VkClearValue, 2> clearValues;
|
Nz::RenderDevice* renderDevice = window.GetRenderDevice().get();
|
||||||
clearValues[0].color = {0.0f, 0.0f, 0.0f, 0.0f};
|
|
||||||
clearValues[1].depthStencil = {1.f, 0};
|
|
||||||
|
|
||||||
Nz::VkRenderWindow& vulkanWindow = *static_cast<Nz::VkRenderWindow*>(window.GetImpl());
|
Nz::RenderWindowImpl* windowImpl = window.GetImpl();
|
||||||
Nz::VulkanDevice& vulkanDevice = vulkanWindow.GetDevice();
|
std::unique_ptr<Nz::CommandPool> commandPool = windowImpl->CreateCommandPool(Nz::QueueType::Graphics);
|
||||||
|
|
||||||
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::RenderBuffer* renderBufferIB = static_cast<Nz::RenderBuffer*>(drfreakIB->GetBuffer()->GetImpl());
|
Nz::RenderBuffer* renderBufferIB = static_cast<Nz::RenderBuffer*>(drfreakIB->GetBuffer()->GetImpl());
|
||||||
Nz::RenderBuffer* renderBufferVB = static_cast<Nz::RenderBuffer*>(drfreakVB->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");
|
NazaraError("Failed to synchronize render buffer");
|
||||||
return __LINE__;
|
return __LINE__;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!renderBufferVB->Synchronize(&vulkanDevice))
|
if (!renderBufferVB->Synchronize(renderDevice))
|
||||||
{
|
{
|
||||||
NazaraError("Failed to synchronize render buffer");
|
NazaraError("Failed to synchronize render buffer");
|
||||||
return __LINE__;
|
return __LINE__;
|
||||||
}
|
}
|
||||||
|
|
||||||
Nz::AbstractBuffer* indexBufferImpl = renderBufferIB->GetHardwareBuffer(&vulkanDevice);
|
Nz::AbstractBuffer* indexBufferImpl = renderBufferIB->GetHardwareBuffer(renderDevice);
|
||||||
Nz::AbstractBuffer* vertexBufferImpl = renderBufferVB->GetHardwareBuffer(&vulkanDevice);
|
Nz::AbstractBuffer* vertexBufferImpl = renderBufferVB->GetHardwareBuffer(renderDevice);
|
||||||
|
|
||||||
Nz::VulkanRenderPipeline* vkPipeline = static_cast<Nz::VulkanRenderPipeline*>(pipeline.get());
|
std::unique_ptr<Nz::CommandBuffer> drawCommandBuffer = commandPool->BuildCommandBuffer([&](Nz::CommandBufferBuilder& builder)
|
||||||
|
|
||||||
for (Nz::UInt32 i = 0; i < imageCount; ++i)
|
|
||||||
{
|
{
|
||||||
auto& commandBufferPtr = renderCmds[i];
|
Nz::Recti renderRect(0, 0, window.GetSize().x, window.GetSize().y);
|
||||||
|
|
||||||
VkRect2D renderArea = {
|
Nz::CommandBufferBuilder::ClearValues clearValues[2];
|
||||||
{ // VkOffset2D offset
|
clearValues[0].color = Nz::Color::Black;
|
||||||
0, // int32_t x
|
clearValues[1].depth = 1.f;
|
||||||
0 // int32_t y
|
clearValues[1].stencil = 0;
|
||||||
},
|
|
||||||
{ // VkExtent2D extent
|
|
||||||
windowSize.x, // int32_t width
|
|
||||||
windowSize.y, // int32_t height
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
VkRenderPassBeginInfo render_pass_begin_info = {
|
builder.BeginDebugRegion("Main window rendering", Nz::Color::Green);
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
Nz::Vk::CommandBuffer& vkCommandBuffer = static_cast<Nz::VulkanCommandBufferBuilder&>(builder).GetCommandBuffer();
|
builder.BeginRenderPass(windowImpl->GetFramebuffer(), windowImpl->GetRenderPass(), renderRect, { clearValues[0], clearValues[1] });
|
||||||
|
|
||||||
builder.BeginDebugRegion("Main window rendering", Nz::Color::Green);
|
|
||||||
{
|
{
|
||||||
vkCommandBuffer.BeginRenderPass(render_pass_begin_info);
|
builder.BindIndexBuffer(indexBufferImpl);
|
||||||
{
|
builder.BindPipeline(*pipeline);
|
||||||
builder.BindIndexBuffer(indexBufferImpl);
|
builder.BindVertexBuffer(0, vertexBufferImpl);
|
||||||
builder.BindVertexBuffer(0, vertexBufferImpl);
|
builder.BindShaderBinding(*shaderBinding);
|
||||||
builder.BindShaderBinding(*shaderBinding);
|
|
||||||
|
|
||||||
builder.SetScissor(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) });
|
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());
|
||||||
|
|
||||||
builder.DrawIndexed(drfreakIB->GetIndexCount());
|
|
||||||
}
|
|
||||||
vkCommandBuffer.EndRenderPass();
|
|
||||||
}
|
}
|
||||||
builder.EndDebugRegion();
|
builder.EndRenderPass();
|
||||||
});
|
}
|
||||||
}
|
builder.EndDebugRegion();
|
||||||
|
});
|
||||||
|
|
||||||
Nz::Vector3f viewerPos = Nz::Vector3f::Zero();
|
Nz::Vector3f viewerPos = Nz::Vector3f::Zero();
|
||||||
|
|
||||||
|
|
@ -357,7 +324,7 @@ int main()
|
||||||
viewerPos += Nz::Vector3f::Down() * cameraSpeed;
|
viewerPos += Nz::Vector3f::Down() * cameraSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
Nz::VulkanRenderImage& renderImage = vulkanWindow.Acquire();
|
Nz::RenderImage& renderImage = windowImpl->Acquire();
|
||||||
|
|
||||||
ubo.viewMatrix = Nz::Matrix4f::ViewMatrix(viewerPos, camAngles);
|
ubo.viewMatrix = Nz::Matrix4f::ViewMatrix(viewerPos, camAngles);
|
||||||
|
|
||||||
|
|
@ -376,9 +343,7 @@ int main()
|
||||||
builder.EndDebugRegion();
|
builder.EndDebugRegion();
|
||||||
}, Nz::QueueType::Transfer);
|
}, Nz::QueueType::Transfer);
|
||||||
|
|
||||||
Nz::UInt32 imageIndex = renderImage.GetImageIndex();
|
renderImage.SubmitCommandBuffer(drawCommandBuffer.get(), Nz::QueueType::Graphics);
|
||||||
|
|
||||||
renderImage.SubmitCommandBuffer(renderCmds[imageIndex].get(), Nz::QueueType::Graphics);
|
|
||||||
|
|
||||||
renderImage.Present();
|
renderImage.Present();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue