Commencement du labo Mandelbrot et Julia.
[GPU.git] / WCudaMSE / Student_Cuda_Image / src / cpp / core / 02_Mandelbrot_Julia / moo / device / FractalDevice.cu
1 #include <iostream>\r
2 \r
3 #include "Indice2D.h"\r
4 #include "IndiceTools.h"\r
5 #include "DomaineMath.h"\r
6 #include "cudaTools.h"\r
7 #include "Device.h"\r
8 \r
9 #include "FractalMath.h"\r
10 \r
11 using std::cout;\r
12 using std::endl;\r
13 \r
14 /*----------------------------------------------------------------------*\\r
15  |*                     Declaration                                     *|\r
16  \*---------------------------------------------------------------------*/\r
17 \r
18 /*--------------------------------------*\\r
19  |*             Imported                *|\r
20  \*-------------------------------------*/\r
21 \r
22 /*--------------------------------------*\\r
23  |*             Public                  *|\r
24  \*-------------------------------------*/\r
25 \r
26 __global__ void fractal(uchar4* ptrDevPixels, int w, int h, DomaineMath domaineMath, int n, float t);\r
27 \r
28 /*--------------------------------------*\\r
29  |*             Private                 *|\r
30  \*-------------------------------------*/\r
31 \r
32 /*----------------------------------------------------------------------*\\r
33  |*                     Implementation                                  *|\r
34  \*---------------------------------------------------------------------*/\r
35 \r
36 /*--------------------------------------*\\r
37  |*             Public                  *|\r
38  \*-------------------------------------*/\r
39 \r
40 /*--------------------------------------*\\r
41  |*             Private                 *|\r
42  \*-------------------------------------*/\r
43 \r
44 __global__ void fractal(uchar4* ptrDevPixels, int w, int h, DomaineMath domaineMath, int n, float t)\r
45     {\r
46     FractalMath fractalMath(n);\r
47 \r
48     const int TID = Indice2D::tid();\r
49     const int NB_THREAD = Indice2D::nbThread();\r
50     const int WH = w * h;\r
51 \r
52     uchar4 color;\r
53     color.z = 255; // Par défaut, l'image est opaque.\r
54 \r
55     double x, y;\r
56     int pixelI, pixelJ;\r
57 \r
58     int s = TID;\r
59     while (s < WH)\r
60         {\r
61         IndiceTools::toIJ(s, w, &pixelI, &pixelJ); // update (pixelI, pixelJ)\r
62 \r
63         // (i,j) domaine ecran\r
64         // (x,y) domaine math\r
65         domaineMath.toXY(pixelI, pixelJ, &x, &y); //  (i,j) -> (x,y)\r
66 \r
67         fractalMath.colorXY(&color,x, y, t); // update color\r
68 \r
69         ptrDevPixels[s] = color;\r
70 \r
71         s += NB_THREAD;\r
72         }\r
73     }\r
74 \r
75 /*----------------------------------------------------------------------*\\r
76  |*                     End                                             *|\r
77  \*---------------------------------------------------------------------*/\r
78 \r