21 #ifndef ABSTRACTGLCURVE_H 22 #define ABSTRACTGLCURVE_H 24 #include <tulip/OpenGlIncludes.h> 27 #include <tulip/GlSimpleEntity.h> 28 #include <tulip/Color.h> 32 class GlShaderProgram;
35 class TLP_GL_SCOPE AbstractGlCurve :
public GlSimpleEntity {
39 AbstractGlCurve(
const std::string &shaderProgramName,
const std::string &curveSpecificShaderCode);
41 AbstractGlCurve(
const std::string &shaderProgramName,
const std::string &curveSpecificShaderCode,
const std::vector<Coord> &controlPoints,
42 const Color &startColor,
const Color &endColor,
const float startSize,
const float endSize,
const unsigned int nbCurvePoints);
44 virtual ~AbstractGlCurve();
46 void draw(
float lod, Camera *camera);
48 void translate(
const Coord &move);
50 virtual void setTexture(
const std::string &texture) {
51 this->texture = texture;
54 virtual void setOutlined(
const bool outlined) {
55 this->outlined = outlined;
58 virtual void setOutlineColor(
const Color &outlineColor) {
59 this->outlineColor = outlineColor;
66 virtual void setOutlineColorInterpolation(
const bool outlineColorInterpolation) {
67 this->outlineColorInterpolation = outlineColorInterpolation;
73 void setLineCurve(
const bool lineCurve) {
74 this->lineCurve = lineCurve;
77 void setCurveLineWidth(
const float curveLineWidth) {
78 this->curveLineWidth = curveLineWidth;
81 void setCurveQuadBordersWidth(
const float curveQuadBorderWidth) {
82 this->curveQuadBordersWidth = curveQuadBorderWidth;
85 virtual void setBillboardCurve(
const bool billboardCurve) {
86 this->billboardCurve = billboardCurve;
89 virtual void setLookDir(
const Coord &lookDir) {
90 this->lookDir = lookDir;
93 void getXML(std::string &);
95 void setWithXML(
const std::string &,
unsigned int &);
97 virtual void drawCurve(std::vector<Coord> &controlPoints,
const Color &startColor,
const Color &endColor,
const float startSize,
const float endSize,
const unsigned int nbCurvePoints=100);
101 virtual void setCurveVertexShaderRenderingSpecificParameters() {}
103 virtual void cleanupAfterCurveVertexShaderRendering() {}
105 virtual Coord computeCurvePointOnCPU(
const std::vector<Coord> &controlPoints,
float t) = 0;
107 virtual void computeCurvePointsOnCPU(
const std::vector<Coord> &controlPoints, std::vector<Coord> &curvePoints,
unsigned int nbCurvePoints) = 0;
109 static void buildCurveVertexBuffers(
const unsigned int nbCurvePoints,
bool vboOk);
111 void initShader(
const std::string &shaderProgramName,
const std::string &curveSpecificShaderCode);
113 static std::map<unsigned int, GLfloat *> curveVertexBuffersData;
114 static std::map<unsigned int, std::vector<GLushort *> > curveVertexBuffersIndices;
115 static std::map<unsigned int, GLuint* > curveVertexBuffersObject;
116 static std::map<std::string, GlShaderProgram *> curvesShadersMap;
117 static std::map<std::string, GlShaderProgram *> curvesBillboardShadersMap;
118 static GlShader *curveVertexShaderNormalMain;
119 static GlShader *curveVertexShaderBillboardMain;
120 static GlShader *fisheyeDistortionVertexShader;
121 static GlShader *curveFragmentShader;
122 static bool canUseGeometryShader;
123 static std::map<std::string, std::pair<GlShaderProgram *, GlShaderProgram *> > curvesGeometryShadersMap;
124 static GlShader *curveVertexGeometryShaderNormalMain;
125 static std::map<std::string, std::pair<GlShaderProgram *, GlShaderProgram *> > curvesBillboardGeometryShadersMap;
127 std::string shaderProgramName;
128 GlShaderProgram *curveShaderProgramNormal;
129 GlShaderProgram *curveShaderProgramBillboard;
130 GlShaderProgram *curveShaderProgram;
133 std::vector<Coord> controlPoints;
138 unsigned int nbCurvePoints;
142 float texCoordFactor;
146 float curveLineWidth;
147 float curveQuadBordersWidth;
148 bool outlineColorInterpolation;