#ifndef _PLUGIN_INFO_H #define _PLUGIN_INFO_H #include "goom_typedefs.h" #include "goom_config.h" #include "goom_graphic.h" #include "goom_config_param.h" #include "goom_visual_fx.h" #include "goom_filters.h" #include "goom_tools.h" #include "goomsl.h" typedef struct { char drawIFS; char drawPoints; char drawTentacle; char drawScope; int farScope; int rangemin; int rangemax; } GoomState; #define STATES_MAX_NB 128 /** * Gives informations about the sound. */ struct _SOUND_INFO { /* nota : a Goom is just a sound event... */ int timeSinceLastGoom; /* >= 0 */ float goomPower; /* power of the last Goom [0..1] */ int timeSinceLastBigGoom; /* >= 0 */ float volume; /* [0..1] */ short samples[2][512]; /* other "internal" datas for the sound_tester */ float goom_limit; /* auto-updated limit of goom_detection */ float bigGoomLimit; float accelvar; /* acceleration of the sound - [0..1] */ float speedvar; /* speed of the sound - [0..100] */ int allTimesMax; int totalgoom; /* number of goom since last reset * (a reset every 64 cycles) */ float prov_max; /* accel max since last reset */ int cycle; /* private */ PluginParam volume_p; PluginParam speed_p; PluginParam accel_p; PluginParam goom_limit_p; PluginParam goom_power_p; PluginParam last_goom_p; PluginParam last_biggoom_p; PluginParam biggoom_speed_limit_p; PluginParam biggoom_factor_p; PluginParameters params; /* contains the previously defined parameters. */ }; /** * Allows FXs to know the current state of the plugin. */ struct _PLUGIN_INFO { /* public datas */ int nbParams; PluginParameters *params; /* private datas */ struct _SIZE_TYPE { int width; int height; int size; /* == screen.height * screen.width. */ } screen; SoundInfo sound; int nbVisuals; VisualFX **visuals; /* pointers on all the visual fx */ /** The known FX */ VisualFX convolve_fx; VisualFX star_fx; VisualFX zoomFilter_fx; VisualFX tentacles_fx; VisualFX ifs_fx; /** image buffers */ guint32 *pixel; guint32 *back; Pixel *p1, *p2; Pixel *conv; Pixel *outputBuf; /** state of goom */ guint32 cycle; GoomState states[STATES_MAX_NB]; int statesNumber; int statesRangeMax; GoomState *curGState; /** effet de ligne.. */ GMLine *gmline1; GMLine *gmline2; /** sinus table */ int sintable[0x10000]; /* INTERNALS */ /** goom_update internals. * I took all static variables from goom_update and put them here.. for the moment. */ struct { int lockvar; /* pour empecher de nouveaux changements */ int goomvar; /* boucle des gooms */ int loopvar; /* mouvement des points */ int stop_lines; int ifs_incr; /* dessiner l'ifs (0 = non: > = increment) */ int decay_ifs; /* disparition de l'ifs */ int recay_ifs; /* dedisparition de l'ifs */ int cyclesSinceLastChange; /* nombre de Cycle Depuis Dernier Changement */ int drawLinesDuration; /* duree de la transition entre afficher les lignes ou pas */ int lineMode; /* l'effet lineaire a dessiner */ float switchMultAmount; /* SWITCHMULT (29.0f/30.0f) */ int switchIncrAmount; /* 0x7f */ float switchMult; /* 1.0f */ int switchIncr; /* = SWITCHINCR; */ int stateSelectionRnd; int stateSelectionBlocker; int previousZoomSpeed; int timeOfTitleDisplay; char titleText[1024]; ZoomFilterData zoomFilterData; } update; struct { int numberOfLinesInMessage; char message[0x800]; int affiche; int longueur; } update_message; struct { void (*draw_line) (Pixel *data, int x1, int y1, int x2, int y2, int col, int screenx, int screeny); void (*zoom_filter) (int sizeX, int sizeY, Pixel *src, Pixel *dest, int *brutS, int *brutD, int buffratio, int precalCoef[16][16]); } methods; GoomRandom *gRandom; GoomSL *scanner; GoomSL *main_scanner; const char *main_script_str; }; void plugin_info_init(PluginInfo *p, int nbVisual); /* i = [0..p->nbVisual-1] */ void plugin_info_add_visual(PluginInfo *p, int i, VisualFX *visual); #endif