Refactor Vertex Shader input vertex layout to use GPUVertexLayout defined on Vertex Buffer rather than Vertex Shader

#3044 #2667
This commit is contained in:
Wojtek Figat
2024-12-15 22:10:45 +01:00
parent 666efb7675
commit b3f37ca041
66 changed files with 786 additions and 579 deletions

View File

@@ -5,6 +5,8 @@
#include "Enums.h"
#include "PixelFormat.h"
class GPUVertexLayout;
/// <summary>
/// The GPU buffer usage flags.
/// </summary>
@@ -110,6 +112,11 @@ API_STRUCT() struct FLAXENGINE_API GPUBufferDescription
/// </summary>
API_FIELD() GPUResourceUsage Usage;
/// <summary>
/// The vertex elements layout used by vertex buffers only.
/// </summary>
API_FIELD() GPUVertexLayout* VertexLayout;
public:
/// <summary>
/// Gets the number elements in the buffer.
@@ -178,34 +185,57 @@ public:
/// <summary>
/// Creates vertex buffer description.
/// </summary>
/// <param name="layout">The vertex buffer layout.</param>
/// <param name="elementStride">The element stride.</param>
/// <param name="elementsCount">The elements count.</param>
/// <param name="data">The data.</param>
/// <returns>The buffer description.</returns>
static GPUBufferDescription Vertex(int32 elementStride, int32 elementsCount, const void* data)
static GPUBufferDescription Vertex(GPUVertexLayout* layout, uint32 elementStride, uint32 elementsCount, const void* data);
/// <summary>
/// Creates vertex buffer description.
/// </summary>
/// <param name="layout">The vertex buffer layout.</param>
/// <param name="elementStride">The element stride.</param>
/// <param name="elementsCount">The elements count.</param>
/// <param name="usage">The usage mode.</param>
/// <returns>The buffer description.</returns>
static GPUBufferDescription Vertex(GPUVertexLayout* layout, uint32 elementStride, uint32 elementsCount, GPUResourceUsage usage = GPUResourceUsage::Default);
/// <summary>
/// Creates vertex buffer description.
/// [Deprecated in v1.10]
/// </summary>
/// <param name="elementStride">The element stride.</param>
/// <param name="elementsCount">The elements count.</param>
/// <param name="data">The data.</param>
/// <returns>The buffer description.</returns>
DEPRECATED("Use Vertex with vertex layout parameter instead") static GPUBufferDescription Vertex(int32 elementStride, int32 elementsCount, const void* data)
{
return Buffer(elementsCount * elementStride, GPUBufferFlags::VertexBuffer, PixelFormat::Unknown, data, elementStride, GPUResourceUsage::Default);
}
/// <summary>
/// Creates vertex buffer description.
/// [Deprecated in v1.10]
/// </summary>
/// <param name="elementStride">The element stride.</param>
/// <param name="elementsCount">The elements count.</param>
/// <param name="usage">The usage mode.</param>
/// <returns>The buffer description.</returns>
static GPUBufferDescription Vertex(int32 elementStride, int32 elementsCount, GPUResourceUsage usage = GPUResourceUsage::Default)
DEPRECATED("Use Vertex with vertex layout parameter instead") static GPUBufferDescription Vertex(int32 elementStride, int32 elementsCount, GPUResourceUsage usage = GPUResourceUsage::Default)
{
return Buffer(elementsCount * elementStride, GPUBufferFlags::VertexBuffer, PixelFormat::Unknown, nullptr, elementStride, usage);
}
/// <summary>
/// Creates vertex buffer description.
/// [Deprecated in v1.10]
/// </summary>
/// <param name="size">The size (in bytes).</param>
/// <param name="usage">The usage mode.</param>
/// <returns>The buffer description.</returns>
static GPUBufferDescription Vertex(int32 size, GPUResourceUsage usage = GPUResourceUsage::Default)
DEPRECATED("Use Vertex with separate vertex stride and count instead") static GPUBufferDescription Vertex(int32 size, GPUResourceUsage usage = GPUResourceUsage::Default)
{
return Buffer(size, GPUBufferFlags::VertexBuffer, PixelFormat::Unknown, nullptr, 0, usage);
}