Implémentation du raytracing pour Global Memory/Shared Memory/Constant Memory
[GPU.git] / WCudaMSE / Student_Cuda_Image / src / cpp / core / mainGL.cpp
index 6eed6e3..13dd2db 100755 (executable)
@@ -13,37 +13,54 @@ using namespace std;
 #include "FractalProvider.h"\r
 #include "NewtonProvider.h"\r
 #include "HeatTransfertProvider.h"\r
+#include "RayTracingProvider.h"\r
+#include "ConvolutionProvider.h"\r
 \r
-template <class TOutput, class TProvider>\r
-class Viewer\r
-    {\r
-    private:\r
-        TOutput* ptrProvider;\r
-        GLUTImageViewers viewer;\r
-\r
-    public:\r
-        Viewer(bool isAnimation, bool isSelection, int pxFrame, int pyFrame):\r
-            ptrProvider(TProvider::createGL()),\r
-            viewer(ptrProvider, isAnimation, isSelection, pxFrame, pyFrame)\r
-            {\r
-            }\r
-\r
-        ~Viewer()\r
-            {\r
-            delete this->ptrProvider;\r
-            }\r
-    };\r
-\r
-int mainGL(void)\r
+#include "Viewer.h"\r
+\r
+int mainGL(const vector<string>& args)\r
     {\r
-    //Viewer<Rippling0Image, Rippling0Provider> rippling0(true, true, 10, 10);\r
-    //Viewer<Image, RipplingProvider> rippling0(true, true, 10, 10);\r
-    //Viewer<ImageFonctionel, MandelbrotProvider> fractalMandelbrot(true, true, 20, 20);\r
-    //Viewer<ImageFonctionel, JuliaProvider> fractalJulia(true, true, 30, 30);\r
-    //Viewer<ImageFonctionel, NewtonProvider> newtown(true, true, 20, 20);\r
-    Viewer<Image, HeatTransfertProvider> heatTransfert(true, false, 20, 20);\r
-\r
-    GLUTImageViewers::runALL(); // Bloquant, Tant qu'une fenetre est ouverte\r
+    const string defaultCommand = "raytracing";\r
+    const string command = args.size() > 0 ? args[0] : defaultCommand;\r
+\r
+    // AutoViewer<Rippling0Image, Rippling0Provider> rippling0(true, true, 10, 10); // Warmup.\r
+\r
+    if (command == "rippling")\r
+        {\r
+        AutoViewer<Image, RipplingProvider> rippling(true, true, 10, 10);\r
+        }\r
+    else if (command == "mandelbrot")\r
+        {\r
+        const bool multiGPU = args.size() >= 2 && args[1] == "--mp";\r
+        Viewer<ImageFonctionel> fractalMandelbrot(MandelbrotProvider::createGL(multiGPU), true, true, 10, 10);\r
+        }\r
+    else if (command == "julia")\r
+        AutoViewer<ImageFonctionel, JuliaProvider> fractalJulia(true, true, 10, 10);\r
+    else if (command == "newton")\r
+        AutoViewer<ImageFonctionel, NewtonProvider> newtown(true, true, 10, 10);\r
+    else if (command == "heat-transfert")\r
+        AutoViewer<Image, HeatTransfertProvider> heatTransfert(true, false, 10, 10);\r
+    else if (command == "raytracing")\r
+        AutoViewer<Image, RayTracingProvider> rayTracing(true, true, 20, 20);\r
+    else if (command == "convolution")\r
+        {\r
+        const string videoPath = args.size() >= 2 ? args[1] : "/media/Data/Video/nasaFHD_short.avi"; // Vidéo par défaut si pas donnée en paramètre.\r
+        Viewer<Image> convolution(ConvolutionProvider::createGL(videoPath), true, true, 10, 10);\r
+        }\r
+    else if (command == "demo")\r
+        {\r
+        Viewer<Image> convolution(ConvolutionProvider::createGL("/media/Data/Video/nasaFHD_short.avi"), true, true, 10, 10, false);\r
+        AutoViewer<Image, RipplingProvider> rippling(true, true, 60, 30, false);\r
+        Viewer<ImageFonctionel> fractalMandelbrot(MandelbrotProvider::createGL(false), true, true, 120, 60, false);\r
+        AutoViewer<ImageFonctionel, JuliaProvider> fractalJulia(true, true, 180, 80, false);\r
+        AutoViewer<ImageFonctionel, NewtonProvider> newtown(true, true, 260, 120, false);\r
+        AutoViewer<Image, HeatTransfertProvider> heatTransfert(true, false, 1200, 300, false);\r
+        GLUTImageViewers::runALL();\r
+        }\r
+    else\r
+        {\r
+        cout << "Command unknown: " << command << endl;\r
+        }\r
 \r
     return EXIT_SUCCESS;\r
     }\r