Cleanage.
[GPU.git] / WCudaMSE / Student_Cuda_Image / src / cpp / core / 02_Mandelbrot_Julia / moo / host / Fractal.cu
1 #include "Fractal.h"\r
2 \r
3 #include <iostream>\r
4 #include <assert.h>\r
5 using namespace std;\r
6 \r
7 #include "FractalDevice.h"\r
8 #include "Device.h"\r
9 \r
10 Fractal::Fractal(int w, int h) :\r
11         w(w), h(h),\r
12         dg(8, 8, 1),\r
13         db(16, 16, 1),\r
14         title("Fractal Cuda")\r
15     {\r
16     //print(dg, db);\r
17     Device::assertDim(dg, db);\r
18     }\r
19 \r
20 Fractal::~Fractal()\r
21     {\r
22     delete this->ptrDomaineMathInit;\r
23     }\r
24 \r
25 /**\r
26  * Override\r
27  */\r
28 int Fractal::getW()\r
29     {\r
30     return this->w;\r
31     }\r
32 \r
33 /**\r
34  * Override\r
35  */\r
36 int Fractal::getH()\r
37     {\r
38     return this->h;\r
39     }\r
40 \r
41 DomaineMath* Fractal::getDomaineMathInit()\r
42     {\r
43     return this->ptrDomaineMathInit;\r
44     }\r
45 \r
46 /**\r
47  * Override\r
48  */\r
49 string Fractal::getTitle()\r
50     {\r
51     return this->title;\r
52     }\r
53 \r
54 /////\r
55 \r
56 FractalMandelbrot::FractalMandelbrot(int w, int h, int dn) :\r
57         Fractal(w, h),\r
58         variateurAnimationN(IntervalI(10, 100), dn),\r
59         n(0)\r
60     {\r
61     this->ptrDomaineMathInit = new DomaineMath(-2, -1.3, 0.8, 1.3);\r
62     }\r
63 \r
64 void FractalMandelbrot::animationStep()\r
65     {\r
66     this->n = this->variateurAnimationN.varierAndGet();\r
67     }\r
68 \r
69 vector<string> FractalMandelbrot::getNames()\r
70     {\r
71     vector<string> name;\r
72     name.push_back("n = ");\r
73     return name;\r
74     }\r
75 \r
76 void FractalMandelbrot::getValues(float* values)\r
77     {\r
78     values[0] = float(this->n);\r
79     }\r
80 \r
81 void FractalMandelbrot::runGPU(uchar4* ptrDevPixels, const DomaineMath& domaineMath)\r
82     {\r
83     fractalMandelbrot<<<dg,db>>>(ptrDevPixels, this->w, this->h, domaineMath, static_cast<int>(this->n));\r
84     }\r
85 \r
86 /////\r
87 \r
88 FractalJulia::FractalJulia(int w, int h, int n, float z_r_min, float z_r_max, float z_i_min, float z_i_max) :\r
89         Fractal(w, h),\r
90         n(n),\r
91         z_r(z_r_min),\r
92         z_i(z_i_min),\r
93         variateurAnimationR(IntervalF(-0.8, -0.7), 0.0005),\r
94         variateurAnimationI(IntervalF(-0.3, 0.3), 0.0004)\r
95     {\r
96     this->ptrDomaineMathInit = new DomaineMath(-1.7, -1.4, 1.7, 1.4);\r
97     }\r
98 \r
99 void FractalJulia::animationStep()\r
100     {\r
101     this->z_r = this->variateurAnimationR.varierAndGet();\r
102     this->z_i = this->variateurAnimationI.varierAndGet();\r
103     }\r
104 \r
105 vector<string> FractalJulia::getNames()\r
106     {\r
107     vector<string> name;\r
108     name.push_back("z_r = ");\r
109     name.push_back("z_i = ");\r
110     return name;\r
111     }\r
112 \r
113 void FractalJulia::getValues(float* values)\r
114     {\r
115     values[0] = this->z_r;\r
116     values[1] = this->z_i;\r
117     }\r
118 \r
119 void FractalJulia::runGPU(uchar4* ptrDevPixels, const DomaineMath& domaineMath)\r
120     {\r
121     fractalJulia<<<dg,db>>>(ptrDevPixels, this->w, this->h, domaineMath, this->n, this->z_r, this->z_i);\r
122     }\r
123 \r