#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
- // Viewer<ImageFonctionel, RayTracingProvider> rayTracing(true, true, 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