123456789101112131415161718192021222324252627282930 |
- #pragma OPENCL EXTENSION cl_khr_fp64 : enable
- __kernel void iterate(__global float* A, const int width, double xl, double yt, double pixelScaleX, double pixelScaleY, int maxIter, int smooth, int julia, double juliaX, double juliaY) {
- int index = get_global_id(0);
- int x = index % width;
- int y = index / width;
- double a = x * pixelScaleX + xl;
- double b = y * pixelScaleY + yt;
- double ca = julia != 0 ? juliaX : a;
- double cb = julia != 0 ? juliaY : b;
- int n = 0;
- while (n < maxIter - 1) {
- double aa = a * a;
- double bb = b * b;
- double ab = a * b;
- a = aa - bb + ca;
- b = ab + ab + cb;
- if (aa + bb > 16) break;
- n++;
- }
- // N + 1 - log (log |Z(N)|) / log 2
- if (n >= maxIter - 1)
- A[index] = maxIter;
- else {
- if (smooth != 0)
- A[index] = ((float)n) + 1 - log(log((float)(a * a + b * b)) / 2) / log(2.0f);
- else
- A[index] = ((float)n);
- }
- }
|