2#ifndef LIBSBX_MODELS_VERTEX_STREAM_HPP_
3#define LIBSBX_MODELS_VERTEX_STREAM_HPP_
9#include <libsbx/utility/enum.hpp>
11#include <libsbx/reflection/description.hpp>
13namespace sbx::models {
15enum class vertex_stream : std::uint8_t {
17 color = utility::bit_v<0>,
18 custom0 = utility::bit_v<1>,
19 custom1 = utility::bit_v<2>,
20 custom2 = utility::bit_v<3>,
21 custom3 = utility::bit_v<4>
24inline constexpr auto operator|(
const vertex_stream lhs,
const vertex_stream rhs) -> vertex_stream {
25 return static_cast<vertex_stream
>(
static_cast<std::uint8_t
>(lhs) |
static_cast<std::uint8_t
>(rhs));
28inline constexpr auto vertex_stream_count = std::size_t{5u};
30inline constexpr auto vertex_stream_element_size = std::uint32_t{16u};
34 std::string_view name;
35 std::string_view push_name;
36 std::string_view define;
39inline constexpr auto vertex_stream_descriptors = std::array<vertex_stream_descriptor, vertex_stream_count>{
41 vertex_stream_descriptor{vertex_stream::custom0,
"custom0",
"custom0_buffer",
"VERTEX_STREAM_CUSTOM0"},
42 vertex_stream_descriptor{vertex_stream::custom1,
"custom1",
"custom1_buffer",
"VERTEX_STREAM_CUSTOM1"},
43 vertex_stream_descriptor{vertex_stream::custom2,
"custom2",
"custom2_buffer",
"VERTEX_STREAM_CUSTOM2"},
44 vertex_stream_descriptor{vertex_stream::custom3,
"custom3",
"custom3_buffer",
"VERTEX_STREAM_CUSTOM3"}
47inline constexpr auto vertex_stream_index(
const vertex_stream stream) -> std::uint32_t {
48 for (
auto i = std::uint32_t{0u}; i < static_cast<std::uint32_t>(vertex_stream_descriptors.size()); ++i) {
49 if (vertex_stream_descriptors[i].value == stream) {
54 return ~std::uint32_t{0u};
65 static constexpr auto name() -> std::string_view {
66 return "vertex_stream";
69 static constexpr auto enumerators() {
70 return std::make_tuple(
71 enumerator{
"none", sbx::models::vertex_stream::none},
72 enumerator{
"color", sbx::models::vertex_stream::color},
73 enumerator{
"custom0", sbx::models::vertex_stream::custom0},
74 enumerator{
"custom1", sbx::models::vertex_stream::custom1},
75 enumerator{
"custom2", sbx::models::vertex_stream::custom2},
76 enumerator{
"custom3", sbx::models::vertex_stream::custom3}
Definition: vertex_stream.hpp:32
Definition: description.hpp:16
Definition: enumerator.hpp:10