3#ifndef GDK_GFX_VERTEX_DATA_H
4#define GDK_GFX_VERTEX_DATA_H
6#include <gdk/attribute_data.h>
7#include <gdk/graphics_types.h>
15#include <unordered_map>
24 using attribute_collection_type = std::unordered_map<std::string, attribute_data>;
25 using index_value_type =
unsigned short;
27 enum class primitive_mode {
35 const std::vector<index_value_type> &
indexes()
const;
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});
54 void transform(
const std::string &aPositionAttributeName, graphics_matrix4x4_type &aTransform);
58 const graphics_vector2_type &aPos,
59 const float aRotation = 0,
60 const graphics_vector2_type &aSca = {1});
66 const graphics_vector3_type &aObserverWorldPosition,
67 graphics_matrix4x4_type aEntityInstanceWorldMatrix,
68 const std::string &aPositionAttributeName =
"a_Position");
73 const graphics_vector3_type &aObserverWorldPosition,
74 graphics_matrix4x4_type aEntityInstanceWorldMatrix,
75 const std::string &aPositionAttributeName =
"a_Position");
89 void overwrite(
const std::string &aAttributeName,
const size_t vertexOffset,
const model_data &other);
114 model_data(attribute_collection_type &&aAttributeData);
122 size_t m_VertexCount{};
123 attribute_collection_type m_Attributes{};
124 primitive_mode m_PrimitiveMode = primitive_mode::triangles;
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