21 #ifndef Tulip_GLVERTEXARRAYMANAGER_H
22 #define Tulip_GLVERTEXARRAYMANAGER_H
28 #if defined(__APPLE__)
29 #include <OpenGL/gl.h>
30 #include <OpenGL/glu.h>
36 #include <tulip/Coord.h>
37 #include <tulip/Color.h>
38 #include <tulip/Observable.h>
39 #include <tulip/tuliphash.h>
48 class GlGraphInputData;
49 class PropertyInterface;
53 class IntegerProperty;
60 class TLP_GL_SCOPE GlVertexArrayManager :
private Observable {
68 GlVertexArrayManager(GlGraphInputData *inputData);
70 ~GlVertexArrayManager();
75 void setInputData(GlGraphInputData *inputData);
80 inline bool renderingIsBegin() {
92 void setHaveToComputeAll(
bool compute);
96 void setHaveToComputeLayout(
bool compute);
100 void setHaveToComputeColor(
bool compute);
106 void beginRendering();
116 void addEdge(GlEdge *edge);
120 void addNode(GlNode *node);
126 void pauseRendering(
bool pause);
131 void activate(
bool act);
140 void activateLineEdgeDisplay(GlEdge *edge,
bool selected);
144 void activateQuadEdgeDisplay(GlEdge *edge,
bool selected);
148 void activatePointEdgeDisplay(GlEdge *edge,
bool selected);
152 void activatePointNodeDisplay(GlNode *node,
bool selected);
157 void treatEvent(
const Event&);
159 void clearLayoutData();
160 void clearColorData();
162 void initObservers();
163 void clearObservers(PropertyInterface *deletedProperty=NULL);
165 GlGraphInputData *inputData;
168 LayoutProperty* layoutProperty;
169 SizeProperty* sizeProperty;
170 IntegerProperty* shapeProperty;
171 DoubleProperty* rotationProperty;
172 ColorProperty* colorProperty;
173 ColorProperty* borderColorProperty;
174 DoubleProperty* borderWidthProperty;
175 IntegerProperty *srcAnchorShapeProperty;
176 IntegerProperty *tgtAnchorShapeProperty;
177 SizeProperty *srcAnchorSizeProperty;
178 SizeProperty *tgtAnchorSizeProperty;
179 bool graphObserverActivated;
180 bool layoutObserverActivated;
181 bool colorObserverActivated;
186 bool toComputeLayout;
189 bool vectorLayoutSizeInit;
190 bool vectorColorSizeInit;
191 bool vectorIndexSizeInit;
194 bool colorInterpolate;
195 bool sizeInterpolate;
199 std::vector<Coord> linesCoordsArray;
200 std::vector<Color> linesColorsArray;
201 std::vector<GLint> linesIndexArray;
202 std::vector<GLsizei> linesIndexCountArray;
204 std::vector<GLuint> linesRenderingIndicesArray;
205 std::vector<GLuint> linesSelectedRenderingIndicesArray;
207 std::vector<Coord> quadsCoordsArray;
208 std::vector<Color> quadsColorsArray;
209 std::vector<Color> quadsOutlineColorsArray;
210 std::vector<GLuint> quadsIndexArray;
211 std::vector<GLsizei> quadsIndexCountArray;
212 std::vector<std::vector<GLuint> > quadsBottomOutlineIndexArray;
213 std::vector<std::vector<GLuint> > quadsTopOutlineIndexArray;
215 std::vector<GLuint> quadsRenderingIndicesArray;
216 std::vector<GLuint> quadsSelectedRenderingIndicesArray;
218 std::map<float, std::vector<GLuint> > quadsOutlineRenderingIndicesArray;
219 std::map<float, std::vector<GLuint> > quadsSelectedOutlineRenderingIndicesArray;
221 std::vector<Coord> pointsCoordsArray;
222 std::vector<Color> pointsColorsArray;
224 std::vector<GLuint> pointsNodesRenderingIndexArray;
225 std::vector<GLuint> pointsNodesSelectedRenderingIndexArray;
226 std::vector<GLuint> pointsEdgesRenderingIndexArray;
227 std::vector<GLuint> pointsEdgesSelectedRenderingIndexArray;
229 TLP_HASH_MAP<unsigned int, std::pair<unsigned int,unsigned int> > edgeToLineIndexVector;
230 TLP_HASH_MAP<unsigned int, std::pair<unsigned int,unsigned int> > edgeToQuadIndexVector;
231 TLP_HASH_MAP<unsigned int, unsigned int> edgeToBottomOulineIndexVector;
232 TLP_HASH_MAP<unsigned int, unsigned int> edgeToTopOutlineIndexVector;
233 TLP_HASH_MAP<unsigned int, unsigned int> edgeToPointIndexVector;
234 TLP_HASH_MAP<unsigned int, unsigned int> nodeToPointIndexVector;
236 GLuint pointsVerticesVBO;
237 GLuint pointsColorsVBO;
238 GLuint linesVerticesVBO;
239 GLuint linesColorsVBO;
240 GLuint quadsVerticesVBO;
241 GLuint quadsColorsVBO;
242 GLuint quadsOutlineColorsVBO;
244 bool pointsVerticesUploaded;
245 bool pointsColorsUploaded;
246 bool linesVerticesUploaded;
247 bool linesColorsUploaded;
248 bool quadsVerticesUploaded;
249 bool quadsColorsUploaded;
250 bool quadsOutlineColorsUploaded;
252 bool verticesUploadNeeded;
253 bool colorsUploadNeeded;