render_local.c
changeset 11 082bfaf38cf0
child 12 43297144f196
equal deleted inserted replaced
10:9daa832ab9c4 11:082bfaf38cf0
       
     1 #include <stdlib.h>
       
     2 #include <assert.h>
       
     3 
       
     4 #include "common.h"
       
     5 #include "render_internal.h"
       
     6 #include "render_local.h"
       
     7 #include "render_png.h"
       
     8 #include "mandelbrot.h"
       
     9 
       
    10 int render_local (struct render *render, double *duration) {
       
    11     assert(render->mode == RENDER_PNG);
       
    12 
       
    13     unsigned char *rowbuf = NULL;
       
    14     struct render_png *png_ctx = NULL;
       
    15 
       
    16     *duration = -1;
       
    17 
       
    18     // alloc the memory buffer
       
    19     if (!(rowbuf = malloc(render->img_w)))
       
    20         ERROR("malloc");
       
    21  
       
    22     // the render_png stuff
       
    23     if (!(png_ctx = render_png_init(render)))
       
    24         ERROR("render_png_init");
       
    25     
       
    26     //  set render_* to use it
       
    27     if (render_local_mem(render, &rowbuf, (int(*)(void *arg, unsigned char *)) &render_png_row, png_ctx))
       
    28         ERROR("render_local_mem");
       
    29    
       
    30     // then we can actually render
       
    31     if (duration ? render_mandelbrot_timed(render, duration) : render_mandelbrot(render))
       
    32         ERROR("render_mandelbrot");
       
    33 
       
    34     // success
       
    35     return 0;
       
    36 
       
    37 error:
       
    38     free(rowbuf);
       
    39     free(png_ctx);
       
    40 
       
    41     return -1;
       
    42 }
       
    43