Make use of Nazara uniform buffer
This commit is contained in:
parent
af28ea02a8
commit
286461c482
|
|
@ -181,38 +181,17 @@ int main()
|
||||||
|
|
||||||
Nz::UInt32 uniformSize = sizeof(ubo);
|
Nz::UInt32 uniformSize = sizeof(ubo);
|
||||||
|
|
||||||
Nz::Vk::Buffer uniformBuffer;
|
Nz::UniformBuffer uniformBuffer(uniformSize, Nz::DataStorage_Hardware, Nz::BufferUsage_Dynamic);
|
||||||
if (!uniformBuffer.Create(vulkanDevice.shared_from_this(), 0, uniformSize, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT))
|
uniformBuffer.Fill(&ubo, 0, uniformSize);
|
||||||
|
|
||||||
|
Nz::RenderBuffer* renderBufferUB = static_cast<Nz::RenderBuffer*>(uniformBuffer.GetBuffer()->GetImpl());
|
||||||
|
if (!renderBufferUB->Synchronize(&vulkanDevice))
|
||||||
{
|
{
|
||||||
NazaraError("Failed to create vertex buffer");
|
NazaraError("Failed to synchronize render buffer");
|
||||||
return __LINE__;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkMemoryRequirements memRequirement = uniformBuffer.GetMemoryRequirements();
|
|
||||||
|
|
||||||
Nz::Vk::DeviceMemory uniformBufferMemory;
|
|
||||||
if (!uniformBufferMemory.Create(vulkanDevice.shared_from_this(), memRequirement.size, memRequirement.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT))
|
|
||||||
{
|
|
||||||
NazaraError("Failed to allocate vertex buffer memory");
|
|
||||||
return __LINE__;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!uniformBufferMemory.Map(0, uniformSize))
|
|
||||||
{
|
|
||||||
NazaraError("Failed to map vertex buffer");
|
|
||||||
return __LINE__;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::memcpy(uniformBufferMemory.GetMappedPointer(), &ubo, uniformSize);
|
|
||||||
|
|
||||||
uniformBufferMemory.Unmap();
|
|
||||||
|
|
||||||
if (!uniformBuffer.BindBufferMemory(uniformBufferMemory))
|
|
||||||
{
|
|
||||||
NazaraError("Failed to bind uniform buffer to its memory");
|
|
||||||
return __LINE__;
|
return __LINE__;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Nz::VulkanBuffer* uniformBufferImpl = static_cast<Nz::VulkanBuffer*>(renderBufferUB->GetHardwareBuffer(&vulkanDevice));
|
||||||
|
|
||||||
VkDescriptorSetLayoutBinding layoutBinding = {};
|
VkDescriptorSetLayoutBinding layoutBinding = {};
|
||||||
layoutBinding.binding = 0;
|
layoutBinding.binding = 0;
|
||||||
|
|
@ -241,7 +220,7 @@ int main()
|
||||||
|
|
||||||
Nz::Vk::DescriptorSet descriptorSet = descriptorPool.AllocateDescriptorSet(descriptorLayout);
|
Nz::Vk::DescriptorSet descriptorSet = descriptorPool.AllocateDescriptorSet(descriptorLayout);
|
||||||
|
|
||||||
descriptorSet.WriteUniformDescriptor(0, uniformBuffer, 0, uniformSize);
|
descriptorSet.WriteUniformDescriptor(0, uniformBufferImpl->GetBufferHandle(), 0, uniformSize);
|
||||||
|
|
||||||
Nz::RenderPipelineInfo pipelineInfo;
|
Nz::RenderPipelineInfo pipelineInfo;
|
||||||
|
|
||||||
|
|
@ -561,15 +540,14 @@ int main()
|
||||||
{
|
{
|
||||||
ubo.viewMatrix = Nz::Matrix4f::ViewMatrix(viewerPos, camAngles);
|
ubo.viewMatrix = Nz::Matrix4f::ViewMatrix(viewerPos, camAngles);
|
||||||
|
|
||||||
if (!uniformBufferMemory.Map(0, uniformSize))
|
uniformBuffer.Fill(&ubo, 0, uniformSize);
|
||||||
|
|
||||||
|
Nz::RenderBuffer* renderBufferUB = static_cast<Nz::RenderBuffer*>(uniformBuffer.GetBuffer()->GetImpl());
|
||||||
|
if (!renderBufferUB->Synchronize(&vulkanDevice))
|
||||||
{
|
{
|
||||||
NazaraError("Failed to map vertex buffer");
|
NazaraError("Failed to synchronize render buffer");
|
||||||
return __LINE__;
|
return __LINE__;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::memcpy(uniformBufferMemory.GetMappedPointer(), &ubo, uniformSize);
|
|
||||||
|
|
||||||
uniformBufferMemory.Unmap();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Nz::UInt32 imageIndex;
|
Nz::UInt32 imageIndex;
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include <Nazara/VulkanRenderer/VulkanBuffer.hpp>
|
#include <Nazara/VulkanRenderer/VulkanBuffer.hpp>
|
||||||
#include <Nazara/Core/CallOnExit.hpp>
|
#include <Nazara/Core/CallOnExit.hpp>
|
||||||
|
#include <Nazara/Core/String.hpp>
|
||||||
#include <Nazara/VulkanRenderer/Debug.hpp>
|
#include <Nazara/VulkanRenderer/Debug.hpp>
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
|
|
@ -25,7 +26,27 @@ namespace Nz
|
||||||
|
|
||||||
bool VulkanBuffer::Initialize(UInt32 size, BufferUsageFlags usage)
|
bool VulkanBuffer::Initialize(UInt32 size, BufferUsageFlags usage)
|
||||||
{
|
{
|
||||||
if (!m_buffer.Create(m_device, 0, size, (m_type == BufferType_Index) ? VK_BUFFER_USAGE_INDEX_BUFFER_BIT : VK_BUFFER_USAGE_VERTEX_BUFFER_BIT))
|
VkBufferUsageFlags type;
|
||||||
|
switch (m_type)
|
||||||
|
{
|
||||||
|
case BufferType_Index:
|
||||||
|
type = VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BufferType_Vertex:
|
||||||
|
type = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BufferType_Uniform:
|
||||||
|
type = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
NazaraError("Unhandled buffer usage 0x" + String::Number(m_type, 16));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!m_buffer.Create(m_device, 0, size, type))
|
||||||
{
|
{
|
||||||
NazaraError("Failed to create vertex buffer");
|
NazaraError("Failed to create vertex buffer");
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue