#include #include namespace XCEngine { namespace Resources { Mesh::Mesh() = default; Mesh::~Mesh() = default; void Mesh::Release() { m_vertexData.Clear(); m_indexData.Clear(); m_sections.Clear(); m_vertexCount = 0; m_vertexStride = 0; m_attributes = VertexAttribute::Position; m_indexCount = 0; m_use32BitIndex = false; UpdateMemorySize(); SetInvalid(); } void Mesh::SetVertexData(const void* data, size_t size, Core::uint32 vertexCount, Core::uint32 vertexStride, VertexAttribute attributes) { m_vertexCount = vertexCount; m_vertexStride = vertexStride; m_attributes = attributes; m_vertexData.Resize(size); if (size > 0 && data != nullptr) { std::memcpy(m_vertexData.Data(), data, size); } UpdateMemorySize(); } void Mesh::SetIndexData(const void* data, size_t size, Core::uint32 indexCount, bool use32Bit) { m_indexCount = indexCount; m_use32BitIndex = use32Bit; m_indexData.Resize(size); if (size > 0 && data != nullptr) { std::memcpy(m_indexData.Data(), data, size); } UpdateMemorySize(); } void Mesh::AddSection(const MeshSection& section) { m_sections.PushBack(section); UpdateMemorySize(); } void Mesh::UpdateMemorySize() { m_memorySize = m_vertexData.Size() + m_indexData.Size() + m_sections.Size() * sizeof(MeshSection); } } // namespace Resources } // namespace XCEngine