render_slices.c
author Tero Marttila <terom@fixme.fi>
Sat, 30 Aug 2008 19:13:15 +0300
changeset 49 10c7dce1a043
parent 23 31307efd7e78
permissions -rw-r--r--
autogenerate the memcache_test help output, and pipeline memcache requests
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:
diff changeset
     1
#include <stdlib.h>
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:
diff changeset
     2
#include <assert.h>
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:
diff changeset
     3
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:
diff changeset
     4
#include "common.h"
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:
diff changeset
     5
#include "render_struct.h"
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:
diff changeset
     6
#include "render_slices_struct.h"
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:
diff changeset
     7
#include "render_slices.h"
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:
diff changeset
     8
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:
diff changeset
     9
void render_slices_free (struct render_slices *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:
diff changeset
    10
    render_slices_deinit(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:
diff changeset
    11
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:
diff changeset
    12
    if (ctx->owned_by_me)
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:
diff changeset
    13
        free(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:
diff changeset
    14
}
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:
diff changeset
    15
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
    16
void render_slices_deinit (struct render_slices *ctx) {
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
    17
    if (ctx->rowbuf) {
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
    18
        free(ctx->rowbuf);
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
    19
        ctx->rowbuf = NULL;
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
    20
    }
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:
diff changeset
    21
    
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:
diff changeset
    22
    render_png_deinit(&ctx->png_info);
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:
diff changeset
    23
}
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:
diff changeset
    24
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:
diff changeset
    25
#define HALF(a, b) (( a + b) / 2)
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:
diff changeset
    26
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:
diff changeset
    27
int render_slices_init (struct render_slices *ctx, struct render *render) {
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:
diff changeset
    28
    // initialize the slices
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:
diff changeset
    29
    // for now, just split it in half into two render_ts
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:
diff changeset
    30
    ctx->slices[0].info.index = 0;
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:
diff changeset
    31
    ctx->slices[0].info.render_info = &ctx->slices[0].render_info;
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:
diff changeset
    32
    ctx->slices[0].self = 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:
diff changeset
    33
    ctx->slices[0].row_offset = 0;
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:
diff changeset
    34
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:
diff changeset
    35
    ctx->slices[1].info.index = 1;
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:
diff changeset
    36
    ctx->slices[1].info.render_info = &ctx->slices[1].render_info;
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:
diff changeset
    37
    ctx->slices[1].self = 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:
diff changeset
    38
    ctx->slices[1].row_offset = render->img_w / 2;
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:
diff changeset
    39
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:
diff changeset
    40
    ctx->num_slices = 2;
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:
diff changeset
    41
    ctx->render_row = 0;
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:
diff changeset
    42
    ctx->done_row = -1;
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:
diff changeset
    43
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:
diff changeset
    44
    assert(RENDER_SLICES_MAX >= 2);
22
4627760fc0d1 add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    45
    
4627760fc0d1 add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    46
    // should probably use memcpy instead...
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:
diff changeset
    47
    if (
23
31307efd7e78 new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    48
            render_init         (&ctx->slices[0].render_info)
31307efd7e78 new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    49
         || render_init         (&ctx->slices[1].render_info)
31307efd7e78 new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    50
31307efd7e78 new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    51
         || render_set_mode     (&ctx->slices[0].render_info,   RENDER_RAW)
31307efd7e78 new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    52
         || render_set_mode     (&ctx->slices[1].render_info,   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:
diff changeset
    53
22
4627760fc0d1 add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    54
         || render_set_size     (&ctx->slices[0].render_info,   render->img_w,  render->img_h)
4627760fc0d1 add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    55
         || render_set_size     (&ctx->slices[1].render_info,   render->img_w,  render->img_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:
diff changeset
    56
22
4627760fc0d1 add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    57
         || render_region_raw   (&ctx->slices[0].render_info,   render->x1, render->y1, render->x2, render->y2)
4627760fc0d1 add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    58
         || render_region_raw   (&ctx->slices[1].render_info,   render->x1, render->y1, render->x2, render->y2)
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:
diff changeset
    59
    )
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:
diff changeset
    60
        ERROR("render_{init,set_size,set_region_raw}");
22
4627760fc0d1 add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    61
    
4627760fc0d1 add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    62
    // set the offsets
4627760fc0d1 add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    63
    ctx->slices[0].render_info.img_left = 0;
4627760fc0d1 add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    64
    ctx->slices[0].render_info.img_right = render->img_w / 2;
4627760fc0d1 add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    65
    ctx->slices[1].render_info.img_left = render->img_w / 2;
4627760fc0d1 add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    66
    ctx->slices[1].render_info.img_right = render->img_w;
4627760fc0d1 add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
    67
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:
diff changeset
    68
    // allocate the rowbuf
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:
diff changeset
    69
    if (!(ctx->rowbuf = malloc(render->img_w * 2)))
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:
diff changeset
    70
        ERROR("malloc");
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:
diff changeset
    71
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:
diff changeset
    72
    // update the slice_buf pointers
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:
diff changeset
    73
    ctx->rows[0] = ctx->rowbuf;
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:
diff changeset
    74
    ctx->rows[1] = ctx->rowbuf + render->img_w;
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:
diff changeset
    75
    ctx->slices[0].info.render_buf = ctx->rows[ctx->render_row] + ctx->slices[0].row_offset;
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:
diff changeset
    76
    ctx->slices[1].info.render_buf = ctx->rows[ctx->render_row] + ctx->slices[1].row_offset;
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:
diff changeset
    77
    
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:
diff changeset
    78
    // png info
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:
diff changeset
    79
    if (render_png_init(&ctx->png_info, render))
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:
diff changeset
    80
        ERROR("render_png_init");
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:
diff changeset
    81
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:
diff changeset
    82
    // great success!
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:
diff changeset
    83
    return 0;
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:
diff changeset
    84
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:
diff changeset
    85
error:
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:
diff changeset
    86
    render_slices_deinit(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:
diff changeset
    87
    return -1;
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:
diff changeset
    88
}
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:
diff changeset
    89
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:
diff changeset
    90
struct render_slices *render_slices_alloc (struct render *render) {
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:
diff changeset
    91
    struct render_slices *ctx = NULL;
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:
diff changeset
    92
    
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:
diff changeset
    93
    // allocate it
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:
diff changeset
    94
    if (!(ctx = calloc(1, sizeof(*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:
diff changeset
    95
        ERROR("calloc");
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:
diff changeset
    96
    
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:
diff changeset
    97
    // mark it for free()ing
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:
diff changeset
    98
    ctx->owned_by_me = 1;
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:
diff changeset
    99
    
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:
diff changeset
   100
    // initialize it
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:
diff changeset
   101
    if (render_slices_init(ctx, render))
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:
diff changeset
   102
        goto error;
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:
diff changeset
   103
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:
diff changeset
   104
    return 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:
diff changeset
   105
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:
diff changeset
   106
error :
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:
diff changeset
   107
    render_slices_free(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:
diff changeset
   108
    return NULL;
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:
diff changeset
   109
}
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:
diff changeset
   110
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:
diff changeset
   111
int render_slices_get_count (struct render_slices *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:
diff changeset
   112
    return ctx->num_slices;
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:
diff changeset
   113
}
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:
diff changeset
   114
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:
diff changeset
   115
struct render_slice_info *render_slices_get_slice_info (struct render_slices *ctx, int index) {
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:
diff changeset
   116
    assert(index >= 0 && index < ctx->num_slices);
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:
diff changeset
   117
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:
diff changeset
   118
    return &ctx->slices[index].info;
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:
diff changeset
   119
}
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:
diff changeset
   120
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:
diff changeset
   121
int render_slices_segment_done (struct render_slices *ctx, int index) {
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:
diff changeset
   122
    assert(index >= 0 && index < ctx->num_slices);
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   123
    assert(ctx->render_row >= 0);
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   124
    assert(ctx->segments_done >= 0 && ctx->segments_done < ctx->num_slices);
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:
diff changeset
   125
    
18
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   126
    // our return status
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   127
    int i, status = 0;
18
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   128
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   129
    // is this row now complete?
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   130
    if (++ctx->segments_done == ctx->num_slices) {
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:
diff changeset
   131
        // the row is complete
18
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   132
        ctx->segments_done = 0;
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   133
    
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   134
        // once we fill up a row we can always call process_row
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   135
        status |= SLICE_PROCESS_ROW;
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:
diff changeset
   136
        
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   137
        // is the other row already rendered?
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:
diff changeset
   138
        if (ctx->done_row < 0) {
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   139
            // yes, point the done_row at this row, point the render buffers to the unused row
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:
diff changeset
   140
            ctx->done_row = ctx->render_row;
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:
diff changeset
   141
            ctx->render_row = (ctx->render_row == 0 ? 1 : 0);
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:
diff changeset
   142
            
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   143
            // can now continue rendering as well as call process_row
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   144
            status |= SLICE_CONTINUE;
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   145
            
18
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   146
            // update the remaining render buffers
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:
diff changeset
   147
            for (i = 0; i < ctx->num_slices; i++) {
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:
diff changeset
   148
                ctx->slices[i].info.render_buf = ctx->rows[ctx->render_row] + ctx->slices[i].row_offset;
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:
diff changeset
   149
            }
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:
diff changeset
   150
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:
diff changeset
   151
        } else {
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:
diff changeset
   152
            // cannot continue rendering, need to have process_row complete first
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   153
            
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   154
            ctx->render_row = -1;
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   155
        }
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:
diff changeset
   156
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:
diff changeset
   157
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:
diff changeset
   158
    } else {
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:
diff changeset
   159
        // the row is not complete, do not render the next segment, do not call process_row
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:
diff changeset
   160
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:
diff changeset
   161
    }
18
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   162
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   163
    return status;
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:
diff changeset
   164
}
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:
diff changeset
   165
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:
diff changeset
   166
int render_slices_process_row (struct render_slices *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:
diff changeset
   167
    assert(ctx->done_row >= 0);
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:
diff changeset
   168
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   169
    int i;
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   170
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:
diff changeset
   171
    // pass the data to render_png, this results in calls to _render_multi_png_data
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:
diff changeset
   172
    if (render_png_row(&ctx->png_info, ctx->rows[ctx->done_row]))
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:
diff changeset
   173
        ERROR("render_png_row");
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:
diff changeset
   174
    
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   175
    // is the other row still in the process of being assembled?
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   176
    if (ctx->render_row == -1) {
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   177
        // no, both rows were full
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   178
        ctx->render_row = ctx->done_row;
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   179
        ctx->done_row = (ctx->done_row == 0 ? 1 : 0);
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   180
        
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   181
        // update the remaining render buffers
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   182
        for (i = 0; i < ctx->num_slices; i++) {
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   183
            ctx->slices[i].info.render_buf = ctx->rows[ctx->render_row] + ctx->slices[i].row_offset;
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   184
        }
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   185
        
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   186
        // you can call me again, but also segment_done
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   187
        return SLICE_PROCESS_ROW | SLICE_CONTINUE;
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   188
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   189
    } else {
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   190
        // yes, so that still needs to be finished
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   191
        ctx->done_row = -1;
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   192
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   193
        if (ctx->segments_done == 0) {
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   194
            // that row is empty, then we can continue
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   195
            return SLICE_CONTINUE;
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   196
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   197
        } else {
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   198
            // that row is partially built, so some segment is still on the way - don't resume the other slices until that's arrived!
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   199
            return 0;
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   200
        }
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   201
    }
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:
diff changeset
   202
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:
diff changeset
   203
error:
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:
diff changeset
   204
    // user needs to deinit/free us
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:
diff changeset
   205
    return -1;
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:
diff changeset
   206
}   
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:
diff changeset
   207
18
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   208
int render_slices_done (struct render_slices *ctx) {
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   209
    // finish off render_png
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   210
    if (render_png_done(&ctx->png_info))
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   211
        goto error;
18
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   212
    
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   213
    return 0;
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:
diff changeset
   214
18
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   215
error:
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   216
    render_slices_free(ctx);
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   217
    return -1;
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   218
}
19
d18606bb6f20 a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   219