78bede7bd2d4b6046b310721b045363cad2f9cb8
[occt.git] / src / OpenGl / OpenGl_TriangleStrip.hxx
1 // File:      OpenGl_TriangleStrip.hxx
2 // Created:   13 July 2011
3 // Author:    Sergey ZERCHANINOV
4 // Copyright: OPEN CASCADE 2011
5
6 #ifndef OpenGl_TriangleStrip_Header
7 #define OpenGl_TriangleStrip_Header
8
9 #include <InterfaceGraphic_telem.hxx>
10 #include <Graphic3d_Array1OfVertex.hxx>
11 #include <Graphic3d_Array1OfVertexN.hxx>
12 #include <Graphic3d_Array1OfVertexNT.hxx>
13 #include <Aspect_InteriorStyle.hxx>
14
15 #include <OpenGl_Element.hxx>
16
17 struct TEL_TMESH_DATA
18 {
19   Tint       num_facets; /* Number of facets */
20   Tint       facet_flag; /* TEL_FA_NONE or TEL_FA_NORMAL */
21   Tint       vertex_flag;/* TEL_VT_NONE or TEL_VT_NORMAL */
22   tel_point  fnormals;   /* length = num_facets */
23   tel_colour fcolours;   /* length = num_facets */
24   tel_point  vertices;   /* length = num_facets + 2 */
25   tel_colour vcolours;   /* length = num_facets + 2 */
26   tel_point  vnormals;   /* length = num_facets + 2 */
27   tel_texture_coord vtexturecoord; /* Texture coordinates */
28   IMPLEMENT_MEMORY_OPERATORS
29 };
30
31 class OpenGl_TriangleStrip : public OpenGl_Element
32 {
33  public:
34
35   OpenGl_TriangleStrip (const Graphic3d_Array1OfVertex& AListVertex);
36   OpenGl_TriangleStrip (const Graphic3d_Array1OfVertexN& AListVertex);
37   OpenGl_TriangleStrip (const Graphic3d_Array1OfVertexNT& AListVertex);
38   virtual ~OpenGl_TriangleStrip ();
39
40   virtual void Render (const Handle(OpenGl_Workspace) &AWorkspace) const;
41
42  protected:
43
44   void Init (const Tint ANbFacets, tel_point AVertices,
45              tel_point AVNormals, tel_colour AVColors, tel_texture_coord ATCoords,
46              tel_point AFNormals, tel_colour AFColors);
47
48   void draw_tmesh (const Tint,          /* front_lighting_model, */
49                    const Aspect_InteriorStyle, /* interior_style */
50                    const TEL_COLOUR *, /* edge_colour */
51                    const Handle(OpenGl_Workspace) &) const;
52
53   void draw_edges (const TEL_COLOUR *, const Aspect_InteriorStyle, Tint, const Handle(OpenGl_Workspace) &) const;
54
55   void draw_line_loop () const;
56
57   TEL_TMESH_DATA myData;
58   DS_INTERNAL *myDS;
59
60  public:
61   IMPLEMENT_MEMORY_OPERATORS
62 };
63
64 #endif //OpenGl_TriangleStrip_Header