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

array.hpp
Go to the documentation of this file.
1 
9 #ifndef EAGINE_SHAPES_ARRAY_HPP
10 #define EAGINE_SHAPES_ARRAY_HPP
11 
12 #include "delegated.hpp"
13 #include <eagine/config/basic.hpp>
14 #include <array>
15 
16 namespace eagine {
17 namespace shapes {
18 //------------------------------------------------------------------------------
19 class array_gen : public delegated_gen {
20 private:
21  std::array<float, 3> _d;
22  span_size_t _copies;
23 
24  template <typename T>
25  void _indices(drawing_variant, span<T> dest) noexcept;
26 
27 public:
28  array_gen(
29  std::shared_ptr<generator> gen,
30  std::array<float, 3> d,
31  span_size_t n) noexcept
32  : delegated_gen{std::move(gen)}
33  , _d{d}
34  , _copies{n} {}
35 
36  auto vertex_count() -> span_size_t override;
37 
38  void attrib_values(vertex_attrib_variant, span<float>) override;
39 
40  auto index_type(drawing_variant) -> index_data_type override;
41 
42  auto index_count(drawing_variant) -> span_size_t override;
43 
44  void indices(drawing_variant, span<std::uint8_t> dest) override;
45 
46  void indices(drawing_variant, span<std::uint16_t> dest) override;
47 
48  void indices(drawing_variant, span<std::uint32_t> dest) override;
49 
51 
52  void instructions(drawing_variant, span<draw_operation> ops) override;
53 
54  auto bounding_sphere() -> math::sphere<float, true> override;
55 };
56 //------------------------------------------------------------------------------
57 static inline auto array(
58  std::shared_ptr<generator> gen,
59  std::array<float, 3> d,
60  span_size_t count) noexcept {
61  return std::make_unique<array_gen>(std::move(gen), d, count);
62 }
63 //------------------------------------------------------------------------------
64 static inline auto ortho_array_xyz(
65  std::shared_ptr<generator> gen,
66  std::array<float, 3> d,
67  std::array<span_size_t, 3> n) noexcept {
68  const float z = 0.0F;
69  return array(
70  array(array(std::move(gen), {d[0], z, z}, n[0]), {z, d[1], z}, n[1]),
71  {z, z, d[2]},
72  n[2]);
73 }
74 //------------------------------------------------------------------------------
75 } // namespace shapes
76 } // namespace eagine
77 
78 #if !EAGINE_LINK_LIBRARY || defined(EAGINE_IMPLEMENTING_LIBRARY)
79 #include <eagine/shapes/array.inl>
80 #endif
81 
82 #endif // EAGINE_SHAPES_ARRAY_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 attrib_values(vertex_attrib_variant vav, span< byte > dest) override
Fetches the vertex attribute data for the specified variant as bytes.
Definition: delegated.hpp:62
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
void instructions(span< draw_operation > dest)
Fetches the drawing operations for the default drawing variant.
Definition: gen_base.hpp:187
void indices(span< std::uint8_t > dest)
Fetches the index data for the default drawing variant.
Definition: gen_base.hpp:155
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).