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