9#ifndef AVARA3D_MESH_VERTEXACCESS_H
10#define AVARA3D_MESH_VERTEXACCESS_H
18#include "a3d/mesh/VertexLayout.h"
19#include "a3d/mesh/VertexLayoutDesc.h"
25 struct VertexStreamView {
26 const std::byte* base =
nullptr;
29 VertexLayout layout = VertexLayout::None;
32 inline uint16_t VertexStreamStride(
const VertexStreamView& v) {
33 return GetVertexLayoutDesc(v.layout).stride;
36 inline const std::byte* VertexBaseAt(
const VertexStreamView& v, uint32_t i) {
37 return v.base + std::size_t(i) * std::size_t(VertexStreamStride(v));
42 static const VertexAttribDesc* FindAttrib(
const VertexLayoutDesc& desc, VertexSemantic semantic);
43 static const VertexAttribDesc* GetPositionAttribF32x3(VertexLayout layout);
44 static math::vec3 ReadVec3(
const std::byte* base, uint16_t offset);
45 static void WriteVec3(std::byte* base, uint16_t offset,
const math::vec3& vec);
46 static std::optional<VertexStreamView> GetStreamView(
const MeshElement& element,
47 VertexSemantic semantic,
48 VertexAttribFormat expectedFormat);
50 static std::optional<VertexStreamView> GetPositionStreamView(
const MeshElement& element);