render_local.c
author Tero Marttila <terom@fixme.fi>
Fri, 06 Jun 2008 18:35:46 +0300
changeset 11 082bfaf38cf0
child 12 43297144f196
permissions -rw-r--r--
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
* the beginnings of render_multi, really not done yet

committer: Tero Marttila <terom@fixme.fi>
#include <stdlib.h>
#include <assert.h>

#include "common.h"
#include "render_internal.h"
#include "render_local.h"
#include "render_png.h"
#include "mandelbrot.h"

int render_local (struct render *render, double *duration) {
    assert(render->mode == RENDER_PNG);

    unsigned char *rowbuf = NULL;
    struct render_png *png_ctx = NULL;

    *duration = -1;

    // alloc the memory buffer
    if (!(rowbuf = malloc(render->img_w)))
        ERROR("malloc");
 
    // the render_png stuff
    if (!(png_ctx = render_png_init(render)))
        ERROR("render_png_init");
    
    //  set render_* to use it
    if (render_local_mem(render, &rowbuf, (int(*)(void *arg, unsigned char *)) &render_png_row, png_ctx))
        ERROR("render_local_mem");
   
    // then we can actually render
    if (duration ? render_mandelbrot_timed(render, duration) : render_mandelbrot(render))
        ERROR("render_mandelbrot");

    // success
    return 0;

error:
    free(rowbuf);
    free(png_ctx);

    return -1;
}