997b32bf1432b2dac3dea9688f43de85bea4a65f
[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 __global__ void fractalMandelbrot(uchar4* ptrDevPixels, int w, int h, DomaineMath domaineMath, int n);\r
15 __global__ void fractalJulia(uchar4* ptrDevPixels, int w, int h, DomaineMath domaineMath, int n, float c_r, float c_i);\r
16 __device__ void fractal(uchar4* ptrDevPixels, int w, int h, const DomaineMath& domaineMath, int n, const FractalMath& fractalMath);\r
17 \r
18 __global__ void fractalMandelbrot(uchar4* ptrDevPixels, int w, int h, DomaineMath domaineMath, int n)\r
19     {\r
20     FractalMandelbrotMath fractalMath(n);\r
21     fractal(ptrDevPixels, w, h, domaineMath, n, fractalMath);\r
22     }\r
23 \r
24 __global__ void fractalJulia(uchar4* ptrDevPixels, int w, int h, DomaineMath domaineMath, int n, float c_r, float c_i)\r
25     {\r
26     FractalJuliaMath fractalMath(n, c_r, c_i);\r
27     fractal(ptrDevPixels, w, h, domaineMath, n, fractalMath);\r
28     }\r
29 \r
30 __device__ void fractal(uchar4* ptrDevPixels, int w, int h, const DomaineMath& domaineMath, int n, const FractalMath& fractalMath)\r
31     {\r
32     const int TID = Indice2D::tid();\r
33     const int NB_THREAD = Indice2D::nbThread();\r
34     const int WH = w * h;\r
35 \r
36     uchar4 color;\r
37     color.z = 255; // Par défaut, l'image est opaque.\r
38 \r
39     double x, y;\r
40     int pixelI, pixelJ;\r
41 \r
42     int s = TID;\r
43     while (s < WH)\r
44         {\r
45         IndiceTools::toIJ(s, w, &pixelI, &pixelJ); // update (pixelI, pixelJ)\r
46 \r
47         // (i,j) domaine écran\r
48         // (x,y) domaine math\r
49         domaineMath.toXY(pixelI, pixelJ, &x, &y); //  (i,j) -> (x,y)\r
50 \r
51         fractalMath.colorXY(&color, x, y);\r
52 \r
53         ptrDevPixels[s] = color;\r
54 \r
55         s += NB_THREAD;\r
56         }\r
57     }\r