Commencement du labo Mandelbrot et Julia.
[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 /*----------------------------------------------------------------------*\\r
11  |*                     Declaration                                     *|\r
12  \*---------------------------------------------------------------------*/\r
13 \r
14 /*--------------------------------------*\\r
15  |*             Imported                *|\r
16  \*-------------------------------------*/\r
17 \r
18 extern __global__ void fractal(uchar4* ptrDevPixels, int w, int h, DomaineMath domaineMath, int n, float t);\r
19 \r
20 /*--------------------------------------*\\r
21  |*             Public                  *|\r
22  \*-------------------------------------*/\r
23 \r
24 /*--------------------------------------*\\r
25  |*             Private                 *|\r
26  \*-------------------------------------*/\r
27 \r
28 /*----------------------------------------------------------------------*\\r
29  |*                     Implementation                                  *|\r
30  \*---------------------------------------------------------------------*/\r
31 \r
32 /*--------------------------------------*\\r
33  |*             Public                  *|\r
34  \*-------------------------------------*/\r
35 \r
36 /*-------------------------*\\r
37  |*     Constructeur        *|\r
38  \*-------------------------*/\r
39 \r
40 Fractal::Fractal(int w, int h, float dt, int n)\r
41     : w(w), h(h), n(n),\r
42       dg(8, 8, 1),\r
43       db(16, 16, 1),\r
44       t(0),\r
45       variateurAnimation(IntervalF(0, 2 * PI), dt),\r
46       ptrDomaineMathInit(new DomaineMath(-2, -1.3, 0.8, 1.3)),\r
47       title("Fractal Cuda")\r
48     {\r
49     assert(w == h);\r
50 \r
51     //print(dg, db);\r
52     Device::assertDim(dg, db);\r
53     }\r
54 \r
55 Fractal::~Fractal()\r
56     {\r
57     delete this->ptrDomaineMathInit;\r
58     }\r
59 \r
60 /*-------------------------*\\r
61  |*     Methode             *|\r
62  \*-------------------------*/\r
63 \r
64 /**\r
65  * Override\r
66  */\r
67 void Fractal::runGPU(uchar4* ptrDevPixels, const DomaineMath& domaineMath)\r
68     {\r
69     fractal<<<dg,db>>>(ptrDevPixels, this->w, this->h, domaineMath, this->n, this->t);\r
70     }\r
71 \r
72 /**\r
73  * Override\r
74  */\r
75 void Fractal::animationStep()\r
76     {\r
77     this->t = this->variateurAnimation.varierAndGet();\r
78     }\r
79 \r
80 /*--------------*\\r
81  |*     get      *|\r
82  \*--------------*/\r
83 \r
84 \r
85 /**\r
86  * Override\r
87  */\r
88 int Fractal::getW()\r
89     {\r
90     return this->w;\r
91     }\r
92 \r
93 /**\r
94  * Override\r
95  */\r
96 int Fractal::getH()\r
97     {\r
98     return this->h;\r
99     }\r
100 \r
101 DomaineMath* Fractal::getDomaineMathInit()\r
102     {\r
103     return this->ptrDomaineMathInit;\r
104     }\r
105 \r
106 /**\r
107  * Override\r
108  */\r
109 float Fractal::getT()\r
110     {\r
111     return this->t;\r
112     }\r
113 \r
114 /**\r
115  * Override\r
116  */\r
117 string Fractal::getTitle()\r
118     {\r
119     return this->title;\r
120     }\r
121 \r
122 /*--------------------------------------*\\r
123  |*             Private                 *|\r
124  \*-------------------------------------*/\r
125 \r
126 /*----------------------------------------------------------------------*\\r
127  |*                     End                                             *|\r
128  \*---------------------------------------------------------------------*/\r
129 \r