Add code that should draw the mesh

This commit is contained in:
Magnus Norddahl 2023-10-14 23:10:02 +02:00
commit fc65d43ae8
20 changed files with 395 additions and 171 deletions

View file

@ -56,8 +56,8 @@ VkRSBuffers::VkRSBuffers(VulkanRenderDevice* fb)
.DebugName("Flatbuffer.IndexBuffer")
.Create(fb->GetDevice());
MatrixBuffer = std::make_unique<VkStreamBuffer>(fb, sizeof(MatricesUBO), 50000);
StreamBuffer = std::make_unique<VkStreamBuffer>(fb, sizeof(StreamUBO), 300);
MatrixBuffer = std::make_unique<VkMatrixBufferWriter>(fb);
StreamBuffer = std::make_unique<VkStreamBufferWriter>(fb);
Viewpoint.BlockAlign = (sizeof(HWViewpointUniforms) + fb->uniformblockalignment - 1) / fb->uniformblockalignment * fb->uniformblockalignment;
@ -149,9 +149,11 @@ uint32_t VkStreamBuffer::NextStreamDataBlock()
return mStreamDataOffset;
}
VkStreamBufferWriter::VkStreamBufferWriter(VkRSBuffers* rsbuffers)
/////////////////////////////////////////////////////////////////////////////
VkStreamBufferWriter::VkStreamBufferWriter(VulkanRenderDevice* fb)
{
mBuffer = rsbuffers->StreamBuffer.get();
mBuffer = std::make_unique<VkStreamBuffer>(fb, sizeof(StreamUBO), 300);
}
bool VkStreamBufferWriter::Write(const StreamData& data)
@ -178,9 +180,9 @@ void VkStreamBufferWriter::Reset()
/////////////////////////////////////////////////////////////////////////////
VkMatrixBufferWriter::VkMatrixBufferWriter(VkRSBuffers* rsbuffers)
VkMatrixBufferWriter::VkMatrixBufferWriter(VulkanRenderDevice* fb)
{
mBuffer = rsbuffers->MatrixBuffer.get();
mBuffer = std::make_unique<VkStreamBuffer>(fb, sizeof(MatricesUBO), 50000);
}
bool VkMatrixBufferWriter::Write(const MatricesUBO& matrices)

View file

@ -4,7 +4,8 @@
#include "vulkan/buffers/vk_hwbuffer.h"
#include "vulkan/shaders/vk_shader.h"
class VkStreamBuffer;
class VkMatrixBufferWriter;
class VkStreamBufferWriter;
struct FFlatVertex;
class VkRSBuffers
@ -50,8 +51,8 @@ public:
void* Data = nullptr;
} Bonebuffer;
std::unique_ptr<VkStreamBuffer> MatrixBuffer;
std::unique_ptr<VkStreamBuffer> StreamBuffer;
std::unique_ptr<VkMatrixBufferWriter> MatrixBuffer;
std::unique_ptr<VkStreamBufferWriter> StreamBuffer;
};
class VkStreamBuffer
@ -74,16 +75,18 @@ private:
class VkStreamBufferWriter
{
public:
VkStreamBufferWriter(VkRSBuffers* rsbuffers);
VkStreamBufferWriter(VulkanRenderDevice* fb);
bool Write(const StreamData& data);
void Reset();
uint32_t DataIndex() const { return mDataIndex; }
uint32_t StreamDataOffset() const { return mStreamDataOffset; }
uint32_t Offset() const { return mStreamDataOffset; }
VulkanBuffer* UBO() const { return mBuffer->UBO.get(); }
private:
VkStreamBuffer* mBuffer;
std::unique_ptr<VkStreamBuffer> mBuffer;
uint32_t mDataIndex = MAX_STREAM_DATA - 1;
uint32_t mStreamDataOffset = 0;
};
@ -91,14 +94,16 @@ private:
class VkMatrixBufferWriter
{
public:
VkMatrixBufferWriter(VkRSBuffers* rsbuffers);
VkMatrixBufferWriter(VulkanRenderDevice* fb);
bool Write(const MatricesUBO& matrices);
void Reset();
uint32_t Offset() const { return mOffset; }
VulkanBuffer* UBO() const { return mBuffer->UBO.get(); }
private:
VkStreamBuffer* mBuffer;
std::unique_ptr<VkStreamBuffer> mBuffer;
uint32_t mOffset = 0;
};