render.h
author Tero Marttila <terom@fixme.fi>
Wed, 27 Aug 2008 21:30:32 +0300
changeset 41 540737bf6bac
parent 27 1e79b4cc8f1b
permissions -rw-r--r--
sending requests, and partial support for receiving -- incomplete, not tested
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#ifndef 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
     2
#define 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
     3
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include <sys/types.h>
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 <stdio.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
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
/*
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
 * This module provides various ways to render mandelbrot images in various formats
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
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
    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
    12
 * Custom callbacks
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
 *
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
 * These should return non-zero on error, whereupon the rendering will be aborted, or zero on 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: 2
diff changeset
    15
 */
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
typedef int (*render_ctx_write_cb)(const unsigned char *data, size_t length, void *arg);
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
typedef int (*render_ctx_flush_cb)(void *arg);
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
    18
typedef int (*render_ctx_row_cb)(void *arg, unsigned char *rowbuf);
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
typedef int (*render_ctx_done_cb)(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
    20
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
    21
// include render_internal.h first if you need it
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
struct render;
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
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
// output types
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
enum {
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    RENDER_RAW,     // raw pixel data
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    RENDER_PNG,     // a png image
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
};
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
 * Alloc a new render context
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
 */
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
struct render *render_alloc ();
21
e2916f8ebaa6 fix memory alloc/free bugs, and one in render_threads where the last row was left out
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    34
void render_free(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
    35
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
/*
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    37
 * Clear out the value of the given render context
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    38
 */
23
31307efd7e78 new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents: 21
diff changeset
    39
int render_init (struct render *ctx);
13
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    40
ee426f453cf5 * fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
    41
/*
1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
 * What kind of image to render, PNG or RAW?
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
 */
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
    44
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
    45
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
/*
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
 * What size of image to render
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
 */
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
    49
int render_set_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
    50
int render_get_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
    51
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
/*
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
 * Select what region to render
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
 */
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
// the "full" mandelbrot region
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
#define REGION_X1 -2.0
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
#define REGION_Y1 -1.5
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
#define REGION_X2 1.0
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
#define REGION_Y2 1.5
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
27
1e79b4cc8f1b support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    62
#define REGION_W (REGION_X2 - REGION_X1)
1e79b4cc8f1b support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    63
#define REGION_H (REGION_Y2 - REGION_Y1)
1e79b4cc8f1b support for static files (.css, .html, .js), and tiles - serves up a full viewer at / now, but the JS code needs cleaning up
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    64
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
    65
int render_region_full (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
    66
int render_region_raw (struct render *ctx, double x1, double y1, double x2, double y2);
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
    67
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
    68
/*
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
    69
 * Render raw pixel data directly to local memory.
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
 *
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
    71
 * rowbuf_addr should point to a memory address that the mandelbrot will be
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
 * rendered into. This memory address should have room for <img_w> bytes.
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
    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: 2
diff changeset
    74
 * row_fn will be called after each row has been written, passing in arg and
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
 * *rowbuf_addr as arguments.
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
    76
 * 
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
 */
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
    78
int render_local_mem (struct render *ctx, unsigned char **rowbuf_addr, render_ctx_row_cb row_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
    79
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
/*
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
 * How to handle the I/O
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
 */
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
    83
int render_io_custom (struct render *ctx, render_ctx_write_cb write_fn, render_ctx_flush_cb flush_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
    84
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
    85
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
#endif /* RENDER_H */