Blob Blame Raw


#ifndef _CASM_NODE_DEFINED_H
#define _CASM_NODE_DEFINED_H

#include "raster.h"
#include "casm.h"
#include "tmacro.h"
#include "affine.h"
#include "toonzproc.h"

#define CASM_NODE_HD            \
	struct CASM_NODEPROC *proc; \
	char bg_flag, bad_branch;   \
	ULONG mask;                 \
	int label;

#define CASM_UNARY_NODE_HD \
	CASM_NODE_HD           \
	CASM_NODE *arg;

#define CASM_BINARY_NODE_HD     \
	CASM_NODE_HD                \
	CASM_NODE *arg_dn, *arg_up; \
	int marker_dn, marker_up;

#define CASM_N_ARY_NODE_HD \
	CASM_NODE_HD           \
	int num_args;          \
	CASM_NODE **args;

typedef struct CASM_NODE {
	CASM_NODE_HD
} CASM_NODE;

typedef struct CASM_TILE {
	RASTER r;
	int x1, y1, x2, y2;
} CASM_TILE;

typedef struct CASM_NODESIZE {
	float x1, y1, x2, y2;
	float sbx1, sby1, sbx2, sby2;
} CASM_NODESIZE;

typedef struct USR_IMAGE {
	void *buffer;
	enum img_type type;
	int wrap, lx, ly;
	struct {
		LPIXEL *buffer;
		int offset, size;
	} cmap;
} USR_IMAGE;

enum CASM_NODE_TYPE {
	OVR_TRANSF = 0,
	ADD_TRANSF,
	BACKLIT_TRANSF,
	MATTE_TRANSF,
	WARP_TRANSF,
	BLUR_TRANSF,
	MBLUR_TRANSF,
	UDIT_TRANSF,
	READ_TRANSF,
	FLIPX_TRANSF,
	FLIPY_TRANSF,
	EXTOP_TRANSF,
	COLOR_TRANSF,
	COLORCARD_TRANSF,
	AFFINE_TRANSF,
	SHARPEN_TRANSF,
	LOCALBLUR_TRANSF,
	LOCALTRANSP_TRANSF,
	BODY_SHADOW_TRANSF,
	REFLECTION_TRANSF,
	CASM_NODE_TYPE_HOW_MANY
};

typedef int CASM_COMPUTE_FUNCTION(CASM_NODE *node,
								  int x1, int y1, int x2, int y2,
								  float dx, float dy,
								  RASTER *raster, CASM_TILE *out);

typedef void CASM_CE_FUNCTION(float *pars, int cx, int cy,
							  RASTER *rin, RASTER *rout, int shrink);

typedef struct CASM_RENDER_INFO {
	float dx, dy;
	int shrink;
	int frame;
	int column;
} CASM_RENDER_INFO;

typedef void CASM_CLC_FUNCTION(float *pars, CASM_RENDER_INFO *info, RASTER *rout);

typedef int CASM_COMPARE_FUNCTION(CASM_NODE *n1, CASM_NODE *n2);

typedef void CASM_WRITE_FUNCTION(CASM_NODE *node, T_CHAN fp);

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODEPROC {
	CASM_COMPUTE_FUNCTION *compute;
	CASM_COMPARE_FUNCTION *compare;
	CASM_WRITE_FUNCTION *write;
	int record_size;
} CASM_NODEPROC;

/*----------------------------------------------------------------------------*/

typedef struct CASM_FRAME {
	struct CASM_FRAME *next;
	CASM_NODE *node;
	char *filename;
} CASM_FRAME;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_ADD {
	CASM_BINARY_NODE_HD
	int diff_values;
	float value;
	TBOOL is_add, dont_use_matte;
} CASM_NODE_ADD;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_LOCALBLUR {
	CASM_BINARY_NODE_HD
	float value;
} CASM_NODE_LOCALBLUR;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_LOCALTRANSP {
	CASM_BINARY_NODE_HD
	float value;
} CASM_NODE_LOCALTRANSP;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_BLUR {
	CASM_UNARY_NODE_HD
	float blur;
	int backlit;
} CASM_NODE_BLUR;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_MBLUR {
	CASM_UNARY_NODE_HD
	double bx;
	double by;
} CASM_NODE_MBLUR;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_BODY_SHADOW {
	CASM_UNARY_NODE_HD
	TPOINT p;
	int blur;
	float transp;
	TBOOL is_highlight;
} CASM_NODE_BODY_SHADOW;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_REFLECTION {
	CASM_UNARY_NODE_HD
	float stretch_x;
	float stretch_y;
	float skew;
	float blur_min;
	float blur_max;
	float transp_min;
	float transp_max;
	TBOOL is_shadow;
} CASM_NODE_REFLECTION;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_SHARPEN {
	CASM_UNARY_NODE_HD
	int value;
} CASM_NODE_SHARPEN;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_PREMULTIPLY {
	CASM_UNARY_NODE_HD
} CASM_NODE_PREMULTIPLY;

/*----------------------------------------------------------------------------*/

typedef struct OLD_USR_IMAGE {
	void *buffer;
	enum img_type type;
	int wrap, lx, ly;
	struct {
		LPIXEL *buffer;
		int offset, size;
	} cmap;
} OLD_USR_IMAGE;

typedef struct CASM_NODE_UDIT {
	CASM_N_ARY_NODE_HD
	char *keyword;
	char *op_name;
	char *type;
	int argc;
	char **argv;
	void (*op_function)(OLD_USR_IMAGE *img_in, OLD_USR_IMAGE *img_out, /* only for old udit*/
						int argc, char **argv);
	int plugin_index;
	int fx_index;
} CASM_NODE_UDIT;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_MATTE {
	CASM_BINARY_NODE_HD
	int revert;
} CASM_NODE_MATTE;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_WARP {
	CASM_BINARY_NODE_HD
	int grid_step;
	float intensity;
} CASM_NODE_WARP;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_OVR {
	CASM_BINARY_NODE_HD
} CASM_NODE_OVR;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_BACKLIT {
	CASM_BINARY_NODE_HD
	int diff_values;
	float value;
} CASM_NODE_BACKLIT;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_READ {
	CASM_NODE_HD
	char *filename;
	char *cmapname;
	char *op_name;
	int *no_ink, *no_paint;
	TBOOL keep_inks, keep_paints;
	int premultiply;
	int out_size;
	int argc;
	char **argv;
	void (*op_function)(OLD_USR_IMAGE *img_in,
						OLD_USR_IMAGE *img_out,
						int argc, char **argv);
	enum img_type type;
	int xsize, ysize, border;
	int sbx1, sby1, sbx2, sby2;
	double h_pos;
	UCHAR patch;
	CASM_WINDOW *bg_info;
	int occurrence;
	int full_read;
} CASM_NODE_READ;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_COLOR {
	CASM_UNARY_NODE_HD
	char *keyword;
	int plugin_index;
	int fx_index;
	int num_pars;
	float *pars;
} CASM_NODE_COLOR;

/*----------------------------------------------------------------------------*/
typedef struct CASM_NODE_COLORCARD {
	CASM_NODE_HD
	char *keyword;
	int plugin_index;
	int fx_index;
	int num_pars;
	float *pars;
} CASM_NODE_COLORCARD;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_AFFINE {
	CASM_UNARY_NODE_HD
	AFFINE aff;
	enum CASM_RESAMPLE_TYPE resample_type;
} CASM_NODE_AFFINE;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_S_FLIP {
	CASM_UNARY_NODE_HD
	double c;
} CASM_NODE_S_FLIP;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_EXTOP {
	CASM_UNARY_NODE_HD
	char *op_filename, *format_in, *format_out, *arguments;
} CASM_NODE_EXTOP;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_NO_INK {
	CASM_UNARY_NODE_HD
	int which_ink;
} CASM_NODE_NO_INK;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_UNARY {
	CASM_UNARY_NODE_HD
} CASM_NODE_UNARY;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_BINARY {
	CASM_BINARY_NODE_HD
} CASM_NODE_BINARY;

/*----------------------------------------------------------------------------*/

typedef struct CASM_NODE_N_ARY {
	CASM_N_ARY_NODE_HD
} CASM_NODE_N_ARY;

/*----------------------------------------------------------------------------*/

#endif