render_local.c
author Tero Marttila <terom@fixme.fi>
Mon, 09 Jun 2008 03:15:34 +0300
changeset 17 8e8b56b0e0f5
parent 13 ee426f453cf5
child 23 31307efd7e78
permissions -rw-r--r--
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep

committer: Tero Marttila <terom@fixme.fi>
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#include <stdlib.h>
12
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
     2
#include <time.h>
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
#include <assert.h>
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include "common.h"
17
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
     6
#include "render_struct.h"
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
#include "render_local.h"
17
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
     8
#include "render_png_struct.h"
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
#include "render_png.h"
17
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    10
#include "render_raw_struct.h"
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    11
#include "render_raw.h"
12
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    12
#include "render_mandelbrot.h"
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
int render_local (struct render *render, double *duration) {
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    unsigned char *rowbuf = NULL;
17
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    16
    struct render_png png_ctx;
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    17
    struct render_raw raw_ctx;
12
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    18
    clock_t t1, t2;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    19
    
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    20
    if (duration)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    21
        *duration = -1;
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
17
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    23
    // ugh
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    24
    memset(&png_ctx, 0, sizeof(png_ctx));
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    25
    memset(&raw_ctx, 0, sizeof(raw_ctx));
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    26
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    // alloc the memory buffer
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    if (!(rowbuf = malloc(render->img_w)))
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        ERROR("malloc");
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
 
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    31
    // what mode?
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    32
    switch (render->mode) {
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    33
        case RENDER_PNG :
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    34
            // the render_png stuff
17
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    35
            if (render_png_init(&png_ctx, render))
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    36
                ERROR("render_png_init");
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    37
                
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    38
            //  set render_* to use the render_png
17
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    39
            if (render_local_mem(render, &rowbuf, (int(*)(void *arg, unsigned char *)) &render_png_row, &png_ctx))
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    40
                ERROR("render_local_mem");
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    41
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    42
            break;
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    43
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    44
        case RENDER_RAW :
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    45
            // the render_raw stuff
17
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    46
            if (render_raw_init(&raw_ctx, render))
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    47
                ERROR("render_raw_init");
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    48
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    49
            //  set render_* to use the render_raw
17
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    50
            if (render_local_mem(render, &rowbuf, (int(*)(void *arg, unsigned char *)) &render_raw_row, &raw_ctx))
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    51
                ERROR("render_local_mem");
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    52
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    53
            break;
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    54
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    55
        default :
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    56
            assert(0);
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    57
    }
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    58
  
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
    // then we can actually render
12
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    60
    t1 = clock();
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    61
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    62
    if (render_mandelbrot(render))
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
        ERROR("render_mandelbrot");
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
12
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    65
    t2 = clock();
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    66
    
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    67
    // calculate the time taken
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    68
    if (duration)
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    69
        *duration = ((double)(t2 - t1))/CLOCKS_PER_SEC;
43297144f196 * rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    70
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
    // success
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    return 0;
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
error:
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
    free(rowbuf);
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 12
diff changeset
    76
17
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    77
    render_png_deinit(&png_ctx);
8e8b56b0e0f5 a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    78
    render_raw_deinit(&raw_ctx);
11
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    return -1;
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
}
082bfaf38cf0 * massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82