Ajout de l'ensemble du workspace.
[GPU.git] / WCudaMSE / API_Bilat_MultiCourbes_GL_Cuda / INC / GLMutliCourbes.h
diff --git a/WCudaMSE/API_Bilat_MultiCourbes_GL_Cuda/INC/GLMutliCourbes.h b/WCudaMSE/API_Bilat_MultiCourbes_GL_Cuda/INC/GLMutliCourbes.h
new file mode 100755 (executable)
index 0000000..5b513a7
--- /dev/null
@@ -0,0 +1,171 @@
+#ifndef GL_MUTLI_COURBES_H_\r
+#define GL_MUTLI_COURBES_H_\r
+\r
+#include "envBilatMultiCourbes.h"\r
+#include "MultiCourbeOptions.h"\r
+#include "MultiCourbesMOO_A.h"\r
+#include "Displayable_A.h"\r
+#include "bilat_GL.h"\r
+#include "VertexBufferObject.h"\r
+#include "ShaderLoaders.h"\r
+#include <atomic>\r
+//#include <boost/atomic.hpp>\r
+\r
+#include "cuda.h"\r
+#include "cuda_gl_interop.h" //link between GL and Cuda\r\r
+\r
+using std::atomic;\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |*                    Declaration                                     *|\r
+ \*---------------------------------------------------------------------*/\r
+\r
+/*--------------------------------------*\\r
+ |*            Public                  *|\r
+ \*-------------------------------------*/\r
+\r
+/**\r
+\r
+ *\r
+ */\r
+\r
+/**\r
+ * Inputs :\r
+ *\r
+ *     n nb Courbes\r
+ *     m nbPoints par courbes\r
+ *\r
+ *     shaderPath la racine contenant les shader suivants :\r
+ *\r
+ *             lib/ColorieurCarteHSB.glsl\r
+ *             lib/ColorieurHSB.glsl\r
+ *             multiCourbeHSBFragmentShader.glsl\r
+ *             multiCourbeHSBFragmentShader.glsl\r
+ */\r
+class CBI_MULTI_COURBES GLMutliCourbes: public Displayable_A\r
+    {\r
+       /*--------------------------------------*\\r
+        |*             Constructor             *|\r
+        \*-------------------------------------*/\r
+\r
+    public:\r
+\r
+       /**\r
+        * Inputs :\r
+        *\r
+        *      shaderPath la racine contenant les shader suivants :\r
+        *\r
+        *              lib/ColorieurCarteHSB.glsl\r
+        *              lib/ColorieurHSB.glsl\r
+        *              multiCourbeHSBFragmentShader.glsl\r
+        *              multiCourbeHSBFragmentShader.glsl\r
+        *\r
+        *  Algorithme coloration:\r
+        *\r
+        *      (A1) les courbes sont colorier en HSB, en fonction de y\r
+        *      (A2) Si y est a l'interieur du sueil [sMin.sMax], la couleur utilisee sera la couleur "anatomique"\r
+        *      (A3) minMax permet de calibrer le hue, ie de definier a quelle intensite y associer le hueMin et le hueMax\r
+        *\r
+        *  Options:\r
+        *\r
+        *      intervalHue01\r
+        *\r
+        *              Permet de sp�cifier [hMin,hMax]\r
+        *\r
+        *      seuil\r
+        *\r
+        *              Permet de sp�cifier [sMin,sMax] (cf ci-dessus)\r
+        *\r
+        *      colorAnatomique\r
+        *\r
+        *              Couleur RGBA qui sera afficher si y se trouve � l'interieur du seuil.\r
+        *\r
+        *      minMax\r
+        *\r
+        *              Permet de specifier [vMin,vMax], de telle sorte que vMin soit colorier avec hMin, et vMax avec hMax\r
+        *              Il s'agit d'une calibration.\r
+        */\r
+       GLMutliCourbes(MultiCourbesMOO_A* ptrMultiCourbeMOO, string shaderPath);\r
+\r
+       /*--------------------------------------*\\r
+        |*             Destructor              *|\r
+        \*-------------------------------------*/\r
+\r
+    public:\r
+\r
+       virtual ~GLMutliCourbes();\r
+\r
+       /*--------------------------------------*\\r
+        |*             Methodes                *|\r
+        \*-------------------------------------*/\r
+\r
+    public:\r
+\r
+       /**\r
+        * Override\r
+        */\r
+       virtual void init(Panel_A &panel);\r
+\r
+       /**\r
+        * Override\r
+        */\r
+       virtual void reshape(Panel_A &panel, int w, int h);\r
+\r
+       /**\r
+        * Override\r
+        */\r
+       virtual void display(Panel_A &panel);\r
+\r
+       /**\r
+        * Override\r
+        */\r
+       virtual void release(Panel_A &panel);\r
+\r
+       /**\r
+        * On next repaint, fillVBOValues will be called.\r
+        */\r
+       void update();\r
+\r
+       /*--------------------------------------*\\r
+        |*             Get                     *|\r
+        \*-------------------------------------*/\r
+\r
+       MultiCourbesMOO_A* getMultiCoursbeMOO() const;\r
+\r
+       /*--------------------------------------*\\r
+       |*              Attributs               *|\r
+        \*--------------------------------------*/\r
+\r
+    private:\r
+\r
+       void loadShader();\r
+       void createVBOs();\r
+       void initInterop();\r
+       void drawMultiCourbes(Panel_A &panel);\r
+       void updateGL(Panel_A &panel);\r
+\r
+    private:\r
+\r
+       // Inputs\r
+       MultiCourbesMOO_A* ptrMultiCourbeMOO;\r
+       string shaderPath;\r
+\r
+       // OpenGL\r
+       VertexBufferObject* ptrVBOVertices;\r
+       VertexBufferObject* ptrVBOValues;\r
+       ShaderPrograms* ptrShaderProgram;\r
+\r
+       //Cuda GL Interop\r
+       cudaGraphicsResource* cudaRessource;\r
+       cudaStream_t streamToSynchronize;\r
+\r
+       // Tools\r
+       std::atomic<bool> isNeedUpdate;\r
+       bool isInit;\r
+    };\r
+\r
+#endif \r
+\r
+/*----------------------------------------------------------------------*\\r
+ |*                    End                                             *|\r
+ \*---------------------------------------------------------------------*/\r