Commit d0e2755a authored by Manish Singh's avatar Manish Singh

moved to gimp-gap

parent 7f22c349
Makefile.in
Makefile
.deps
_libs
.libs
gap_filter
gap_plugins
gap_frontends
gap_decode_mpeg
gap_navigator_dialog
## Process this file with automake to produce Makefile.in
libexecdir = $(gimpplugindir)/plug-ins
scriptdatadir = $(gimpdatadir)/scripts
scriptdata_DATA = sel-to-anim-img.scm
EXTRA_DIST = \
README \
README_developers \
TESTPROT_iter_ALT \
iter_ALT/README_iter_subdirs \
iter_ALT/gen/plug_in_CML_explorer_iter_ALT.inc \
iter_ALT/gen/plug_in_alpha2color_iter_ALT.inc \
iter_ALT/gen/plug_in_blinds_iter_ALT.inc \
iter_ALT/gen/plug_in_borderaverage_iter_ALT.inc \
iter_ALT/gen/plug_in_checkerboard_iter_ALT.inc \
iter_ALT/gen/plug_in_color_map_iter_ALT.inc \
iter_ALT/gen/plug_in_colorify_iter_ALT.inc \
iter_ALT/gen/plug_in_cubism_iter_ALT.inc \
iter_ALT/gen/plug_in_destripe_iter_ALT.inc \
iter_ALT/gen/plug_in_diffraction_iter_ALT.inc \
iter_ALT/gen/plug_in_displace_iter_ALT.inc \
iter_ALT/gen/plug_in_edge_iter_ALT.inc \
iter_ALT/gen/plug_in_engrave_iter_ALT.inc \
iter_ALT/gen/plug_in_flarefx_iter_ALT.inc \
iter_ALT/gen/plug_in_fractal_trace_iter_ALT.inc \
iter_ALT/gen/plug_in_gauss_iir_iter_ALT.inc \
iter_ALT/gen/plug_in_gauss_iir2_iter_ALT.inc \
iter_ALT/gen/plug_in_gauss_rle_iter_ALT.inc \
iter_ALT/gen/plug_in_gauss_rle2_iter_ALT.inc \
iter_ALT/gen/plug_in_gfig_iter_ALT.inc \
iter_ALT/gen/plug_in_glasstile_iter_ALT.inc \
iter_ALT/gen/plug_in_grid_iter_ALT.inc \
iter_ALT/gen/plug_in_jigsaw_iter_ALT.inc \
iter_ALT/gen/plug_in_mblur_iter_ALT.inc \
iter_ALT/gen/plug_in_mosaic_iter_ALT.inc \
iter_ALT/gen/plug_in_newsprint_iter_ALT.inc \
iter_ALT/gen/plug_in_noisify_iter_ALT.inc \
iter_ALT/gen/plug_in_pixelize_iter_ALT.inc \
iter_ALT/gen/plug_in_randomize_hurl_iter_ALT.inc \
iter_ALT/gen/plug_in_randomize_pick_iter_ALT.inc \
iter_ALT/gen/plug_in_randomize_slur_iter_ALT.inc \
iter_ALT/gen/plug_in_ripple_iter_ALT.inc \
iter_ALT/gen/plug_in_rotate_iter_ALT.inc \
iter_ALT/gen/plug_in_scatter_hsv_iter_ALT.inc \
iter_ALT/gen/plug_in_sharpen_iter_ALT.inc \
iter_ALT/gen/plug_in_shift_iter_ALT.inc \
iter_ALT/gen/plug_in_spread_iter_ALT.inc \
iter_ALT/gen/plug_in_video_iter_ALT.inc \
iter_ALT/gen/plug_in_vpropagate_iter_ALT.inc \
iter_ALT/gen/plug_in_waves_iter_ALT.inc \
iter_ALT/gen/plug_in_whirl_pinch_iter_ALT.inc \
iter_ALT/gen/plug_in_wind_iter_ALT.inc \
iter_ALT/mod/plug_in_Twist_iter_ALT.inc \
iter_ALT/mod/plug_in_alienmap_iter_ALT.inc \
iter_ALT/mod/plug_in_applylens_iter_ALT.inc \
iter_ALT/mod/plug_in_blur_iter_ALT.inc \
iter_ALT/mod/plug_in_bump_map_iter_ALT.inc \
iter_ALT/mod/plug_in_convmatrix_iter_ALT.inc \
iter_ALT/mod/plug_in_depth_merge_iter_ALT.inc \
iter_ALT/mod/plug_in_despeckle_iter_ALT.inc \
iter_ALT/mod/plug_in_emboss_iter_ALT.inc \
iter_ALT/mod/plug_in_exchange_iter_ALT.inc \
iter_ALT/mod/plug_in_flame_iter_ALT.inc \
iter_ALT/mod/plug_in_lighting_iter_ALT.inc \
iter_ALT/mod/plug_in_map_object_iter_ALT.inc \
iter_ALT/mod/plug_in_maze_iter_ALT.inc \
iter_ALT/mod/plug_in_nlfilt_iter_ALT.inc \
iter_ALT/mod/plug_in_nova_iter_ALT.inc \
iter_ALT/mod/plug_in_oilify_iter_ALT.inc \
iter_ALT/mod/plug_in_pagecurl_iter_ALT.inc \
iter_ALT/mod/plug_in_papertile_iter_ALT.inc \
iter_ALT/mod/plug_in_plasma_iter_ALT.inc \
iter_ALT/mod/plug_in_polar_coords_iter_ALT.inc \
iter_ALT/mod/plug_in_sample_colorize_iter_ALT.inc \
iter_ALT/mod/plug_in_sinus_iter_ALT.inc \
iter_ALT/mod/plug_in_solid_noise_iter_ALT.inc \
iter_ALT/mod/plug_in_sparkle_iter_ALT.inc \
iter_ALT/old/plug_in_CentralReflection_iter_ALT.inc \
iter_ALT/old/plug_in_anamorphose_iter_ALT.inc \
iter_ALT/old/plug_in_blur2_iter_ALT.inc \
iter_ALT/old/plug_in_colorify_iter_ALT.inc \
iter_ALT/old/plug_in_encript_iter_ALT.inc \
iter_ALT/old/plug_in_figures_iter_ALT.inc \
iter_ALT/old/plug_in_gflare_iter_ALT.inc \
iter_ALT/old/plug_in_holes_iter_ALT.inc \
iter_ALT/old/plug_in_julia_iter_ALT.inc \
iter_ALT/old/plug_in_magic_eye_iter_ALT.inc \
iter_ALT/old/plug_in_mandelbrot_iter_ALT.inc \
iter_ALT/old/plug_in_randomize_iter_ALT.inc \
iter_ALT/old/plug_in_refract_iter_ALT.inc \
iter_ALT/old/plug_in_struc_iter_ALT.inc \
iter_ALT/old/plug_in_tileit_iter_ALT.inc \
iter_ALT/old/plug_in_universal_filter_iter_ALT.inc \
iter_ALT/old/plug_in_warp_iter_ALT.inc \
$(scriptdata_DATA)
libexec_PROGRAMS = \
gap_plugins \
gap_filter \
gap_frontends \
gap_navigator_dialog \
$(GAP_DECODE_MPEG)
EXTRA_PROGRAMS = \
gap_decode_mpeg
gap_plugins_SOURCES = \
gap_main.c \
gap_mov_exec.c \
gap_mov_exec.h \
gap_range_ops.c \
gap_range_ops.h \
gap_arr_dialog.c \
gap_arr_dialog.h \
gap_mov_dialog.c \
gap_mov_dialog.h \
gap_layer_copy.c \
gap_layer_copy.h \
gap_split.c \
gap_split.h \
gap_resi_dialog.c \
gap_resi_dialog.h \
gap_mod_layer.c \
gap_mod_layer.h \
gap_filter_pdb.c \
gap_filter_pdb.h \
gap_filter_codegen.c \
gap_dbbrowser_utils.c \
gap_dbbrowser_utils.h \
gap_match.c \
gap_match.h \
gap_lib.c \
gap_lib.h \
gap_exchange_image.c \
gap_exchange_image.h \
gap_pdb_calls.c \
gap_pdb_calls.h \
resize.c \
resize.h
gap_filter_SOURCES = \
gap_filter_main.c \
gap_dbbrowser_utils.c \
gap_dbbrowser_utils.h \
gap_filter_foreach.c \
gap_filter_iterators.c \
gap_filter_iterators.h \
gap_filter_pdb.c \
gap_filter_pdb.h \
gap_filter_codegen.c \
gap_arr_dialog.c \
gap_arr_dialog.h \
gap_pdb_calls.c \
gap_pdb_calls.h \
gap_filter.h
gap_frontends_SOURCES = \
gap_frontends_main.c \
gap_arr_dialog.c \
gap_arr_dialog.h \
gap_layer_copy.c \
gap_layer_copy.h \
gap_match.c \
gap_match.h \
gap_lib.c \
gap_lib.h \
gap_exchange_image.c \
gap_exchange_image.h \
gap_pdb_calls.c \
gap_pdb_calls.h \
gap_mpege.c \
gap_mpege.h \
gap_decode_xanim.c \
gap_decode_xanim.h
gap_decode_mpeg_SOURCES = \
gap_decode_mpeg_main.c \
gap_arr_dialog.c \
gap_arr_dialog.h \
gap_pdb_calls.c \
gap_pdb_calls.h
gap_navigator_dialog_SOURCES = \
gap_navigator_dialog.c \
gap_lib.c \
gap_lib.h \
gap_arr_dialog.c \
gap_arr_dialog.h \
gap_pdb_calls.c \
gap_pdb_calls.h \
gap_layer_copy.c \
gap_layer_copy.h \
gap_exchange_image.c \
gap_exchange_image.h
INCLUDES = \
-I$(top_srcdir) \
$(GTK_CFLAGS) \
-I$(includedir)
LDADD = \
$(top_builddir)/libgimp/libgimpui-$(LT_RELEASE).la \
$(top_builddir)/libgimpwidgets/libgimpwidgets-$(LT_RELEASE).la \
$(top_builddir)/libgimp/libgimp-$(LT_RELEASE).la \
$(top_builddir)/libgimpcolor/libgimpcolor-$(LT_RELEASE).la \
$(top_builddir)/libgimpbase/libgimpbase-$(LT_RELEASE).la \
$(GTK_LIBS) \
$(INTLLIBS)
gap_decode_mpeg_LDADD = \
$(top_builddir)/libgimp/libgimpui-$(LT_RELEASE).la \
$(top_builddir)/libgimpwidgets/libgimpwidgets-$(LT_RELEASE).la \
$(top_builddir)/libgimp/libgimp-$(LT_RELEASE).la \
$(top_builddir)/libgimpcolor/libgimpcolor-$(LT_RELEASE).la \
$(top_builddir)/libgimpbase/libgimpbase-$(LT_RELEASE).la \
$(LIBMPEG) \
$(GTK_LIBS) \
$(INTLLIBS)
This diff is collapsed.
This README_developers file should be read by Plug-In authors:
How to make a GIMP Plug-In an "Animated" one:
---------------------------------------------
First of all:
the plugin must be able to operate on a single Drawable,
----------------------------
further it must be able to run with last_values and in interactive mode.
-------------------- -----------
For the Animated Plugin Call we need an Iterator Procedure.
This Procedure is named like the Plugin with the extension "_Iterator".
The Iterator Procedure has to know the Plugin's internal datastructure
and has to modify Its "LastValues" step by step at each call.
The GAP-PDB-Browser <Image>/Filters/Animation/Filter All Layers
checks for the existance of Iterator Procedures in the PDB
1.) <plugin_name>_Iterator
2.) <plugin_name>_iter_ALT
If one of the iterator procedures was found in the PDB, the
"Apply Varying" Button is set sensitive to allow animated calls
for the selected procedure.
If you have gap prerelease 0.93.00 or later you can generate
the "plug_in_XXXX_Iterator"
for a Plugin as seperated Sourcefile, ready to compile.
(The Plugin must be found in the PDB at generation time)
# this example uses the Plugin whirlpinch
1.a # for bourne and ksh users:
GAP_DEBUG=y
export GAP_DEBUG
1.b # for csh users
setenv GAP_DEBUG y
2. # change to the directory, where you like to generate the sourcecode
cd /usr/local/gimp-0.99.17/plug-ins/whirlpinch
3. # start the Gimp
gimp
4. # open or create any image
File->New
5. # call the GAP Plugin for Animated Filter apply
# from within the image
Filters->Animation->Filter all Layers
# if you have set GAP_DEBUG as shown above,
# the Window should contain the Button "Gen Code by name"
# Type the name of your Plugin into the Search Inputfield
# (Click "Search by Name" Button, to check if the Plugin
# is available in the PDB)
# Then click "Gen Code by Name" Button and then "Cancel" Button.
# This will generate 4 files in the current directory:
gen_filter_iter_forward.c
gen_filter_iter_tab.c
plug_in_whirl_pinch_iter_ALT.inc
plug_in_whirl_pinch_iter.c
# You can quit the gimp and delete the 3 files named "gen_filter_iter_*"
6. # compile and link the generated Source, plug_in_whirl_pinch_iter.c
# and install the linked executeable
# in global or private plug-in directory
gimptool --install plug_in_whirl_pinch_iter.c
# (if you dont have gimptool, you can use a copy of the original Plugin's Makefile
# and change the Plugins <name> by <name_iter> to do that job.)
7. # start the gimp again,
# and open or create an Image that has at least 3 Layers.
# Test the "Animated Filter apply"
Filters->Animation->Filter all Layers
# Use the "Apply Varying" Button,
# it should be sensitive now (if all went well so far).
8. # In case of error:
# If you get an Error Message (in the shell, where you started the gimp)
# that looks like:
ERROR: xxxx_Iterator stored Data missmatch in size N != M
# you have to change the generated code manually.
# (check for calls to "gimp_set_data" or "gimp_get_data" that are using
# the plugins name as key argument within the plugin's sourcecode.
# The passed datastructure has to match exactly in size with the generated one
# for the example above the generated structure is:
# plug_in_whirl_pinch_iter.c:
typedef struct t_plug_in_whirl_pinch_Vals
{
gdouble whirl;
gdouble pinch;
gdouble radius;
} t_plug_in_whirl_pinch_Vals;
If you are the Author of a Plugin you may decide to include the _Iterator
within the original Sources of your Plugin. In that case you have to check
the name argument in the run procedure.
Example Code:
query()
{
static GParamDef args_plugin[] =
{
{PARAM_INT32, "run_mode", "non-interactive"},
{PARAM_IMAGE, "image", "the image"},
{PARAM_DRAWABLE, "drawable", "the drawable"},
{PARAM_INT32, "value", "my_parameter value"},
};
static int nargs_plugin = sizeof(args_plugin) / sizeof(args_plugin[0]);
static GParamDef args_iter[] =
{
{PARAM_INT32, "run_mode", "non-interactive"},
{PARAM_INT32, "total_steps", "total number of steps (# of layers-1 to apply the related plug-in)"},
{PARAM_FLOAT, "current_step", "current (for linear iterations this is the layerstack position, otherwise some value inbetween)"},
{PARAM_INT32, "len_struct", "length of stored data structure with id is equal to the plug_in proc_name"},
};
static int nargs_iter = sizeof(args_iter) / sizeof(args_iter[0]);
static GParamDef *return_vals = NULL;
static int nreturn_vals = 0;
gimp_install_procedure("plug_in_XXXX,
"plug_in_XXXX can do ....",
"",
"Authors Name",
"Copyright",
"Date",
"<Image>/Filters/Effects/XXXX",
"RGB*, INDEXED*, GRAY*",
PROC_PLUG_IN,
nargs_plugin, nreturn_vals,
args_plugin, return_vals);
gimp_install_procedure("plug_in_XXXX_Iterator,
"This extension calculates the modified values for one iterationstep for the call of plug_in_XXXX",
"",
"Authors Name",
"Copyright",
"Date",
NULL, /* do not appear in menus */
NULL,
PROC_EXTENSION,
nargs_iter, nreturn_vals,
args_iter, return_vals);
}
static void p_delta_long(long *val, long val_from, long val_to, gint32 total_steps, gdouble current_step)
{
double delta;
if(total_steps < 1) return;
delta = ((double)(val_to - val_from) / (double)total_steps) * ((double)total_steps - current_step);
*val = val_from + delta;
}
static void
run (char *name,
int n_params,
GParam *param,
int *nreturn_vals,
GParam **return_vals)
{
static GParam values[1];
GStatusType status = STATUS_SUCCESS;
GRunModeType run_mode;
gint32 len_struct;
gint32 total_steps;
gdouble current_step;
long pval; /* plug_in_XXXX has one parameter of type long */
long *pval_from, *pval_to; /* values for 1.st and last layer
* when they were processed by "plug_in_gap_layers_run_animfilter"
*/
*nreturn_vals = 1;
*return_vals = values;
values[0].type = PARAM_STATUS;
run_mode = param[0].data.d_int32;
if (strcmp (name, "plug_in_XXXX") == 0)
{
.... /* start the plugin itself */
}
else if (strcmp (name, "plug_in_XXXX_Iterator") == 0)
{
/* Iterator procedure is usually called from
* "plug_in_gap_layers_run_animfilter"
* (always run noninteractive)
*/
if ((run_mode == RUN_NONINTERACTIVE) && (n_params == 4))
{
total_steps = param[1].data.d_int32;
current_step = param[2].data.d_float;
len_struct = param[3].data.d_int32;
if(len_struct == sizeof(pval))
{
/* get _FROM and _TO data,
* This data was stored by plug_in_gap_layers_run_animfilter
*/
gimp_get_data("plug_in_XXXX_ITER_FROM", pval_from);
gimp_get_data("plug_in_XXXX_ITER_TO", pval_to);
p_delta_long(&pval, *pval_from, *pval_to, total_steps, current_step);
gimp_set_data("plug_in_XXXX", &pval, sizeof(pval));
}
else status = STATUS_CALLING_ERROR;
}
else status = STATUS_CALLING_ERROR;
}
values[0].type = PARAM_STATUS;
values[0].type = PARAM_STATUS;
}
Important for Plugin_Authors:
I have made Iterator Procedures for more than 50 existing Procedures.
(see gap_filter_iterators.c and subdirectories iter_ALT/*/*.inc)
If your Plugin is found in gap_filter_iterators.c, and You make updates
to your Plugin's interface, you should write (or generate) your own _Iterator Procedure,
to keep its Animated capabilities intact.
(You don't need to change gap sources to do that, because the Iterator
named "plug_in_XXXX_Iterator" is used rather than "plug_in_XXXX_Iterator_ALT" )
Here is a result List of the "Animated Filtercall" Tests
I tested more than 100 PDB-Procedures and the GAP's _iter_ALT Procedures
on a 3-Layer Testimage with Menu:
<Image>/Filters/Animation/Filter All Layers using "Apply Varying" Button
---------------------------------------------------
Testresults (used in Makefile 1.1)
--------------------------------------------------
14.03.1999
Test with PDB-Procedures (Plugins) that came with
gimp release 1.1.3
and all the generated (or manually changed) _iter_ALT Procedures
State:
+ ... Passed simple "Aplly Varying" Test OK
- ... Failed Test
. ... not tested
REM ... Removed the generated _iter_ALT Procedure
Plugin did not work with last value interface
but it would make sense if Interface would be OK.
Del ... Deleted the generated _iter_ALT Procedure
It does not make sense to call the Plugin
with varying Values
* ... Iter_ALT modified by Hand
State Procedure_name Testnotes
---------------------------------------------------------------------------
. * Colorify (not part of 1.1.3)
-Del perl_fu_blowinout (not tested, perl )
-Del perl_fu_feedback (not tested, perl )
-Del perl_fu_prep4gif (not tested, perl )
-Del perl_fu_scratches (not tested, perl )
-Del perl_fu_terraltext (not tested, perl )
-Del perl_fu_tex_string_to_float (not tested, perl )
-Del perl_fu_webify (not tested, perl )
-Del perl_fu_windify (not tested, perl )
-Del perl_fu_xach_blocks (not tested, perl )
-Del perl_fu_xach_shadows (not tested, perl )
-Del perl_fu_xachvision (not tested, perl )
- plug_in_CML_explorer
. * plug_in_CentralReflection (not part of 1.1.3)
+ * plug_in_Twist
+ * plug_in_alienmap
.Del plug_in_align_layers
. plug_in_alpha2color (not tested, perl required)
. plug_in_anamorphose (not part of 1.1.3)
.Del plug_in_animationoptimize
.Del plug_in_animationplay
.Del plug_in_animationunoptimize
-REM plug_in_apply_canvas ERROR: no stored data found for Key plug_in_apply_canvas
+ plug_in_applylens
-Del plug_in_autocrop ERROR: no stored data found for Key plug_in_autocrop
-Del plug_in_autostretch_hsv ERROR: no stored data found for Key plug_in_autostretch_hsv
+ plug_in_blinds
+ * plug_in_blur
. * plug_in_blur2 (not part of 1.1.3)
-Del plug_in_blur_randomize ERROR: no stored data found for Key plug_in_blur_randomize
+ plug_in_borderaverage
+ plug_in_bump_map
-Del plug_in_c_astretch ERROR: no stored data found for Key plug_in_c_astretch
+ plug_in_checkerboard
-Del plug_in_color_adjust ERROR: no stored data found for Key plug_in_color_adjust
+ plug_in_color_map
-REM plug_in_colorify ERROR: no stored data found for Key plug_in_colorify
.Del plug_in_compose
+ plug_in_convmatrix
+ plug_in_cubism
.Del plug_in_decompose
.Del plug_in_deinterlace
+ * plug_in_depth_merge
+ * plug_in_despeckle
+ plug_in_destripe
+ plug_in_diffraction
+ plug_in_displace
-Del plug_in_ditherize ERROR: no stored data found for Key plug_in_ditherize (perl)
+ plug_in_edge
+ * plug_in_emboss
. * plug_in_encript (not part of 1.1.3)
+ plug_in_engrave
- * plug_in_exchange (interface changed since 1.0, CRASH: gimp_get_data missing when RUN_WITH_LAST_VALS)
.Del plug_in_export_palette
. * plug_in_figures (not part of 1.1.3)
.Del plug_in_film
-REM plug_in_filter_pack ERROR: no stored data found for Key plug_in_filter_pack
+ plug_in_flame
+ plug_in_flarefx
- * plug_in_fractal_trace OK Button disappeared at 1.st press ?????
+ plug_in_gauss_iir
+ plug_in_gauss_rle
.Del plug_in_gfig ERROR: no stored data found for Key plug_in_gfig
. * plug_in_gflare (not part of 1.1.3)
+ plug_in_glasstile
.Del plug_in_gradmap ERROR: no stored data found for Key plug_in_gradmap
+ plug_in_grid
-Del plug_in_guillotine ERROR: no stored data found for Key plug_in_guillotine
. * plug_in_holes (not part of 1.1.3)
-Del plug_in_hot
-Del plug_in_ifs_compose ERROR: no stored data found for Key plug_in_ifs_compose
-Del plug_in_illusion OK Button disappeared at 1.st press ?????
.Del plug_in_image_rot270
.Del plug_in_image_rot90
-Del plug_in_iwarp Has No RUN_WITH_LAST_VALS support, (but can animate
+ plug_in_jigsaw
. plug_in_julia (not part of 1.1.3)
-Del plug_in_laplace ERROR: no stored data found for Key plug_in_laplace
.Del plug_in_layer_rot270
.Del plug_in_layer_rot90
.Del plug_in_layers_import
-Del plug_in_lic CRASH + ERROR: no stored data found for Key plug_in_lic
+ * plug_in_lighting
. * plug_in_magic_eye (not part of 1.1.3)
.Del plug_in_mail_image
-Del plug_in_make_seamless ERROR: no stored data found for Key plug_in_make_seamless
. * plug_in_mandelbrot (not part of 1.1.3)
+ * plug_in_map_object see report below:
.Del plug_in_max_rgb
+ * plug_in_maze (interface changed)
+ plug_in_mblur
+ plug_in_mosaic
+ plug_in_newsprint
+ * plug_in_nlfilt
+ plug_in_noisify
-Del plug_in_normalize ERROR: no stored data found for Key plug_in_normalize
+ * plug_in_nova
+ * plug_in_oilify (interface changed)
- * plug_in_pagecurl ERROR: no stored data found for Key plug_in_pagecurl
-Del plug_in_paper_tile OK Button disappeared at 1.st press ?????
+ * plug_in_papertile
+ plug_in_pixelize
+ * plug_in_plasma
+ * plug_in_polar_coords (interface changed)
-Del plug_in_qbist
. * plug_in_randomize (not part of 1.1.3)
+ plug_in_randomize_hurl
+ plug_in_randomize_pick
+ plug_in_randomize_slur
. plug_in_refract (not part of 1.1.3)
+ plug_in_ripple
+ plug_in_rotate
+ * plug_in_sample_colorize
+ plug_in_scatter_hsv
.Del plug_in_semiflatten
+ plug_in_sharpen
+ plug_in_shift
+ plug_in_sinus
- plug_in_small_tiles ERROR: no stored data found for Key plug_in_small_tiles
.Del plug_in_smooth_palette
.Del plug_in_sobel
+ * plug_in_solid_noise
+ * plug_in_sparkle
+ plug_in_spread
. plug_in_struc (not part of 1.1.3)
-Del plug_in_the_egg ERROR: no stored data found for Key plug_in_the_egg