13 #ifndef OGLPLUS_SHAPES_ANALYZER_GRAPH_1308151449_HPP
14 #define OGLPLUS_SHAPES_ANALYZER_GRAPH_1308151449_HPP
16 #include <oglplus/config/basic.hpp>
24 class ShapeAnalyzerGraphData
27 template <
typename Index>
28 static std::vector<GLuint> _adapt(
const Index& index)
30 return std::vector<GLuint>(
36 static std::vector<GLuint>&& _adapt(std::vector<GLuint>&& index)
38 return static_cast<std::vector<GLuint>&&
>(index);
41 GLuint _guess_face_count(
void);
42 GLuint _guess_vertex_count(GLuint);
44 void _initialize(
void);
46 void _init_draw_arrays(
const DrawOperation& draw_op);
48 void _init_dr_ar_triangles(
const DrawOperation& draw_op);
49 void _init_dr_ar_triangle_strip(
const DrawOperation& draw_op);
50 void _init_dr_ar_triangle_fan(
const DrawOperation& draw_op);
52 void _init_draw_elements(
const DrawOperation& draw_op);
54 void _init_dr_el_triangles(
const DrawOperation& draw_op);
55 void _init_dr_el_triangle_strip(
const DrawOperation& draw_op);
56 void _init_dr_el_triangle_fan(
const DrawOperation& draw_op);
58 void _detect_adjacent(
void);
65 const std::vector<GLdouble>& vert_attr
67 bool _adjacent_faces(GLuint fa, GLuint ea, GLuint fb, GLuint eb);
68 bool _smooth_faces(GLuint fa, GLuint ea, GLuint fb, GLuint eb);
69 bool _contin_faces(GLuint fa, GLuint ea, GLuint fb, GLuint eb);
71 DrawingInstructions _instr;
72 std::vector<GLuint> _index;
75 std::vector<GLdouble> _main_va;
80 std::vector<GLdouble> _smooth_va;
85 std::vector<std::vector<GLdouble> > _other_vas;
87 std::vector<GLuint> _other_vpvs;
93 std::vector<GLuint> _face_index;
94 std::vector<GLuint> _face_phase;
96 std::vector<GLuint> _face_verts;
97 std::vector<GLuint> _face_adj_f;
98 std::vector<GLuint> _face_adj_e;
99 std::vector<GLuint> _face_edge_flags;
101 static const GLuint _flg_contin_edge = 0x0001;
102 static const GLuint _flg_smooth_edge = 0x0002;
103 static const GLuint _flg_strip_edge =
107 static const GLuint _flg_fan_edge =
112 static GLuint _face_arity(GLuint )
121 template <
typename ShapeBuilder>
122 ShapeAnalyzerGraphData(
const ShapeBuilder& builder)
123 : _instr(builder.Instructions())
124 , _index(_adapt(builder.Indices()))
126 , _main_vpv(builder.Positions(_main_va))
128 , _smooth_vpv(builder.Normals(_smooth_va))
134 static GLuint _nil_face(
void) {
return ~GLuint(0); }
140 #if !OGLPLUS_LINK_LIBRARY || defined(OGLPLUS_IMPLEMENTING_LIBRARY)
141 #include <oglplus/shapes/analyzer_data.ipp>
144 #endif // include guard
Implementation of shape draw instructions.
PrimitiveType
Primitive type enumeration.
Definition: primitive_type.hpp:29
ShapeDrawOperationMethod
Enumeration of drawing methods.
Definition: draw.hpp:86