TP fractalTP fractal..
[GPU.git] / WCudaMSE / Student_Cuda_Image / src / cpp / core / 02_Mandelbrot_Julia / moo / host / Fractal.cu
index a92b86b..88a225b 100755 (executable)
@@ -7,47 +7,15 @@
 using std::cout;\r
 using std::endl;\r
 \r
-/*----------------------------------------------------------------------*\\r
- |*                    Declaration                                     *|\r
- \*---------------------------------------------------------------------*/\r
+extern __global__ void fractalMandelbrot(uchar4* ptrDevPixels, int w, int h, DomaineMath domaineMath, int n);\r
+extern __global__ void fractalJulia(uchar4* ptrDevPixels, int w, int h, DomaineMath domaineMath, int n, float c_r, float c_i);\r
 \r
-/*--------------------------------------*\\r
- |*            Imported                *|\r
- \*-------------------------------------*/\r
-\r
-extern __global__ void fractal(uchar4* ptrDevPixels, int w, int h, DomaineMath domaineMath, int n, float t);\r
-\r
-/*--------------------------------------*\\r
- |*            Public                  *|\r
- \*-------------------------------------*/\r
-\r
-/*--------------------------------------*\\r
- |*            Private                 *|\r
- \*-------------------------------------*/\r
-\r
-/*----------------------------------------------------------------------*\\r
- |*                    Implementation                                  *|\r
- \*---------------------------------------------------------------------*/\r
-\r
-/*--------------------------------------*\\r
- |*            Public                  *|\r
- \*-------------------------------------*/\r
-\r
-/*-------------------------*\\r
- |*    Constructeur        *|\r
- \*-------------------------*/\r
-\r
-Fractal::Fractal(int w, int h, float dt, int n)\r
-    : w(w), h(h), n(n),\r
+Fractal::Fractal(int w, int h)\r
+    : w(w), h(h),\r
       dg(8, 8, 1),\r
       db(16, 16, 1),\r
-      t(0),\r
-      variateurAnimation(IntervalF(0, 2 * PI), dt),\r
-      ptrDomaineMathInit(new DomaineMath(-2, -1.3, 0.8, 1.3)),\r
       title("Fractal Cuda")\r
     {\r
-    assert(w == h);\r
-\r
     //print(dg, db);\r
     Device::assertDim(dg, db);\r
     }\r
@@ -57,73 +25,79 @@ Fractal::~Fractal()
     delete this->ptrDomaineMathInit;\r
     }\r
 \r
-/*-------------------------*\\r
- |*    Methode             *|\r
- \*-------------------------*/\r
-\r
 /**\r
  * Override\r
  */\r
-void Fractal::runGPU(uchar4* ptrDevPixels, const DomaineMath& domaineMath)\r
+int Fractal::getW()\r
     {\r
-    fractal<<<dg,db>>>(ptrDevPixels, this->w, this->h, domaineMath, this->n, this->t);\r
+    return this->w;\r
     }\r
 \r
 /**\r
  * Override\r
  */\r
-void Fractal::animationStep()\r
+int Fractal::getH()\r
     {\r
-    this->t = this->variateurAnimation.varierAndGet();\r
+    return this->h;\r
     }\r
 \r
-/*--------------*\\r
- |*    get      *|\r
- \*--------------*/\r
-\r
+DomaineMath* Fractal::getDomaineMathInit()\r
+    {\r
+    return this->ptrDomaineMathInit;\r
+    }\r
 \r
 /**\r
  * Override\r
  */\r
-int Fractal::getW()\r
+string Fractal::getTitle()\r
     {\r
-    return this->w;\r
+    return this->title;\r
     }\r
 \r
-/**\r
- * Override\r
- */\r
-int Fractal::getH()\r
+/////\r
+\r
+FractalMandelbrot::FractalMandelbrot(int w, int h, float dn)\r
+    : Fractal(w, h), variateurAnimationN(IntervalF(30, 100), dn)\r
     {\r
-    return this->h;\r
+    this->ptrDomaineMathInit = new DomaineMath(-2, -1.3, 0.8, 1.3);\r
     }\r
 \r
-DomaineMath* Fractal::getDomaineMathInit()\r
+void FractalMandelbrot::animationStep()\r
     {\r
-    return this->ptrDomaineMathInit;\r
+    this->n = this->variateurAnimationN.varierAndGet();\r
     }\r
 \r
-/**\r
- * Override\r
- */\r
-float Fractal::getT()\r
+float FractalMandelbrot::getT()\r
     {\r
-    return this->t;\r
+    return this->n;\r
     }\r
 \r
-/**\r
- * Override\r
- */\r
-string Fractal::getTitle()\r
+void FractalMandelbrot::runGPU(uchar4* ptrDevPixels, const DomaineMath& domaineMath)\r
     {\r
-    return this->title;\r
+    fractalMandelbrot<<<dg,db>>>(ptrDevPixels, this->w, this->h, domaineMath, static_cast<int>(this->n));\r
+    }\r
+\r
+/////\r
+\r
+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
+    : 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
+    {\r
+    this->ptrDomaineMathInit = new DomaineMath(-1.7, -1.4, 1.7, 1.4);\r
+    }\r
+\r
+void FractalJulia::animationStep()\r
+    {\r
+    this->z_r = this->variateurAnimationR.varierAndGet();\r
+    this->z_i = this->variateurAnimationI.varierAndGet();\r
     }\r
 \r
-/*--------------------------------------*\\r
- |*            Private                 *|\r
- \*-------------------------------------*/\r
+float FractalJulia::getT()\r
+    {\r
+    return this->z_r;\r
+    }\r
 \r
-/*----------------------------------------------------------------------*\\r
- |*                    End                                             *|\r
- \*---------------------------------------------------------------------*/\r
+void FractalJulia::runGPU(uchar4* ptrDevPixels, const DomaineMath& domaineMath)\r
+    {\r
+    fractalJulia<<<dg,db>>>(ptrDevPixels, this->w, this->h, domaineMath, 300, this->z_r, this->z_i);\r
+    }\r
 \r