Ajout de l'ensemble du workspace.
[GPU.git] / WCudaMSE / API_Bilat_MultiCourbes_GL_Cuda / INC / GLMutliCourbes.h
1 #ifndef GL_MUTLI_COURBES_H_
2 #define GL_MUTLI_COURBES_H_
3
4 #include "envBilatMultiCourbes.h"
5 #include "MultiCourbeOptions.h"
6 #include "MultiCourbesMOO_A.h"
7 #include "Displayable_A.h"
8 #include "bilat_GL.h"
9 #include "VertexBufferObject.h"
10 #include "ShaderLoaders.h"
11 #include <atomic>
12 //#include <boost/atomic.hpp>
13
14 #include "cuda.h"
15 #include "cuda_gl_interop.h" //link between GL and Cuda
16
17 using std::atomic;
18
19 /*----------------------------------------------------------------------*\
20 |* Declaration *|
21 \*---------------------------------------------------------------------*/
22
23 /*--------------------------------------*\
24 |* Public *|
25 \*-------------------------------------*/
26
27 /**
28
29 *
30 */
31
32 /**
33 * Inputs :
34 *
35 * n nb Courbes
36 * m nbPoints par courbes
37 *
38 * shaderPath la racine contenant les shader suivants :
39 *
40 * lib/ColorieurCarteHSB.glsl
41 * lib/ColorieurHSB.glsl
42 * multiCourbeHSBFragmentShader.glsl
43 * multiCourbeHSBFragmentShader.glsl
44 */
45 class CBI_MULTI_COURBES GLMutliCourbes: public Displayable_A
46 {
47 /*--------------------------------------*\
48 |* Constructor *|
49 \*-------------------------------------*/
50
51 public:
52
53 /**
54 * Inputs :
55 *
56 * shaderPath la racine contenant les shader suivants :
57 *
58 * lib/ColorieurCarteHSB.glsl
59 * lib/ColorieurHSB.glsl
60 * multiCourbeHSBFragmentShader.glsl
61 * multiCourbeHSBFragmentShader.glsl
62 *
63 * Algorithme coloration:
64 *
65 * (A1) les courbes sont colorier en HSB, en fonction de y
66 * (A2) Si y est a l'interieur du sueil [sMin.sMax], la couleur utilisee sera la couleur "anatomique"
67 * (A3) minMax permet de calibrer le hue, ie de definier a quelle intensite y associer le hueMin et le hueMax
68 *
69 * Options:
70 *
71 * intervalHue01
72 *
73 * Permet de sp�cifier [hMin,hMax]
74 *
75 * seuil
76 *
77 * Permet de sp�cifier [sMin,sMax] (cf ci-dessus)
78 *
79 * colorAnatomique
80 *
81 * Couleur RGBA qui sera afficher si y se trouve � l'interieur du seuil.
82 *
83 * minMax
84 *
85 * Permet de specifier [vMin,vMax], de telle sorte que vMin soit colorier avec hMin, et vMax avec hMax
86 * Il s'agit d'une calibration.
87 */
88 GLMutliCourbes(MultiCourbesMOO_A* ptrMultiCourbeMOO, string shaderPath);
89
90 /*--------------------------------------*\
91 |* Destructor *|
92 \*-------------------------------------*/
93
94 public:
95
96 virtual ~GLMutliCourbes();
97
98 /*--------------------------------------*\
99 |* Methodes *|
100 \*-------------------------------------*/
101
102 public:
103
104 /**
105 * Override
106 */
107 virtual void init(Panel_A &panel);
108
109 /**
110 * Override
111 */
112 virtual void reshape(Panel_A &panel, int w, int h);
113
114 /**
115 * Override
116 */
117 virtual void display(Panel_A &panel);
118
119 /**
120 * Override
121 */
122 virtual void release(Panel_A &panel);
123
124 /**
125 * On next repaint, fillVBOValues will be called.
126 */
127 void update();
128
129 /*--------------------------------------*\
130 |* Get *|
131 \*-------------------------------------*/
132
133 MultiCourbesMOO_A* getMultiCoursbeMOO() const;
134
135 /*--------------------------------------*\
136 |* Attributs *|
137 \*--------------------------------------*/
138
139 private:
140
141 void loadShader();
142 void createVBOs();
143 void initInterop();
144 void drawMultiCourbes(Panel_A &panel);
145 void updateGL(Panel_A &panel);
146
147 private:
148
149 // Inputs
150 MultiCourbesMOO_A* ptrMultiCourbeMOO;
151 string shaderPath;
152
153 // OpenGL
154 VertexBufferObject* ptrVBOVertices;
155 VertexBufferObject* ptrVBOValues;
156 ShaderPrograms* ptrShaderProgram;
157
158 //Cuda GL Interop
159 cudaGraphicsResource* cudaRessource;
160 cudaStream_t streamToSynchronize;
161
162 // Tools
163 std::atomic<bool> isNeedUpdate;
164 bool isInit;
165 };
166
167 #endif
168
169 /*----------------------------------------------------------------------*\
170 |* End *|
171 \*---------------------------------------------------------------------*/