e9299a0d7b6d21aa815afaab1a0117c2a7dec37c
[GPU.git] / Fractal.h
1 #ifndef FRACTAL_H_
2 #define FRACTAL_H_
3
4 #include <vector>
5 #include <string>
6
7 #include "cudaTools.h"
8 #include "AnimableFonctionel_I.h"
9 #include "MathTools.h"
10 #include "VariateurI.h"
11 #include "VariateurF.h"
12
13 class Fractal : public AnimableFonctionel_I
14 {
15 public:
16 Fractal(int w, int h);
17 virtual ~Fractal();
18
19 public:
20 int getW() /*override*/;
21 int getH() /*override*/;
22 DomaineMath* getDomaineMathInit() /*override*/;
23
24 protected:
25 // Inputs
26 const int w;
27 const int h;
28
29 // Tools
30 const dim3 dg;
31 const dim3 db;
32
33 DomaineMath* ptrDomaineMathInit;
34 };
35
36 class FractalMandelbrot : public Fractal
37 {
38 public:
39 FractalMandelbrot(int w, int h, int dn, bool multiGPU = false);
40 ~FractalMandelbrot();
41 void animationStep();
42
43 std::vector<std::string> getNames();
44 void getValues(float* values);
45
46 std::string getTitle();
47
48 private:
49 void runGPU(uchar4* ptrDevPixels, const DomaineMath& domaineMath);
50
51 VariateurI variateurAnimationN;
52 int n;
53
54 string title;
55
56 // Utilisé uniquement dans le cadre du multi-GPU.
57 bool multiGPU;
58 uchar4** ptrDevPixelsMultGPU; // La mémoire alloué pour les GPU autres que le premier
59 int hFirstDevice; // Hauteur de l'image à traiter par le premier GPU.
60 int hDevices; // Hauteur de l'image à traiter par les autres GPU.
61 };
62
63 class FractalJulia : public Fractal
64 {
65 public:
66 FractalJulia(int w, int h, int n, float z_r_min, float z_r_max, float z_i_min, float z_i_max);
67 void animationStep();
68
69 std::vector<std::string> getNames();
70 void getValues(float* values);
71
72 std::string getTitle();
73
74 private:
75 void runGPU(uchar4* ptrDevPixels, const DomaineMath& domaineMath);
76
77 const int n;
78
79 float z_r, z_i;
80 VariateurF variateurAnimationI; // Variateur pour z_i.
81 VariateurF variateurAnimationR; // Variateur pour z_r.
82 };
83
84 #endif