render.c
author Tero Marttila <terom@fixme.fi>
Mon, 09 Jun 2008 18:58:39 +0300
changeset 18 86f2e5b7191b
parent 11 082bfaf38cf0
child 21 e2916f8ebaa6
permissions -rw-r--r--
render_multi uses render_slices now, and seems to work

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: 2
diff changeset
     1
#include <stdlib.h>
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include <string.h>
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
18
86f2e5b7191b render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
     4
#include "render_struct.h"
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include "render.h"
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
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: 2
diff changeset
     7
int render_init (struct render *ctx, int mode) {
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
    memset(ctx, 0, sizeof(*ctx));
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
    
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
    return render_set_mode(ctx, mode);
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
}
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
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: 2
diff changeset
    13
struct render *render_alloc () {
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: 2
diff changeset
    14
    struct render *ctx;
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: 2
diff changeset
    15
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: 2
diff changeset
    16
    if (!(ctx = calloc(1, sizeof(struct render))))
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: 2
diff changeset
    17
        return NULL;
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: 2
diff changeset
    18
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: 2
diff changeset
    19
    return ctx;
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: 2
diff changeset
    20
}
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: 2
diff changeset
    21
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: 2
diff changeset
    22
int render_set_mode (struct render *ctx, int mode) {
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
    if (mode != RENDER_RAW && mode != RENDER_PNG)
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: 2
diff changeset
    24
        return -1;
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    ctx->mode = mode;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
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: 2
diff changeset
    28
    return 0;
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
}
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
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: 2
diff changeset
    31
int render_set_size (struct render *ctx, u_int32_t img_w, u_int32_t img_h) {
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    if (img_w == 0 || img_h == 0)
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: 2
diff changeset
    33
        return -1;
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    ctx->img_w = img_w;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
    ctx->img_h = img_h;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
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: 2
diff changeset
    38
    return 0;
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
}
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
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: 2
diff changeset
    41
int render_get_size (struct render *ctx, u_int32_t *img_w, u_int32_t *img_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: 2
diff changeset
    42
    *img_w = ctx->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: 2
diff changeset
    43
    *img_h = ctx->img_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: 2
diff changeset
    44
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: 2
diff changeset
    45
    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: 2
diff changeset
    46
}
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: 2
diff changeset
    47
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: 2
diff changeset
    48
int render_region_full (struct render *ctx) {
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
    return render_region_raw(ctx, REGION_X1, REGION_Y1, REGION_X2, REGION_Y2);
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
}
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
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: 2
diff changeset
    52
int render_region_raw (struct render *ctx, double x1, double y1, double x2, double y2) {
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
    if ((x1 >= x2) || (y1 >= y2))
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: 2
diff changeset
    54
        return -1;
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
    ctx->x1 = x1;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
    ctx->y1 = y1;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
    ctx->x2 = x2;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
    ctx->y2 = y2;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
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: 2
diff changeset
    61
    return 0;
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
}
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
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: 2
diff changeset
    64
int render_io_custom (struct render *ctx, render_ctx_write_cb write_fn, render_ctx_flush_cb flush_fn, void *arg) {
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
    if (!write_fn)
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: 2
diff changeset
    66
        return -1;
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
    ctx->io_write_fn = write_fn;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
    ctx->io_flush_fn = flush_fn;
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: 2
diff changeset
    70
    ctx->cb_arg = arg;
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
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: 2
diff changeset
    72
    return 0;
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
}
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
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: 2
diff changeset
    75
int render_io_stream (struct render *ctx, FILE *fh) {
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
    if (!fh)
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: 2
diff changeset
    77
        return -1;
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
    ctx->io_stream = fh;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
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: 2
diff changeset
    81
    return 0;
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
}
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
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: 2
diff changeset
    84
int render_local_mem (struct render *ctx, unsigned char **rowbuf_addr, render_ctx_row_cb row_fn, void *arg) {
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: 2
diff changeset
    85
    ctx->local_rowbuf_addr = rowbuf_addr;
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: 2
diff changeset
    86
    ctx->local_row_fn = row_fn;
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: 2
diff changeset
    87
    ctx->cb_arg = arg;
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: 2
diff changeset
    88
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: 2
diff changeset
    89
    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: 2
diff changeset
    90
}
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: 2
diff changeset
    91