render.h
author Tero Marttila <terom@fixme.fi>
Sat, 31 May 2008 02:22:27 +0300
changeset 1 6aa1a0d1f88d
child 2 69f8c0acaac7
permissions -rw-r--r--
partial commit of new render module, render_file should work, web_main doesn't

committer: Tero Marttila <terom@fixme.fi>
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
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
// custom I/O callbacks function signatures
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
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
    13
typedef int (*render_ctx_flush_cb)(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
    14
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
// callback return codes
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
#define RENDER_CB_OK 0
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
#define RENDER_CB_ERR 1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
#define RENDER_OK 0
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
#define RENDER_ERR 1
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
// 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
    23
enum {
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
    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
    25
    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
    26
};
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
typedef struct render_ctx {
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
/* render mode */
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
    int mode;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
/* image size */
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    u_int32_t 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
    34
    u_int32_t 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
    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
/* 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
    37
    double      x1;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    double      y1;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
    double      x2;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
    double      y2;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
/* I/O parameters */
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
    // if this is non-NULL, use libpng's normal IO on this stream
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    FILE *io_stream;
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
    // called to handle the output data
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    render_ctx_write_cb io_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
    48
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
    // called when the output data should be flushed - can be safely ignored if not needed
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
    render_ctx_flush_cb io_flush_fn;
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
    // the callback argument
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
    void *io_cb_arg;
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
    // error status
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
    int io_error;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
} render_t;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
/*
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
 * Clear out the render context and set the mode
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
 */
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
int render_init (render_t *ctx, int mode);
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
/*
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
 * 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
    66
 */
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
int render_set_mode (render_t *ctx, int mode);
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
/*
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
 * 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
    71
 */
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
int render_set_size (render_t *ctx, u_int32_t img_w, u_int32_t 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
    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
/*
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
 * 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
    76
 */
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
// 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
    79
#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
    80
#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
    81
#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
    82
#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
    83
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
int render_region_full (render_t *ctx);
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
int render_region_raw (render_t *ctx, double x1, double y1, double x2, double y2);
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
/*
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
 * 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
    89
 */
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
int render_io_custom (render_t *ctx, render_ctx_write_cb write_fn, render_ctx_flush_cb flush_fn, 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
    91
int render_io_stream (render_t *ctx, FILE *fh);
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
/*
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
 * Remote rendering
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
 */
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
#pragma pack(push)
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
#pragma pack(1)
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
struct render_cmd {
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
    u_int32_t   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
   102
    u_int32_t   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
   103
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
    double      x1;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
    double      y1;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
    double      x2;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
    double      y2;
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
};
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
#pragma pack(pop)
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
#define RENDER_PORT 6159
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
#define RENDER_CMD_SIZE sizeof(struct render_cmd)
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
/*
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
 * build the command to send for remote rendering
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
 */
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
int render_cmd_build (render_t *ctx, struct render_cmd *cmd);
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
6aa1a0d1f88d partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
#endif /* RENDER_H */