Commit | Line | Data |
---|---|---|
b311480e | 1 | // Created on: 2011-07-13 |
2 | // Created by: Sergey ZERCHANINOV | |
973c2be1 | 3 | // Copyright (c) 2011-2014 OPEN CASCADE SAS |
b311480e | 4 | // |
973c2be1 | 5 | // This file is part of Open CASCADE Technology software library. |
b311480e | 6 | // |
d5f74e42 | 7 | // This library is free software; you can redistribute it and/or modify it under |
8 | // the terms of the GNU Lesser General Public License version 2.1 as published | |
973c2be1 | 9 | // by the Free Software Foundation, with special exception defined in the file |
10 | // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT | |
11 | // distribution for complete text of the license and disclaimer of any warranty. | |
b311480e | 12 | // |
973c2be1 | 13 | // Alternatively, this file may be used under the terms of Open CASCADE |
14 | // commercial license or contractual agreement. | |
b311480e | 15 | |
2166f0fa SK |
16 | #ifndef OpenGl_PrimitiveArray_Header |
17 | #define OpenGl_PrimitiveArray_Header | |
18 | ||
871fa103 | 19 | #include <OpenGl_IndexBuffer.hxx> |
2166f0fa | 20 | |
bf75be98 | 21 | #include <InterfaceGraphic_Graphic3d.hxx> |
2166f0fa | 22 | #include <Aspect_InteriorStyle.hxx> |
a577aaab | 23 | #include <Aspect_TypeOfMarker.hxx> |
871fa103 | 24 | #include <Graphic3d_TypeOfPrimitiveArray.hxx> |
25 | #include <Graphic3d_IndexBuffer.hxx> | |
26 | #include <Graphic3d_BoundBuffer.hxx> | |
2166f0fa SK |
27 | |
28 | #include <OpenGl_Element.hxx> | |
29 | ||
8d3f219f | 30 | class OpenGl_GraphicDriver; |
7d3e64ef | 31 | class Handle(OpenGl_ShaderProgram); |
8d3f219f | 32 | |
7d3e64ef | 33 | //! Class for rendering of arbitrary primitive array. |
2166f0fa SK |
34 | class OpenGl_PrimitiveArray : public OpenGl_Element |
35 | { | |
36 | public: | |
871fa103 | 37 | // OpenGL does not provide a constant for "none" draw mode. |
1d03e66d | 38 | // So we define our own one that does not conflict with GL constants |
871fa103 | 39 | // and utilizes common GL invalid value |
1d03e66d | 40 | enum |
41 | { | |
42 | DRAW_MODE_NONE = -1 | |
43 | }; | |
2166f0fa SK |
44 | |
45 | //! Default constructor | |
8d3f219f | 46 | OpenGl_PrimitiveArray (const OpenGl_GraphicDriver* theDriver, |
47 | const Graphic3d_TypeOfPrimitiveArray theType, | |
871fa103 | 48 | const Handle(Graphic3d_IndexBuffer)& theIndices, |
49 | const Handle(Graphic3d_Buffer)& theAttribs, | |
50 | const Handle(Graphic3d_BoundBuffer)& theBounds); | |
2166f0fa | 51 | |
2166f0fa | 52 | //! Render primitives to the window |
5e27df78 | 53 | virtual void Render (const Handle(OpenGl_Workspace)& theWorkspace) const; |
54 | ||
10b9c7df | 55 | virtual void Release (OpenGl_Context* theContext); |
2166f0fa | 56 | |
871fa103 | 57 | //! @return primitive type (GL_LINES, GL_TRIANGLES and others) |
58 | GLint DrawMode() const { return myDrawMode; } | |
2166f0fa | 59 | |
871fa103 | 60 | //! @return indices array |
61 | const Handle(Graphic3d_IndexBuffer)& Indices() const { return myIndices; } | |
2166f0fa | 62 | |
871fa103 | 63 | //! @return attributes array |
64 | const Handle(Graphic3d_Buffer)& Attributes() const { return myAttribs; } | |
65 | ||
66 | //! @return bounds array | |
67 | const Handle(Graphic3d_BoundBuffer)& Bounds() const { return myBounds; } | |
68 | ||
8d3f219f | 69 | //! Returns unique ID of primitive array. |
70 | const Standard_Size GetUID() const { return myUID; } | |
71 | ||
871fa103 | 72 | private: |
5e27df78 | 73 | |
7d3e64ef | 74 | //! Initialize normal (OpenGL-provided) VBO |
75 | Standard_Boolean initNormalVbo (const Handle(OpenGl_Context)& theCtx) const; | |
76 | ||
2166f0fa | 77 | //! VBO initialization procedures |
7d3e64ef | 78 | //! @param theCtx bound GL context |
79 | //! @param theToKeepData when true, myAttribs will not be nullified after VBO creation | |
80 | Standard_Boolean buildVBO (const Handle(OpenGl_Context)& theCtx, | |
81 | const Standard_Boolean theToKeepData) const; | |
5e27df78 | 82 | void clearMemoryGL (const Handle(OpenGl_Context)& theGlCtx) const; |
2166f0fa SK |
83 | |
84 | //! Main procedure to draw array | |
7d3e64ef | 85 | void drawArray (const Handle(OpenGl_Workspace)& theWorkspace, |
86 | const Graphic3d_Vec4* theFaceColors) const; | |
2166f0fa SK |
87 | |
88 | //! Auxiliary procedures | |
7d3e64ef | 89 | void drawEdges (const TEL_COLOUR* theEdgeColour, |
2166f0fa SK |
90 | const Handle(OpenGl_Workspace)& theWorkspace) const; |
91 | ||
7d3e64ef | 92 | void drawMarkers (const Handle(OpenGl_Workspace)& theWorkspace) const; |
a577aaab | 93 | |
2166f0fa SK |
94 | protected: |
95 | ||
5e27df78 | 96 | //! Destructor |
97 | virtual ~OpenGl_PrimitiveArray(); | |
98 | ||
99 | protected: | |
100 | ||
7d3e64ef | 101 | mutable Handle(OpenGl_VertexBuffer) myVboIndices; |
871fa103 | 102 | mutable Handle(OpenGl_VertexBuffer) myVboAttribs; |
103 | ||
104 | mutable Handle(Graphic3d_IndexBuffer) myIndices; | |
105 | mutable Handle(Graphic3d_Buffer) myAttribs; | |
106 | mutable Handle(Graphic3d_BoundBuffer) myBounds; | |
107 | GLint myDrawMode; | |
108 | mutable Standard_Boolean myIsVboInit; | |
2166f0fa | 109 | |
8d3f219f | 110 | Standard_Size myUID; //!< Unique ID of primitive array. |
111 | ||
2166f0fa SK |
112 | public: |
113 | ||
1c35b92f | 114 | DEFINE_STANDARD_ALLOC |
2166f0fa SK |
115 | |
116 | }; | |
117 | ||
118 | #endif //OpenGl_PrimitiveArray_Header |