diff --git a/fractal.c b/fractal.c index 8f41a69..3cbaca5 100644 --- a/fractal.c +++ b/fractal.c @@ -1,7 +1,8 @@ -#include #include +#include + Animation anim = 0; unsigned char pixels[512][512][4]; @@ -12,42 +13,11 @@ double cx = -2; double cy = -2; -void hsvToRgb(double h, double s, double v, unsigned char *pixel) { - h -= floor(h/360)*360; - s /= 100; - v = v/100*255; - s = s > 0 ? (s < 1 ? s : 1) : 0; - v = v > 0 ? (v < 255 ? v : 255) : 0; - - h /= 60.0; - int i = (int)h; - double f = h - i; - int pp = v*(1 - s); - int qq = v*(1 - s*f); - int tt = v*(1 - s*(1 - f)); - - unsigned char p = (unsigned char)(pp > 0 ? (pp < 255 ? pp : 255) : 0); - unsigned char q = (unsigned char)(qq > 0 ? (qq < 255 ? qq : 255) : 0); - unsigned char t = (unsigned char)(tt > 0 ? (tt < 255 ? tt : 255) : 0); - unsigned char u = (unsigned char)v; - - switch(i) { - case 0: pixel[0] = u, pixel[1] = t, pixel[2] = p; break; - case 1: pixel[0] = q, pixel[1] = u, pixel[2] = p; break; - case 2: pixel[0] = p, pixel[1] = u, pixel[2] = t; break; - case 3: pixel[0] = p, pixel[1] = q, pixel[2] = u; break; - case 4: pixel[0] = t, pixel[1] = p, pixel[2] = u; break; - default: pixel[0] = u, pixel[1] = p, pixel[2] = q; break; - } - pixel[3] = 255; -} - - void setColor(double x, unsigned char *pixel) { double h0 = 240; double h1 = 0; double h = h0 + (h1 - h0)*x; - hsvToRgb(h, 100, 100, pixel); + pixelSet(pixel, colorByHSV(h, 1, 1)); } @@ -66,18 +36,17 @@ void julia(double r, double i) { setColor(b/64.0, pixels[y][x]); } } - } void fractal() { - if (anim) animationDestroy(anim); julia(r, i); - anim = createAnimationFromImageEx(512, 512, pixels, FALSE, FALSE, FALSE, FALSE); + imageToExistingGLTexture(animationGetGLTexId(anim), 512, 512, pixels); } void init() { + anim = createAnimationFromImageEx(512, 512, pixels, FALSE, FALSE, FALSE, FALSE); fractal(); }