21 #ifndef ABSTRACTGLCURVE_H
22 #define ABSTRACTGLCURVE_H
28 #if defined(__APPLE__)
29 #include <OpenGL/gl.h>
30 #include <OpenGL/glu.h>
40 #include <tulip/GlSimpleEntity.h>
41 #include <tulip/Color.h>
45 class GlShaderProgram;
48 class TLP_GL_SCOPE AbstractGlCurve :
public GlSimpleEntity {
52 AbstractGlCurve(
const std::string &shaderProgramName,
const std::string &curveSpecificShaderCode);
54 AbstractGlCurve(
const std::string &shaderProgramName,
const std::string &curveSpecificShaderCode,
const std::vector<Coord> &controlPoints,
55 const Color &startColor,
const Color &endColor,
const float startSize,
const float endSize,
const unsigned int nbCurvePoints);
57 virtual ~AbstractGlCurve();
59 void draw(
float lod, Camera *camera);
61 void translate(
const Coord &move);
63 virtual void setTexture(
const std::string &texture) {
64 this->texture = texture;
67 virtual void setOutlined(
const bool outlined) {
68 this->outlined = outlined;
71 virtual void setOutlineColor(
const Color &outlineColor) {
72 this->outlineColor = outlineColor;
79 virtual void setOutlineColorInterpolation(
const bool outlineColorInterpolation) {
80 this->outlineColorInterpolation = outlineColorInterpolation;
86 void setLineCurve(
const bool lineCurve) {
87 this->lineCurve = lineCurve;
90 void setCurveLineWidth(
const float curveLineWidth) {
91 this->curveLineWidth = curveLineWidth;
94 void setCurveQuadBordersWidth(
const float curveQuadBorderWidth) {
95 this->curveQuadBordersWidth = curveQuadBorderWidth;
98 virtual void setBillboardCurve(
const bool billboardCurve) {
99 this->billboardCurve = billboardCurve;
102 virtual void setLookDir(
const Coord &lookDir) {
103 this->lookDir = lookDir;
106 void getXML(std::string &);
108 void setWithXML(
const std::string &,
unsigned int &);
110 virtual void drawCurve(std::vector<Coord> &controlPoints,
const Color &startColor,
const Color &endColor,
const float startSize,
const float endSize,
const unsigned int nbCurvePoints=100);
114 virtual void setCurveVertexShaderRenderingSpecificParameters() {}
116 virtual void cleanupAfterCurveVertexShaderRendering() {}
118 virtual Coord computeCurvePointOnCPU(
const std::vector<Coord> &controlPoints,
float t) = 0;
120 virtual void computeCurvePointsOnCPU(
const std::vector<Coord> &controlPoints, std::vector<Coord> &curvePoints,
unsigned int nbCurvePoints) = 0;
122 static void buildCurveVertexBuffers(
const unsigned int nbCurvePoints,
bool vboOk);
124 void initShader(
const std::string &shaderProgramName,
const std::string &curveSpecificShaderCode);
126 static std::map<unsigned int, GLfloat *> curveVertexBuffersData;
127 static std::map<unsigned int, std::vector<GLushort *> > curveVertexBuffersIndices;
128 static std::map<unsigned int, GLuint* > curveVertexBuffersObject;
129 static std::map<std::string, GlShaderProgram *> curvesShadersMap;
130 static std::map<std::string, GlShaderProgram *> curvesBillboardShadersMap;
131 static GlShader *curveVertexShaderNormalMain;
132 static GlShader *curveVertexShaderBillboardMain;
133 static GlShader *fisheyeDistortionVertexShader;
134 static bool canUseGeometryShader;
135 static std::map<std::string, std::pair<GlShaderProgram *, GlShaderProgram *> > curvesGeometryShadersMap;
136 static GlShader *curveVertexGeometryShaderNormalMain;
137 static std::map<std::string, std::pair<GlShaderProgram *, GlShaderProgram *> > curvesBillboardGeometryShadersMap;
139 std::string shaderProgramName;
140 GlShaderProgram *curveShaderProgramNormal;
141 GlShaderProgram *curveShaderProgramBillboard;
142 GlShaderProgram *curveShaderProgram;
145 std::vector<Coord> controlPoints;
150 unsigned int nbCurvePoints;
154 float texCoordFactor;
158 float curveLineWidth;
159 float curveQuadBordersWidth;
160 bool outlineColorInterpolation;