Go to the documentation of this file.
9 #ifndef EAGINE_SHAPES_VERTEX_ATTRIB_HPP
10 #define EAGINE_SHAPES_VERTEX_ATTRIB_HPP
12 #include "../bitfield.hpp"
13 #include "../reflect/map_enumerators.hpp"
14 #include "../types.hpp"
17 #include <type_traits>
61 template <
typename Selector>
64 return enumerator_map_type<vertex_attrib_kind, 16>{
113 , _index{std::int16_t(v)} {}
120 , _index{vav._index} {}
134 constexpr
explicit operator bool() const noexcept {
144 operator std::array<const vertex_attrib_variant, 1>() const noexcept {
148 constexpr
auto as_tuple() const noexcept {
149 return std::make_tuple(_attrib, _index);
153 friend constexpr
auto
155 return l.as_tuple() == r.as_tuple();
159 friend constexpr
auto
161 return l.as_tuple() != r.as_tuple();
165 friend constexpr
auto
167 return l.as_tuple() < r.as_tuple();
171 friend constexpr
auto
173 return l._attrib == r;
177 friend constexpr
auto
179 return l._attrib != r;
184 std::int16_t _index{0};
189 static constexpr
auto
192 return {attrib, variant_index};
198 template <std::
size_t N>
214 static constexpr
auto
221 template <std::size_t N, std::size_t... I>
222 static constexpr
auto do_append_attrib(
223 const vertex_attrib_variants<N>& a,
224 vertex_attrib_variant b,
225 std::index_sequence<I...>) noexcept {
226 return vertex_attrib_variants<N + 1>{{a[I]..., b}};
233 template <std::
size_t N>
234 static constexpr
auto
237 return do_append_attrib(a, b, std::make_index_sequence<N>());
243 template <std::
size_t N>
250 res = res | vaal.attribute();
294 #endif // EAGINE_SHAPES_VERTEX_ATTRIB_HPP
@ material_id
Face material id value.
std::ptrdiff_t span_size_t
Signed span size type used by eagine.
Definition: types.hpp:36
constexpr vertex_attrib_variant(vertex_attrib_kind a, vertex_attrib_variant vav)
Construction from vertex attribute kind and another attribute variant.
Definition: vertex_attrib.hpp:116
@ polygon_id
Face polygon id value (multiple faces can belong to the same polygon)
Common code is placed in this namespace.
Definition: eagine.hpp:21
constexpr vertex_attrib_variant(vertex_attrib_kind a, span_size_t v)
Construction from vertex attribute kind enumerator and index.
Definition: vertex_attrib.hpp:111
constexpr friend auto operator==(vertex_attrib_variant l, vertex_attrib_kind r) noexcept
Variant and kind equality comparison.
Definition: vertex_attrib.hpp:172
constexpr friend auto operator<(vertex_attrib_variant l, vertex_attrib_variant r) noexcept
Less-than comparison.
Definition: vertex_attrib.hpp:166
@ tangential
Vertex tangential vector.
constexpr friend auto operator==(vertex_attrib_variant l, vertex_attrib_variant r) noexcept
Equality comparison.
Definition: vertex_attrib.hpp:154
@ bitangential
Vertex bi-tangential vector.
constexpr friend auto operator!=(vertex_attrib_variant l, vertex_attrib_variant r) noexcept
Nonequality comparison.
Definition: vertex_attrib.hpp:160
constexpr auto attribute() const noexcept -> vertex_attrib_kind
Return the attribute kind.
Definition: vertex_attrib.hpp:123
static auto attrib_values_per_vertex(vertex_attrib_kind attr) noexcept -> span_size_t
Gets the default number of values per vertex for an attribute kind.
Definition: vertex_attrib.hpp:258
static constexpr auto operator/(vertex_attrib_kind attrib, span_size_t variant_index) noexcept -> vertex_attrib_variant
Operator for constructing of vertex_attrib_variant from kind and index.
Definition: vertex_attrib.hpp:190
@ wrap_coord
UV-texture wrapping coordinate.
@ position
Vertex position.
constexpr auto index() const noexcept -> span_size_t
Returns the index of the attribute variant.
Definition: vertex_attrib.hpp:139
Class designating an vertex attribute variant in a shape generator.
Definition: vertex_attrib.hpp:104
@ color
Vertex color value.
static constexpr auto operator+(vertex_attrib_variant a) noexcept -> vertex_attrib_variants< 1 >
Operator for creating of single element array of vertex attrib variant.
Definition: vertex_attrib.hpp:205
constexpr friend auto operator!=(vertex_attrib_variant l, vertex_attrib_kind r) noexcept
Variant and kind nonequality comparison.
Definition: vertex_attrib.hpp:178
constexpr auto has_valid_index() const noexcept
Check if the stored index is valid.
Definition: vertex_attrib.hpp:128
@ pivot
Shape pivot point.
@ object_id
The object id attributes (typically unique integer).
@ box_coord
Normalized coordinate within shape bounding box.
constexpr vertex_attrib_variant(vertex_attrib_kind a)
Construction from vertex attribute kind enumerator.
Definition: vertex_attrib.hpp:107
vertex_attrib_kind
Shape vertex attribute kind enumeration.
Definition: vertex_attrib.hpp:25
@ pivot_pivot
Pivot of vertex pivot point.
static auto get_attrib_bits(const vertex_attrib_variants< N > &vaals) noexcept -> vertex_attrib_bits
Extracts vertex attribute kind bits from and vertex attribute variants array.
Definition: vertex_attrib.hpp:245
@ occlusion
Vertex (ambient) light occlusion value.
@ face_coord
Generic face coordinate.
std::array< const vertex_attrib_variant, N > vertex_attrib_variants
Array of several vertex attribute variant instances.
Definition: vertex_attrib.hpp:199
Template type used mostly for function type-tag dispatching.
Definition: type_identity.hpp:19
@ weight
Generic vertex weight value.
@ vertex_pivot
Vertex pivot point.
static constexpr auto all_vertex_attrib_bits() noexcept -> vertex_attrib_bits
Returns vertex_attrib_bits value with all bits set.
Definition: vertex_attrib.hpp:89
@ normal
Vertex normal vector.
static constexpr auto operator|(generator_capability a, generator_capability b) noexcept -> generator_capabilities
Bitwise-or operator for generator_capability enumerators.
Definition: gen_capabilities.hpp:37