terom@11: #ifndef RENDER_MULTI_H terom@11: #define RENDER_MULTI_H terom@11: terom@13: #include terom@13: #include terom@13: terom@13: #include "render.h" terom@11: #include "remote_pool.h" terom@11: terom@11: /* terom@11: * Execute a given render_t operate across multiple remote render nodes, and aggregate the results into a single PNG stream locally terom@11: */ terom@11: terom@11: struct render_multi; terom@11: terom@11: // how many nodes can be involved in a render operation at most terom@11: #define RENDER_MULTI_NODES_MAX 2 terom@11: terom@11: /* terom@11: * Execute the given render operation on multiple nodes from the given remote pool, streaming back the result in PNG format via the given callbacks terom@11: * terom@11: * The behaviour of the callbacks is mostly the same as for render_remote.h terom@11: */ terom@11: struct render_multi *render_multi ( terom@13: struct render *render_ctx, // what to render terom@13: struct remote_pool *pool_info, // what render pool to use terom@11: void (*cb_sent)(void *arg), terom@11: void (*cb_data)(struct evbuffer *buf, void *arg), terom@11: void (*cb_done)(void *arg), terom@11: void (*cb_fail)(void *arg), terom@11: void *cb_arg terom@11: ); terom@11: terom@13: void render_multi_cancel (struct render_multi *ctx); terom@13: terom@16: void render_multi_set_recv (struct render_multi *ctx, size_t recv_threshold, size_t unread_buffer); terom@13: terom@16: int render_multi_flush (struct render_multi *ctx); terom@16: terom@16: void render_multi_free (struct render_multi *ctx); terom@13: terom@11: #endif /* RENDER_MULTI_H */