2#ifndef LIBSBX_MODELS_VERTEX_STREAM_HPP_
3#define LIBSBX_MODELS_VERTEX_STREAM_HPP_
10#include <libsbx/utility/enum.hpp>
12#include <libsbx/reflection/description.hpp>
14namespace sbx::models {
16enum class vertex_stream : std::uint8_t {
18 color = utility::bit_v<0>,
19 custom0 = utility::bit_v<1>,
20 custom1 = utility::bit_v<2>,
21 custom2 = utility::bit_v<3>,
22 custom3 = utility::bit_v<4>
25inline constexpr auto operator|(
const vertex_stream lhs,
const vertex_stream rhs) -> vertex_stream {
26 return static_cast<vertex_stream
>(
static_cast<std::uint8_t
>(lhs) |
static_cast<std::uint8_t
>(rhs));
29inline constexpr auto vertex_stream_count = std::size_t{5u};
31inline constexpr auto vertex_stream_element_size = std::uint32_t{16u};
35 std::string_view name;
36 std::string_view push_name;
37 std::string_view define;
40inline constexpr auto vertex_stream_descriptors = std::array<vertex_stream_descriptor, vertex_stream_count>{
42 vertex_stream_descriptor{vertex_stream::custom0,
"custom0",
"custom0_buffer",
"VERTEX_STREAM_CUSTOM0"},
43 vertex_stream_descriptor{vertex_stream::custom1,
"custom1",
"custom1_buffer",
"VERTEX_STREAM_CUSTOM1"},
44 vertex_stream_descriptor{vertex_stream::custom2,
"custom2",
"custom2_buffer",
"VERTEX_STREAM_CUSTOM2"},
45 vertex_stream_descriptor{vertex_stream::custom3,
"custom3",
"custom3_buffer",
"VERTEX_STREAM_CUSTOM3"}
48inline constexpr auto vertex_stream_index(
const vertex_stream stream) -> std::optional<std::uint32_t> {
49 for (
auto i = std::uint32_t{0u}; i < static_cast<std::uint32_t>(vertex_stream_descriptors.size()); ++i) {
50 if (vertex_stream_descriptors[i].value == stream) {
66 static constexpr auto name() -> std::string_view {
67 return "vertex_stream";
70 static constexpr auto enumerators() {
71 return std::make_tuple(
72 enumerator{
"none", sbx::models::vertex_stream::none},
73 enumerator{
"color", sbx::models::vertex_stream::color},
74 enumerator{
"custom0", sbx::models::vertex_stream::custom0},
75 enumerator{
"custom1", sbx::models::vertex_stream::custom1},
76 enumerator{
"custom2", sbx::models::vertex_stream::custom2},
77 enumerator{
"custom3", sbx::models::vertex_stream::custom3}
Definition: vertex_stream.hpp:33
Definition: description.hpp:16
Definition: enumerator.hpp:10