OGLplus  (0.59.0) a C++ wrapper for rendering APIs

adjacency.hpp
Go to the documentation of this file.
1 
9 #ifndef EAGINE_SHAPES_ADJACENCY_HPP
10 #define EAGINE_SHAPES_ADJACENCY_HPP
11 
12 #include "delegated.hpp"
13 #include "topology.hpp"
14 #include <eagine/config/basic.hpp>
15 
16 namespace eagine {
17 namespace shapes {
18 //------------------------------------------------------------------------------
23 public:
25  std::shared_ptr<generator> gen,
26  drawing_variant var) noexcept
27  : delegated_gen{std::move(gen)} {
28  _topology(var);
29  }
30 
31  triangle_adjacency_gen(std::shared_ptr<generator> gen) noexcept
32  : triangle_adjacency_gen{std::move(gen), 0} {}
33 
34  auto index_type(const topology&) -> index_data_type;
35  auto index_type(drawing_variant) -> index_data_type override;
36 
37  auto index_count(const topology&) -> span_size_t;
38  auto index_count(drawing_variant) -> span_size_t override;
39 
40  void indices(drawing_variant, span<std::uint8_t> dest) override;
41 
42  void indices(drawing_variant, span<std::uint16_t> dest) override;
43 
44  void indices(drawing_variant, span<std::uint32_t> dest) override;
45 
47 
48  void instructions(drawing_variant, span<draw_operation> ops) override;
49 
50 private:
51  auto _topology(drawing_variant var) noexcept -> topology&;
52 
53  template <typename T>
54  void _indices(drawing_variant, span<T> dest) noexcept;
55 
56  flat_map<drawing_variant, topology> _topologies;
57 };
58 //------------------------------------------------------------------------------
61 static inline auto add_triangle_adjacency(
62  std::shared_ptr<generator> gen,
63  drawing_variant var) noexcept {
64  return std::make_unique<triangle_adjacency_gen>(std::move(gen), var);
65 }
66 //------------------------------------------------------------------------------
69 static inline auto
70 add_triangle_adjacency(std::shared_ptr<generator> gen) noexcept {
71  return std::make_unique<triangle_adjacency_gen>(std::move(gen));
72 }
73 //------------------------------------------------------------------------------
74 } // namespace shapes
75 } // namespace eagine
76 
77 #if !EAGINE_LINK_LIBRARY || defined(EAGINE_IMPLEMENTING_LIBRARY)
78 #include <eagine/shapes/adjacency.inl>
79 #endif
80 
81 #endif // EAGINE_SHAPES_ADJACENCY_HPP
std::ptrdiff_t span_size_t
Signed span size type used by eagine.
Definition: types.hpp:36
Common code is placed in this namespace.
Definition: eagine.hpp:21
auto operation_count()
Returns the number of drawing instructions for the default variant.
Definition: gen_base.hpp:179
void indices(drawing_variant, span< std::uint8_t > dest) override
Fetches the index data for the specified drawing variant.
Class holding information about the topology of a generated shape.
Definition: topology.hpp:157
static auto add_triangle_adjacency(std::shared_ptr< generator > gen, drawing_variant var) noexcept
Constructs instances of triangle_adjacency_gen modifier.
Definition: adjacency.hpp:61
Generator modifier adding triangle adjacency to drawing instructions.
Definition: adjacency.hpp:22
void instructions(drawing_variant, span< draw_operation > ops) override
Fetches the drawing operations for the specified drawing variant.
span_size_t drawing_variant
Alias for shape drawing variant index type.
Definition: gen_base.hpp:31
auto index_type() -> index_data_type
Returns the index data type for the default draw variant.
Definition: gen_base.hpp:139
Base class for delegating shape generators based on other generators.
Definition: delegated.hpp:21
index_data_type
Shape element index type enumeration.
Definition: drawing.hpp:111
auto index_count()
Returns the index count for the default drawing variant.
Definition: gen_base.hpp:147

Copyright © 2015-2021 Matúš Chochlík.
<chochlik -at -gmail.com>
Documentation generated on Tue Apr 13 2021 by Doxygen (version 1.8.17).