// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved. #pragma once #include "VertexElement.h" #include "Engine/Graphics/GPUResource.h" #include "Engine/Core/Collections/Array.h" class GPUBuffer; /// /// Defines input layout of vertex buffer data passed to the Vertex Shader. /// API_CLASS(Sealed, NoSpawn) class FLAXENGINE_API GPUVertexLayout : public GPUResource { DECLARE_SCRIPTING_TYPE_NO_SPAWN(GPUVertexLayout); typedef Array> Elements; protected: Elements _elements; GPUVertexLayout(); public: /// /// Gets the list of elements used by this layout. /// API_PROPERTY() FORCE_INLINE const Array>& GetElements() const { return _elements; } /// /// Gets the vertex layout for a given list of elements. Uses internal cache to skip creating layout if it's already exists for a given list. /// /// The list of elements for the layout. /// Vertex layout object. Doesn't need to be cleared as it's cached for an application lifetime. API_FUNCTION() static GPUVertexLayout* Get(const Array>& elements); /// /// Gets the vertex layout for a given list of vertex buffers (sequence of binding slots based on layouts set on those buffers). Uses internal cache to skip creating layout if it's already exists for a given list. /// /// The list of vertex buffers for the layout. /// Vertex layout object. Doesn't need to be cleared as it's cached for an application lifetime. API_FUNCTION() static GPUVertexLayout* Get(const Span& vertexBuffers); public: // [GPUResource] GPUResourceType GetResourceType() const override { return GPUResourceType::Descriptor; } };