diff options
author | Lars-Dominik Braun <lars@6xq.net> | 2015-05-02 21:36:31 +0200 |
---|---|---|
committer | Lars-Dominik Braun <lars@6xq.net> | 2015-05-02 21:36:31 +0200 |
commit | b2dfbdf4d9644c684c938cb2730deab66aa06d9b (patch) | |
tree | 2710c26a94f8c85887389619682892363303f9db /src/flam3.h | |
parent | fb1c90e18b0d77a8b4035461722b89c7db46db51 (diff) | |
download | pucket-b2dfbdf4d9644c684c938cb2730deab66aa06d9b.tar.gz pucket-b2dfbdf4d9644c684c938cb2730deab66aa06d9b.tar.bz2 pucket-b2dfbdf4d9644c684c938cb2730deab66aa06d9b.zip |
Move out of subdir
Diffstat (limited to 'src/flam3.h')
-rw-r--r-- | src/flam3.h | 691 |
1 files changed, 0 insertions, 691 deletions
diff --git a/src/flam3.h b/src/flam3.h deleted file mode 100644 index f46e09e..0000000 --- a/src/flam3.h +++ /dev/null @@ -1,691 +0,0 @@ -/* - FLAM3 - cosmic recursive fractal flames - Copyright (C) 1992-2009 Spotworks LLC - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. -*/ - - -#ifndef flam3_included -#define flam3_included - -#include <stdio.h> -#include <libxml/parser.h> -#include "isaac.h" - -#if defined(_MSC_VER) /* VC++ */ -#include <windows.h> -#define EXPORT __declspec (dllexport) -#else -#define EXPORT -#endif - -EXPORT char *flam3_version(); - -#define flam3_palette_random (-1) -#define flam3_palette_interpolated (-2) - -#define flam3_defaults_on (1) -#define flam3_defaults_off (0) - -#define flam3_name_len 64 - -#define flam3_print_edits (1) -#define flam3_dont_print_edits (0) - -//typedef double flam3_palette[256][3]; -typedef struct { - double index; - double color[4]; -} flam3_palette_entry; - -typedef flam3_palette_entry flam3_palette[256]; - -int flam3_get_palette(int palette_index, flam3_palette p, double hue_rotation); - -#define flam3_variation_random (-1) -#define flam3_variation_random_fromspecified (-2) - -extern char *flam3_variation_names[]; - -#define flam3_nvariations 99 -#define flam3_nxforms 12 - -#define flam3_parent_fn_len 30 - -#define flam3_interpolation_linear 0 -#define flam3_interpolation_smooth 1 - -#define flam3_inttype_linear 0 -#define flam3_inttype_log 1 -#define flam3_inttype_compat 2 /* Linear and old behaviour */ -#define flam3_inttype_older 3 /* rotate padded xforms */ - -#define flam3_palette_interpolation_hsv 0 -#define flam3_palette_interpolation_sweep 1 - -#define flam3_max_action_length 10000 - -#define flam3_palette_mode_step 0 -#define flam3_palette_mode_linear 1 - -#define VAR_LINEAR 0 -#define VAR_SINUSOIDAL 1 -#define VAR_SPHERICAL 2 -#define VAR_SWIRL 3 -#define VAR_HORSESHOE 4 -#define VAR_POLAR 5 -#define VAR_HANDKERCHIEF 6 -#define VAR_HEART 7 -#define VAR_DISC 8 -#define VAR_SPIRAL 9 -#define VAR_HYPERBOLIC 10 -#define VAR_DIAMOND 11 -#define VAR_EX 12 -#define VAR_JULIA 13 -#define VAR_BENT 14 -#define VAR_WAVES 15 -#define VAR_FISHEYE 16 -#define VAR_POPCORN 17 -#define VAR_EXPONENTIAL 18 -#define VAR_POWER 19 -#define VAR_COSINE 20 -#define VAR_RINGS 21 -#define VAR_FAN 22 -#define VAR_BLOB 23 -#define VAR_PDJ 24 -#define VAR_FAN2 25 -#define VAR_RINGS2 26 -#define VAR_EYEFISH 27 -#define VAR_BUBBLE 28 -#define VAR_CYLINDER 29 -#define VAR_PERSPECTIVE 30 -#define VAR_NOISE 31 -#define VAR_JULIAN 32 -#define VAR_JULIASCOPE 33 -#define VAR_BLUR 34 -#define VAR_GAUSSIAN_BLUR 35 -#define VAR_RADIAL_BLUR 36 -#define VAR_PIE 37 -#define VAR_NGON 38 -#define VAR_CURL 39 -#define VAR_RECTANGLES 40 -#define VAR_ARCH 41 -#define VAR_TANGENT 42 -#define VAR_SQUARE 43 -#define VAR_RAYS 44 -#define VAR_BLADE 45 -#define VAR_SECANT2 46 -#define VAR_TWINTRIAN 47 -#define VAR_CROSS 48 -#define VAR_DISC2 49 -#define VAR_SUPER_SHAPE 50 -#define VAR_FLOWER 51 -#define VAR_CONIC 52 -#define VAR_PARABOLA 53 -#define VAR_BENT2 54 -#define VAR_BIPOLAR 55 -#define VAR_BOARDERS 56 -#define VAR_BUTTERFLY 57 -#define VAR_CELL 58 -#define VAR_CPOW 59 -#define VAR_CURVE 60 -#define VAR_EDISC 61 -#define VAR_ELLIPTIC 62 -#define VAR_ESCHER 63 -#define VAR_FOCI 64 -#define VAR_LAZYSUSAN 65 -#define VAR_LOONIE 66 -#define VAR_PRE_BLUR 67 -#define VAR_MODULUS 68 -#define VAR_OSCILLOSCOPE 69 -#define VAR_POLAR2 70 -#define VAR_POPCORN2 71 -#define VAR_SCRY 72 -#define VAR_SEPARATION 73 -#define VAR_SPLIT 74 -#define VAR_SPLITS 75 -#define VAR_STRIPES 76 -#define VAR_WEDGE 77 -#define VAR_WEDGE_JULIA 78 -#define VAR_WEDGE_SPH 79 -#define VAR_WHORL 80 -#define VAR_WAVES2 81 -#define VAR_EXP 82 -#define VAR_LOG 83 -#define VAR_SIN 84 -#define VAR_COS 85 -#define VAR_TAN 86 -#define VAR_SEC 87 -#define VAR_CSC 88 -#define VAR_COT 89 -#define VAR_SINH 90 -#define VAR_COSH 91 -#define VAR_TANH 92 -#define VAR_SECH 93 -#define VAR_CSCH 94 -#define VAR_COTH 95 -#define VAR_AUGER 96 -#define VAR_FLUX 97 -#define VAR_MOBIUS 98 - -typedef struct { - - double badvals; - long int num_iters; - int render_seconds; - -} stat_struct; - -typedef struct { - - unsigned int width, height; - int version; - int id; - - /* There are 256 levels of gray to work with */ - double intensity_weight[256]; - unsigned int bin_size[256]; - unsigned int bin_offset[256]; - - /* Pointer to newly allocated memory; we will be allocating */ - /* 2*w*h ushorts for this storage. The bin offset will */ - /* provide the starting point for a random selection from */ - /* (bin size) ordered pairs */ - unsigned short *rowcols; - -} flam3_image_store; - - -typedef struct xform { - double var[flam3_nvariations]; /* interp coefs between variations */ - double c[3][2]; /* the coefs to the affine part of the function */ - double post[3][2]; /* the post transform */ - double density; /* probability that this function is chosen. 0 - 1 */ - double color; /* color coords for this function. 0 - 1 */ - double color_speed; /* scaling factor on color added to current iteration */ - double animate; /* whether or not this xform rotates (in sheep) >0 means stationary */ - double opacity; /* 0=invisible, 1=totally visible */ - double vis_adjusted; /* adjusted visibility for better transitions */ - - int padding;/* Set to 1 for padding xforms */ - double wind[2]; /* winding numbers */ - - int precalc_angles_flag; - int precalc_atan_xy_flag; - int precalc_atan_yx_flag; - double has_preblur; - int has_post; - - /* Params for new parameterized variations */ - /* Blob */ - double blob_low; - double blob_high; - double blob_waves; - - /* PDJ */ - double pdj_a; - double pdj_b; - double pdj_c; - double pdj_d; - - /* Fan2 */ - double fan2_x; - double fan2_y; - - /* Rings2 */ - double rings2_val; - - /* Perspective */ - double perspective_angle; - double perspective_dist; - - /* Julia_N */ - double julian_power; - double julian_dist; - - /* Julia_Scope */ - double juliascope_power; - double juliascope_dist; - - /* Radial_Blur */ - double radial_blur_angle; - - /* Pie */ - double pie_slices; - double pie_rotation; - double pie_thickness; - - /* Ngon */ - double ngon_sides; - double ngon_power; - double ngon_circle; - double ngon_corners; - - /* Curl */ - double curl_c1; - double curl_c2; - - /* Rectangles */ - double rectangles_x; - double rectangles_y; - - /* AMW */ - double amw_amp; - - /* Disc 2 */ - double disc2_rot; - double disc2_twist; - - /* Supershape */ - double super_shape_rnd; - double super_shape_m; - double super_shape_n1; - double super_shape_n2; - double super_shape_n3; - double super_shape_holes; - - /* Flower */ - double flower_petals; - double flower_holes; - - /* Conic */ - double conic_eccentricity; - double conic_holes; - - /* Parabola */ - double parabola_height; - double parabola_width; - - /* Bent2 */ - double bent2_x; - double bent2_y; - - /* Bipolar */ - double bipolar_shift; - - /* Cell */ - double cell_size; - - /* Cpow */ - double cpow_r; - double cpow_i; - double cpow_power; /* int in apo */ - - /* Curve */ - double curve_xamp,curve_yamp; - double curve_xlength,curve_ylength; - - /* Escher */ - double escher_beta; - - /* Lazysusan */ - double lazysusan_spin; - double lazysusan_space; - double lazysusan_twist; - double lazysusan_x, lazysusan_y; - - /* Modulus */ - double modulus_x, modulus_y; - - /* Oscope */ - double oscope_separation; - double oscope_frequency; - double oscope_amplitude; - double oscope_damping; - - /* Popcorn2 */ - double popcorn2_x, popcorn2_y, popcorn2_c; - - /* Separation */ - double separation_x, separation_xinside; - double separation_y, separation_yinside; - - /* Split */ - double split_xsize; - double split_ysize; - - /* Splits */ - double splits_x,splits_y; - - /* Stripes */ - double stripes_space; - double stripes_warp; - - /* Wedge */ - double wedge_angle, wedge_hole; - double wedge_count, wedge_swirl; - - /* Wedge_Julia */ - double wedge_julia_angle; - double wedge_julia_count; - double wedge_julia_power; - double wedge_julia_dist; - - /* Wedge_Sph */ - double wedge_sph_angle, wedge_sph_count; - double wedge_sph_hole, wedge_sph_swirl; - - /* Whorl */ - double whorl_inside, whorl_outside; - - /* Waves2 */ - double waves2_freqx, waves2_scalex; - double waves2_freqy, waves2_scaley; - - /* Auger */ - double auger_sym, auger_weight; - double auger_freq, auger_scale; - - /* Flux */ - double flux_spread; - - /* Mobius */ - double mobius_re_a, mobius_im_a; - double mobius_re_b, mobius_im_b; - double mobius_re_c, mobius_im_c; - double mobius_re_d, mobius_im_d; - - /* If perspective is used, precalculate these values */ - /* from the _angle and _dist */ - double persp_vsin; - double persp_vfcos; - - /* If Julia_N is used, precalculate these values */ - double julian_rN; - double julian_cn; - - /* If Julia_Scope is used, precalculate these values */ - double juliascope_rN; - double juliascope_cn; - - /* if Wedge_Julia, precalculate */ - double wedgeJulia_rN; - double wedgeJulia_cn; - double wedgeJulia_cf; - - /* If Radial_Blur is used, precalculate these values */ - double radialBlur_spinvar; - double radialBlur_zoomvar; - - /* Precalculate these values for waves */ - double waves_dx2; - double waves_dy2; - - /* If disc2 is used, precalculate these values */ - double disc2_sinadd; - double disc2_cosadd; - double disc2_timespi; - - /* If supershape is used, precalculate these values */ - double super_shape_pm_4; - double super_shape_pneg1_n1; - - int num_active_vars; - double active_var_weights[flam3_nvariations]; - int varFunc[flam3_nvariations]; - - int motion_freq; - int motion_func; - - struct xform *motion; - int num_motion; - - -} flam3_xform; - -typedef struct { - char flame_name[flam3_name_len+1]; /* 64 chars plus a null */ - double time; - int interpolation; - int interpolation_type; - int palette_interpolation; - int num_xforms; - int final_xform_index; - int final_xform_enable; - flam3_xform *xform; - - /* Xaos implementation */ - double **chaos; - int chaos_enable; - - int genome_index; /* index into source file */ - char parent_fname[flam3_parent_fn_len]; /* base filename where parent was located */ - int symmetry; /* 0 means none */ - flam3_palette palette; - char *input_image; /* preview/temporary! */ - int palette_index; - double brightness; /* 1.0 = normal */ - double contrast; /* 1.0 = normal */ - double gamma; - double highlight_power; - int width, height; /* of the final image */ - int spatial_oversample; - double center[2]; /* of camera */ - double rot_center[2]; /* really the center */ - double rotate; /* camera */ - double vibrancy; /* blend between color algs (0=old,1=new) */ - double hue_rotation; /* applies to cmap, 0-1 */ - double background[3]; - double zoom; /* effects ppu, sample density, scale */ - double pixels_per_unit; /* vertically */ - double spatial_filter_radius; /* radius of spatial filter */ - int spatial_filter_select; /* selected spatial filter */ -// double (*spatial_filter_func)(double); /* spatial filter kernel function */ -// double spatial_filter_support; /* size of standard kernel for specific function */ - double sample_density; /* samples per pixel (not bucket) */ - /* in order to motion blur more accurately we compute the logs of the - sample density many times and average the results. */ - /* nbatches is the number of times the buckets are filtered into - the abucket log accumulator */ - /* ntemporal_samples is the number of time steps per batch. this many - interpolated control points are used per batch and accumulated */ - int nbatches; - int ntemporal_samples; - - /* Density estimation parameters for blurring low density hits */ - double estimator; /* Filter width for bin with one hit */ - double estimator_curve; /* Exponent on decay function ( MAX / a^(k-1) ) */ - double estimator_minimum; /* Minimum filter width used - - forces filter to be used of at least this width on all pts */ - - /* XML Edit structure */ - xmlDocPtr edits; - - /* Small-gamma linearization threshold */ - double gam_lin_thresh; - - /* for cmap_interpolated hack */ - int palette_index0; - double hue_rotation0; - int palette_index1; - double hue_rotation1; - double palette_blend; - - int temporal_filter_type; /* Temporal filters */ - double temporal_filter_width, temporal_filter_exp; - - int palette_mode; - - -} flam3_genome; - -typedef struct { - int from; - int to; - double scalar; -} flam3_chaos_entry; - -/* xform manipulation */ - -void flam3_add_motion_element(flam3_xform *xf); -void flam3_add_xforms(flam3_genome *cp, int num_to_add, int interp_padding, int final_flag); -void flam3_delete_xform(flam3_genome *thiscp, int idx_to_delete); -void flam3_copy_xform(flam3_xform *dest, flam3_xform *src); -void flam3_copy(flam3_genome *dest, flam3_genome *src); -void flam3_copyx(flam3_genome *dest, flam3_genome *src, int num_std, int num_final); -void flam3_copy_params(flam3_xform *dest, flam3_xform *src, int varn); -void flam3_delete_motion_elements(flam3_xform *xf); - -EXPORT int flam3_xform_preview(flam3_genome *cp, int xi, double range, int numvals, int depth, double *result, randctx *rc); -EXPORT unsigned short* flam3_create_xform_distrib(flam3_genome *cp); -int flam3_create_chaos_distrib(flam3_genome *cp, int xi, unsigned short *xform_distrib); -int flam3_check_unity_chaos(flam3_genome *cp); -void clear_cp(flam3_genome *cp, int def_flag); - -/* samples is array nsamples*4 long of x,y,color triples. - using (samples[0], samples[1]) as starting XY point and - (samples[2], samples[3]) as starting color coordinate, - perform fuse iterations and throw them away, then perform - nsamples iterations and save them in the samples array */ -EXPORT int flam3_iterate(flam3_genome *g, int nsamples, int fuse, double *samples, - unsigned short *xform_distrib, randctx *rc); - -void apply_motion_parameters(flam3_xform *xf, flam3_xform *addto, double blend); - -/* genomes is array ngenomes long, with times set and in ascending order. - interpolate to the requested time and return in result */ -EXPORT void flam3_interpolate(flam3_genome *genomes, int ngenomes, double time, double stagger, flam3_genome *result); - -/* print genome to given file with extra_attributes if not NULL */ -EXPORT void flam3_print(FILE *f, flam3_genome *g, char *extra_attributes, int print_edits); -void flam3_print_xform(FILE *f, flam3_xform *x, int final_flag, int numstd, double *chaos_row, int motion_flag); -EXPORT char *flam3_print_to_string(flam3_genome *cp); - -/* ivars is a list of variations to use, or flam3_variation_random */ -/* ivars_n is the number of values in ivars to select from. */ -/* sym is either a symmetry group or 0 meaning random or no symmetry */ -/* spec_xforms specifies the number of xforms to use, setting to 0 makes the number random. */ -EXPORT void flam3_random(flam3_genome *g, int *ivars, int ivars_n, int sym, int spec_xforms); - -void add_to_action(char *action, char *addtoaction); - -EXPORT void flam3_mutate(flam3_genome *cp, int mutate_mode, int *ivars, int ivars_n, int sym, double speed, randctx *rc, char *action); -EXPORT void flam3_cross(flam3_genome *cp0, flam3_genome *cp1, flam3_genome *out, int cross_mode, randctx *rc, char *action); - -/* return NULL in case of error */ -EXPORT flam3_genome *flam3_parse_xml2(char *s, char *fn, int default_flag, int *ncps); -flam3_genome *flam3_parse_from_file(FILE *f, char *fn, int default_flag, int *ncps); - -void flam3_add_symmetry(flam3_genome *g, int sym); - -void flam3_improve_colors(flam3_genome *g, int ntries, int change_palette, int color_resolution); -EXPORT int flam3_colorhist(flam3_genome *cp, int num_batches, randctx *rc, double *hist); -EXPORT int flam3_estimate_bounding_box(flam3_genome *g, double eps, int nsamples, - double *bmin, double *bmax, randctx *rc); -void flam3_rotate(flam3_genome *g, double angle, int interp_type); /* angle in degrees */ - -double flam3_dimension(flam3_genome *g, int ntries, int clip_to_camera); -double flam3_lyapunov(flam3_genome *g, int ntries); - -void flam3_apply_template(flam3_genome *cp, flam3_genome *templ); - -EXPORT int flam3_count_nthreads(void); - -typedef struct { -// double temporal_filter_radius; - double pixel_aspect_ratio; /* width over height of each pixel */ - flam3_genome *genomes; - int ngenomes; - int verbose; - int bits; - int bytes_per_channel; - int earlyclip; - double time; - int (*progress)(void *, double, int, double); - void *progress_parameter; - randctx rc; - int nthreads; - int sub_batch_size; -} flam3_frame; - - -#define flam3_field_both 0 -#define flam3_field_even 1 -#define flam3_field_odd 2 - -/* out is pixel array. - pixels are rgb or rgba if nchan is 3 or 4. */ -EXPORT int flam3_render(flam3_frame *f, void *out, int field, int nchan, int transp, stat_struct *stats); - -EXPORT double flam3_render_memory_required(flam3_frame *f); -EXPORT int flam3_make_strip(flam3_genome *cp, int nstrips, int stripnum); -void rotate_by(double *p, double *center, double by); - - -double flam3_random01(); -double flam3_random11(); -int flam3_random_bit(); - -/* ISAAC random numbers */ -double flam3_random_isaac_01(randctx *); -double flam3_random_isaac_11(randctx *); -int flam3_random_isaac_bit(randctx *); - -EXPORT void flam3_init_frame(flam3_frame *f); - -/* External memory helpers */ -EXPORT void *flam3_malloc(size_t size); -EXPORT void flam3_free(void *ptr); - -void flam3_srandom(); - -flam3_genome *sheep_loop(flam3_genome *cp, double blend); -flam3_genome *sheep_edge(flam3_genome *cp, double blend, int seqflag, double stagger); - -/* Motion function indices */ -#define MOTION_SIN 1 -#define MOTION_TRIANGLE 2 -#define MOTION_HILL 3 - -/* Mutation modes */ -#define MUTATE_NOT_SPECIFIED -1 -#define MUTATE_ALL_VARIATIONS 0 -#define MUTATE_ONE_XFORM_COEFS 1 -#define MUTATE_ADD_SYMMETRY 2 -#define MUTATE_POST_XFORMS 3 -#define MUTATE_COLOR_PALETTE 4 -#define MUTATE_DELETE_XFORM 5 -#define MUTATE_ALL_COEFS 6 - -/* Cross modes */ -#define CROSS_NOT_SPECIFIED -1 -#define CROSS_UNION 0 -#define CROSS_INTERPOLATE 1 -#define CROSS_ALTERNATE 2 - -/* Filters */ -/* Spatial filter kernels */ -#define flam3_gaussian_kernel 0 -#define flam3_hermite_kernel 1 -#define flam3_box_kernel 2 -#define flam3_triangle_kernel 3 -#define flam3_bell_kernel 4 -#define flam3_b_spline_kernel 5 -#define flam3_lanczos3_kernel 6 -#define flam3_lanczos2_kernel 7 -#define flam3_mitchell_kernel 8 -#define flam3_blackman_kernel 9 -#define flam3_catrom_kernel 10 -#define flam3_hamming_kernel 11 -#define flam3_hanning_kernel 12 -#define flam3_quadratic_kernel 13 - -/* Temporal filters */ -#define flam3_temporal_box 0 -#define flam3_temporal_gaussian 1 -#define flam3_temporal_exp 2 - - -#endif |