diff --git a/src/mandelbrotshader.cpp b/src/mandelbrotshader.cpp index 9644659..ce91b75 100644 --- a/src/mandelbrotshader.cpp +++ b/src/mandelbrotshader.cpp @@ -53,12 +53,12 @@ void azrp_mandelbrot_close( void ) struct command { uint8_t shader_id; uint8_t current_frag; - int32_t xmin; - int32_t xmax; - int32_t ymin; - int32_t ymax; - int32_t xinc; - int32_t yinc; + libnum::num xmin; + libnum::num xmax; + libnum::num ymin; + libnum::num ymax; + libnum::num xinc; + libnum::num yinc; }; @@ -70,12 +70,12 @@ void azrp_mandelbrot( void ) cmd.shader_id = AZRP_SHADER_MANDELBROT; cmd.current_frag = 0; - cmd.xmin = (int32_t) (65536 * -3.0f); - cmd.xmax = (int32_t) (65536 * 2.0f); - cmd.ymin = (int32_t) (65536 * -2.0f); - cmd.ymax = (int32_t) (65536 * 2.0f); - cmd.xinc = (int32_t) (65536 * 5.0f/azrp_width); - cmd.yinc = (int32_t) (65536 * 4.0f/azrp_height); + cmd.xmin = libnum::num(-1.98f); + cmd.xmax = libnum::num(1.98f); + cmd.ymin = libnum::num(-1.12f); + cmd.ymax = libnum::num(1.12f); + cmd.xinc = libnum::num((2*1.98f)/azrp_width); + cmd.yinc = libnum::num((2*1.12f)/azrp_height); int fragmin = 0; int fragcount = (azrp_height >> 4) + 1; @@ -92,12 +92,16 @@ void azrp_shader_mandelbrot( void *uniforms, void *comnd, void *fragment ) struct command *cmd = (struct command *) comnd; uint16_t *frag = (uint16_t *) fragment; - int maxiter = 60; + int maxiter = 256; - int32_t zr, zi; - - int32_t zrsave = cmd->xmin; - int32_t zisave = cmd->ymax - (int32_t) (65536 * (cmd->current_frag*16)*cmd->yinc); + libnum::num zr, zr2; + libnum::num zi, zi2; +/* + libnum::num cr = libnum::num(-0.480f); + libnum::num ci = libnum::num(0.600f); +*/ + libnum::num zrsave = cmd->xmin; + libnum::num zisave = cmd->ymax - libnum::num(cmd->current_frag*16)*cmd->yinc; int u; @@ -109,13 +113,62 @@ void azrp_shader_mandelbrot( void *uniforms, void *comnd, void *fragment ) { zr = zrsave; zi = zisave; +/* + zr2 = zr * zr; + zi2 = zi * zi; - u = mandelbrot( zr, zi, (2*2)<<16, maxiter ); + u=0; - if (u==0) frag[offset + i] = C_RGB(255,255,255); - else frag[offset + i] = C_RGB(u*4,u*4,u*4); + while((zr2+zi2)<4 && (uxinc; + } zrsave = cmd->xmin;