gdk-graphics 0b051eb9b5c1eaa0658babaa4463dd7a80aa9d2c
Loading...
Searching...
No Matches
model_data.h
1// © Joseph Cameron - All Rights Reserved
2
3#ifndef GDK_GFX_VERTEX_DATA_H
4#define GDK_GFX_VERTEX_DATA_H
5
6#include <gdk/attribute_data.h>
7#include <gdk/graphics_types.h>
8
9#include <array>
10#include <functional>
11#include <map>
12#include <optional>
13#include <stdexcept>
14#include <string>
15#include <unordered_map>
16#include <vector>
17
18namespace gdk {
22 class model_data final {
23 public:
24 using attribute_collection_type = std::unordered_map<std::string, attribute_data>;
25 using index_value_type = unsigned short;
26
27 enum class primitive_mode {
28 triangles
29 };
30
32 primitive_mode get_primitive_mode() const;
33
35 const std::vector<index_value_type> &indexes() const;
36
38 const attribute_collection_type &attributes() const;
39
41 const attribute_data &get_attribute_data(const std::string &aAttributeName) const;
43 attribute_data &get_attribute_data(const std::string &aAttributeName);
44
46 void clear();
47
49 void transform(const std::string &aPositionAttributeName,
50 const graphics_vector3_type &aPos,
51 const graphics_quaternion_type &aRot = {},
52 const graphics_vector3_type &aSca = {1});
53 //transform(mat4x4) ^
54 void transform(const std::string &aPositionAttributeName, graphics_matrix4x4_type &aTransform);
55
57 void transform(const std::string &aUVAttributeName,
58 const graphics_vector2_type &aPos,
59 const float aRotation = 0,
60 const graphics_vector2_type &aSca = {1});
61 //transform(mat3x3) ?
62
66 const graphics_vector3_type &aObserverWorldPosition,
67 graphics_matrix4x4_type aEntityInstanceWorldMatrix,
68 const std::string &aPositionAttributeName = "a_Position");
69
73 const graphics_vector3_type &aObserverWorldPosition,
74 graphics_matrix4x4_type aEntityInstanceWorldMatrix,
75 const std::string &aPositionAttributeName = "a_Position");
76
78 void push_back(const model_data &other);
79
83 void overwrite(const size_t index, const model_data &other);
84
89 void overwrite(const std::string &aAttributeName, const size_t vertexOffset, const model_data &other);
90
92 size_t vertex_count() const;
93
96
100
102 model_data &operator=(model_data &&other) = default;
104 model_data(model_data &&) = default;
105
107 model_data(const model_data &) = default;
109 model_data &operator=(const model_data &other) = default;
110
112 model_data() = default;
113
114 model_data(attribute_collection_type &&aAttributeData);
115
116 ~model_data() = default;
117
120
121 private:
122 size_t m_VertexCount{};
123 attribute_collection_type m_Attributes{};
124 primitive_mode m_PrimitiveMode = primitive_mode::triangles;
125 };
126}
127
128#endif
129
attribute_data represents one of the lists of components that comprise a model_data object
Definition attribute_data.h:15
attribute_data & get_attribute_data(const std::string &aAttributeName)
get attribute data by name, e.g: "a_Position"
void push_back(const model_data &other)
append a different model_data to this model_data
model_data & operator+=(const model_data &other)
void clear()
clears all state from this model_data instance
const attribute_data & get_attribute_data(const std::string &aAttributeName) const
get attribute data by name, e.g: "a_Position"
void sort_by_furthest_triangle(const graphics_vector3_type &aObserverWorldPosition, graphics_matrix4x4_type aEntityInstanceWorldMatrix, const std::string &aPositionAttributeName="a_Position")
const attribute_collection_type & attributes() const
get collection of all attribute data
void transform(const std::string &aPositionAttributeName, const graphics_vector3_type &aPos, const graphics_quaternion_type &aRot={}, const graphics_vector3_type &aSca={1})
applies a transformation to a 3 component attribute
void transform(const std::string &aUVAttributeName, const graphics_vector2_type &aPos, const float aRotation=0, const graphics_vector2_type &aSca={1})
applies a transformation to a 2 component attribute
model_data()=default
default inited model_data is very useful for procedurally generated data
void overwrite(const size_t index, const model_data &other)
overwrite a section of vertex data using another vertex data instance
model_data operator+(const model_data &aData)
create a new instance that is a concatenation of two separate datas
model_data(const model_data &)=default
support copy semantics
const std::vector< index_value_type > & indexes() const
get list of indexes
model_data & operator=(model_data &&other)=default
support move semantics
size_t vertex_count() const
get number of verticies in the data
void sort_by_nearest_triangle(const graphics_vector3_type &aObserverWorldPosition, graphics_matrix4x4_type aEntityInstanceWorldMatrix, const std::string &aPositionAttributeName="a_Position")
model_data & operator=(const model_data &other)=default
support copy semantics
primitive_mode get_primitive_mode() const
get the primitive mode
void overwrite(const std::string &aAttributeName, const size_t vertexOffset, const model_data &other)
overwrite a section of a single attribute in the vertex data
static model_data make_quad()
creates model data for a unit sized quad with position and uv data
model_data(model_data &&)=default
support move semantics