4 * ***** BEGIN GPL LICENSE BLOCK *****
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software Foundation,
18 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21 * All rights reserved.
23 * The Original Code is: all of this file.
25 * Contributor(s): none yet.
27 * ***** END GPL LICENSE BLOCK *****
29 #ifndef DNA_SCENE_TYPES_H
30 #define DNA_SCENE_TYPES_H
36 #include "DNA_vec_types.h"
37 #include "DNA_listBase.h"
38 #include "DNA_scriptlink_types.h"
50 struct Base *next, *prev;
51 unsigned int lay, selcol;
54 struct Object *object;
57 typedef struct AviCodecData {
58 void *lpFormat; /* save format */
59 void *lpParms; /* compressor options */
60 unsigned int cbFormat; /* size of lpFormat buffer */
61 unsigned int cbParms; /* size of lpParms buffer */
63 unsigned int fccType; /* stream type, for consistency */
64 unsigned int fccHandler; /* compressor */
65 unsigned int dwKeyFrameEvery; /* keyframe rate */
66 unsigned int dwQuality; /* compress quality 0-10,000 */
67 unsigned int dwBytesPerSecond; /* bytes per second */
68 unsigned int dwFlags; /* flags... see below */
69 unsigned int dwInterleaveEvery; /* for non-video streams only */
72 char avicodecname[128];
75 typedef struct QuicktimeCodecData {
77 void *cdParms; /* codec/compressor options */
78 void *pad; /* padding */
80 unsigned int cdSize; /* size of cdParms buffer */
81 unsigned int pad2; /* padding */
83 char qtcodecname[128];
86 typedef struct FFMpegCodecData {
100 IDProperty *properties;
104 typedef struct AudioData {
106 float main; /* Main mix in dB */
111 typedef struct SceneRenderLayer {
112 struct SceneRenderLayer *next, *prev;
116 struct Material *mat_override;
117 struct Group *light_override;
119 unsigned int lay; /* scene->lay itself has priority over this */
120 unsigned int lay_zmask; /* has to be after lay, this is for Z-masking */
125 int passflag; /* pass_xor has to be after passflag */
130 #define SCE_LAY_SOLID 1
131 #define SCE_LAY_ZTRA 2
132 #define SCE_LAY_HALO 4
133 #define SCE_LAY_EDGE 8
134 #define SCE_LAY_SKY 16
135 #define SCE_LAY_STRAND 32
136 /* flags between 32 and 0x8000 are set to 1 already, for future options */
138 #define SCE_LAY_ALL_Z 0x8000
139 #define SCE_LAY_XOR 0x10000
140 #define SCE_LAY_DISABLE 0x20000
141 #define SCE_LAY_ZMASK 0x40000
142 #define SCE_LAY_NEG_ZMASK 0x80000
145 #define SCE_PASS_COMBINED 1
147 #define SCE_PASS_RGBA 4
148 #define SCE_PASS_DIFFUSE 8
149 #define SCE_PASS_SPEC 16
150 #define SCE_PASS_SHADOW 32
151 #define SCE_PASS_AO 64
152 #define SCE_PASS_REFLECT 128
153 #define SCE_PASS_NORMAL 256
154 #define SCE_PASS_VECTOR 512
155 #define SCE_PASS_REFRACT 1024
156 #define SCE_PASS_INDEXOB 2048
157 #define SCE_PASS_UV 4096
158 #define SCE_PASS_RADIO 8192
159 #define SCE_PASS_MIST 16384
161 /* note, srl->passflag is treestore element 'nr' in outliner, short still... */
164 typedef struct RenderData {
166 struct AviCodecData *avicodecdata;
167 struct QuicktimeCodecData *qtcodecdata;
168 struct FFMpegCodecData ffcodecdata;
170 int cfra, sfra, efra; /* frames as in 'images' */
171 int psfra, pefra; /* start+end frames of preview range */
173 int images, framapto;
176 float ctime; /* use for calcutions */
177 float framelen, blurfac;
179 /** For UR edge rendering: give the edges this color */
180 float edgeR, edgeG, edgeB;
182 short fullscreen, xplay, yplay, freqplay; /* standalone player */
183 short depth, attrib, rt1, rt2; /* standalone player */
185 short stereomode; /* standalone player stereo settings */
187 short dimensionspreset; /* for the dimensions presets menu */
189 short filtertype; /* filter is box, tent, gauss, mitch, etc */
191 short size, maximsize; /* size in %, max in Kb */
194 * The desired number of pixels in the x direction
198 * The desired number of pixels in the y direction
202 * The number of part to use in the x direction
206 * The number of part to use in the y direction
210 short winpos, planes, imtype, subimtype;
213 /* 0: Enable backbuffering for images */
217 short rpad, rpad1, rpad2;
220 * Flags for render settings. Use bit-masking to access the settings.
225 * Flags for render settings. Use bit-masking to access the settings.
229 /* render engine, octree resolution */
230 short renderer, ocres;
233 * What to do with the sky/background. Picks sky/premul/key
234 * blending for the background
239 * The number of samples to use per pixel.
243 short frs_sec, edgeint;
245 /* safety, border and display rect */
249 /* information on different layers to be rendered */
254 * Adjustment factors for the aspect ratio in the x direction, was a short in 2.45
258 * Adjustment factors for the aspect ratio in the x direction, was a short in 2.45
265 * Value used to define filter size for all filter options */
268 /** post-production settings. Depricated, but here for upwards compat (initialized to 1) */
269 float postmul, postgamma, posthue, postsat;
271 /* Dither noise intensity */
272 float dither_intensity;
274 /* Bake Render options */
275 short bake_osa, bake_filter, bake_mode, bake_flag;
276 short bake_normal_space, bake_quad_split;
277 float bake_maxdist, bake_biasdist, bake_pad;
279 /* yafray: global panel params. TODO: move elsewhere */
280 short GIquality, GIcache, GImethod, GIphotons, GIdirect;
281 short YF_AA, YFexportxml, YF_nobump, YF_clamprgb, yfpad1;
282 int GIdepth, GIcausdepth, GIpixelspersample;
283 int GIphotoncount, GImixphotons;
284 float GIphotonradius;
285 int YF_raydepth, YF_AApasses, YF_AAsamples, yfpad2;
286 float GIshadowquality, GIrefinement, GIpower, GIindirpower;
287 float YF_gamma, YF_exposure, YF_raybias, YF_AApixelsize, YF_AAthreshold;
289 /* paths to backbufffer, output, ftype */
290 char backbuf[160], pic[160];
294 short stamp_font_id, pad3; /* select one of blenders bitmap fonts */
296 /* stamp info user data. */
297 char stamp_udata[160];
299 /* foreground/background color. */
303 /* render simplify */
304 int simplify_subsurf;
305 int simplify_shadowsamples;
306 float simplify_particles;
307 float simplify_aosss;
310 short cineonwhite, cineonblack;
314 /* control render convert and shading engine */
315 typedef struct RenderProfile {
316 struct RenderProfile *next, *prev;
321 short shadbufsample_max;
324 float ao_error, pad2;
328 typedef struct GameFraming {
330 char type, pad1, pad2, pad3;
333 #define SCE_GAMEFRAMING_BARS 0
334 #define SCE_GAMEFRAMING_EXTEND 1
335 #define SCE_GAMEFRAMING_SCALE 2
337 typedef struct TimeMarker {
338 struct TimeMarker *next, *prev;
344 typedef struct ImagePaintSettings {
348 /* for projection painting only */
349 short seam_bleed,normal_angle;
350 } ImagePaintSettings;
352 typedef struct ParticleBrushData {
353 short size, strength; /* common settings */
354 short step, invert; /* for specific brushes only */
357 typedef struct ParticleEditSettings {
363 ParticleBrushData brush[7]; /* 7 = PE_TOT_BRUSH */
367 } ParticleEditSettings;
369 typedef struct TransformOrientation {
370 struct TransformOrientation *next, *prev;
373 } TransformOrientation;
375 typedef struct ToolSettings {
376 /* Subdivide Settings */
379 /*Triangle to Quad conversion threshold*/
389 /* Primitive Settings */
394 /* Cylinder - Tube - Circle */
400 float uvcalc_cubesize;
402 short uvcalc_mapalign;
406 short autoik_chainlen;
408 /* Image Paint (8 byttse aligned please!) */
409 struct ImagePaintSettings imapaint;
411 /* Particle Editing */
412 struct ParticleEditSettings particle;
414 /* Select Group Threshold */
422 char retopo_paint_tool;
423 char line_div, ellipse_div, retopo_hotspot;
426 char multires_subdiv_type;
428 /* Skeleton generation */
429 short skgen_resolution;
430 float skgen_threshold_internal;
431 float skgen_threshold_external;
432 float skgen_length_ratio;
433 float skgen_length_limit;
434 float skgen_angle_limit;
435 float skgen_correlation_limit;
436 float skgen_symmetry_limit;
437 float skgen_retarget_angle_weight;
438 float skgen_retarget_length_weight;
439 float skgen_retarget_distance_weight;
442 char skgen_postpro_passes;
443 char skgen_subdivisions[3];
444 char skgen_multi_level;
445 char skgen_optimisation_method;
453 /* Used by all brushes to store their properties, which can be directly set
454 by the interface code. Note that not all properties are actually used by
456 typedef struct BrushData
459 char strength, dir; /* Not used for smooth brush */
465 struct SculptSession;
466 typedef struct SculptData
468 /* Note! all pointers in this struct must be duplicated header_info.c's copy_scene function */
470 /* Data stored only from entering sculptmode until exiting sculptmode */
471 struct SculptSession *session;
473 /* Pointers to all of sculptmodes's textures */
474 struct MTex *mtex[18];
476 /* Editable brush shape */
477 struct CurveMapping *cumap;
479 /* Settings for each brush */
480 BrushData drawbrush, smoothbrush, pinchbrush, inflatebrush, grabbrush, layerbrush, flattenbrush;
482 /* For rotating around a pivot point */
487 /* For the Brush Shape */
497 /* Control tablet input */
498 char tablet_size, tablet_strength;
500 /* Symmetry is separate from the other BrushData because the same
501 settings are always used for all brush types */
504 /* Added to store if the 'Rake' setting has been set */
510 typedef struct Scene {
512 struct Object *camera;
522 float twcent[3]; /* center for transform widget */
523 float twmin[3], twmax[3]; /* boundbox of selection for transform widget */
527 float editbutsize; /* size of normals */
528 short selectmode; /* for mesh only! */
529 short proportional, prop_mode;
530 short automerge, pad5, pad6;
532 short autokey_mode; /* mode for autokeying (defines in DNA_userdef_types.h */
536 struct bNodeTree *nodetree;
538 void *ed; /* sequence editor data is allocated here */
541 struct GameFraming framing;
543 struct ToolSettings *toolsettings;
545 /* migrate or replace? depends on some internal things... */
546 /* no, is on the right place (ton) */
548 struct AudioData audio;
550 ScriptLink scriptlink;
553 ListBase transform_spaces;
556 short snap_mode, snap_flag, snap_target;
558 /* none of the dependancy graph vars is mean to be saved */
559 struct DagForest *theDag;
560 short dagisvalid, dagflags;
561 short pad4, recalc; /* recalc = counterpart of ob->recalc */
563 /* Sculptmode data */
564 struct SculptData sculptdata;
572 /* **************** RENDERDATA ********************* */
576 #define R_BACKBUFANIM 2
578 #define R_FRONTBUFANIM 8
582 #define R_SHADOW 0x0002
583 #define R_GAMMA 0x0004
584 #define R_ORTHO 0x0008
585 #define R_ENVMAP 0x0010
586 #define R_EDGE 0x0020
587 #define R_FIELDS 0x0040
588 #define R_FIELDSTILL 0x0080
589 #define R_RADIO 0x0100
590 #define R_BORDER 0x0200
591 #define R_PANORAMA 0x0400
592 #define R_CROP 0x0800
593 #define R_COSMO 0x1000
594 #define R_ODDFIELD 0x2000
595 #define R_MBLUR 0x4000
596 /* unified was here */
597 #define R_RAYTRACE 0x10000
598 /* R_GAUSS is obsolete, but used to retrieve setting from old files */
599 #define R_GAUSS 0x20000
600 /* fbuf obsolete... */
601 #define R_FBUF 0x40000
602 /* threads obsolete... is there for old files, now use for autodetect threads */
603 #define R_THREADS 0x80000
604 /* Use the same flag for autothreads */
605 #define R_FIXED_THREADS 0x80000
607 #define R_SPEED 0x100000
608 #define R_SSS 0x200000
609 #define R_NO_OVERWRITE 0x400000 /* skip existing files */
610 #define R_TOUCH 0x800000 /* touch files before rendering */
611 #define R_SIMPLIFY 0x1000000
615 #define R_FILTER_BOX 0
616 #define R_FILTER_TENT 1
617 #define R_FILTER_QUAD 2
618 #define R_FILTER_CUBIC 3
619 #define R_FILTER_CATROM 4
620 #define R_FILTER_GAUSS 5
621 #define R_FILTER_MITCH 6
622 #define R_FILTER_FAST_GAUSS 7 /* note, this is only used for nodes at the moment */
624 /* yafray: renderer flag (not only exclusive to yafray) */
628 /* scemode (int now) */
629 #define R_DOSEQ 0x0001
630 #define R_BG_RENDER 0x0002
631 /* passepartout is camera option now, keep this for backward compatibility */
632 #define R_PASSEPARTOUT 0x0004
633 #define R_PREVIEWBUTS 0x0008
634 #define R_EXTENSION 0x0010
635 #define R_NODE_PREVIEW 0x0020
636 #define R_DOCOMP 0x0040
637 #define R_COMP_CROP 0x0080
638 #define R_FREE_IMAGE 0x0100
639 #define R_SINGLE_LAYER 0x0200
640 #define R_EXR_TILE_FILE 0x0400
641 #define R_COMP_FREE 0x0800
642 #define R_NO_IMAGE_LOAD 0x1000
643 #define R_NO_TEX 0x2000
644 #define R_STAMP_INFO 0x4000
645 #define R_FULL_SAMPLE 0x8000
646 #define R_COMP_RERENDER 0x10000
649 #define R_STAMP_TIME 0x0001
650 #define R_STAMP_FRAME 0x0002
651 #define R_STAMP_DATE 0x0004
652 #define R_STAMP_CAMERA 0x0008
653 #define R_STAMP_SCENE 0x0010
654 #define R_STAMP_NOTE 0x0020
655 #define R_STAMP_DRAW 0x0040 /* draw in the image */
656 #define R_STAMP_MARKER 0x0080
657 #define R_STAMP_FILENAME 0x0100
658 #define R_STAMP_SEQSTRIP 0x0200
662 #define R_ALPHAPREMUL 1
666 #define R_PLANES24 24
667 #define R_PLANES32 32
674 #define R_FTYPE 3 /* ftype is nomore */
682 #define R_AVICODEC 18
683 #define R_QUICKTIME 19
689 #define R_FRAMESERVER 25
692 #define R_MULTILAYER 28
695 /* subimtype, flag options for imtype */
696 #define R_OPENEXR_HALF 1
697 #define R_OPENEXR_ZBUF 2
698 #define R_PREVIEW_JPG 4
699 #define R_CINEON_LOG 8
700 #define R_TIFF_16BIT 16
702 /* bake_mode: same as RE_BAKE_xxx defines */
704 #define R_BAKE_CLEAR 1
706 #define R_BAKE_TO_ACTIVE 4
707 #define R_BAKE_NORMALIZE 8
709 /* bake_normal_space */
710 #define R_BAKE_SPACE_CAMERA 0
711 #define R_BAKE_SPACE_WORLD 1
712 #define R_BAKE_SPACE_OBJECT 2
713 #define R_BAKE_SPACE_TANGENT 3
715 /* **************** SCENE ********************* */
717 /* for general use */
718 #define MAXFRAME 300000
719 #define MAXFRAMEF 300000.0f
722 #define MINFRAMEF 1.0
724 #define TESTBASE(base) ( ((base)->flag & SELECT) && ((base)->lay & G.vd->lay) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0) )
725 #define TESTBASELIB(base) ( ((base)->flag & SELECT) && ((base)->lay & G.vd->lay) && ((base)->object->id.lib==0) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0))
726 #define BASE_SELECTABLE(base) ((base->lay & G.vd->lay) && (base->object->restrictflag & (OB_RESTRICT_SELECT|OB_RESTRICT_VIEW))==0)
727 #define FIRSTBASE G.scene->base.first
728 #define LASTBASE G.scene->base.last
729 #define BASACT (G.scene->basact)
730 #define OBACT (BASACT? BASACT->object: 0)
731 #define ID_NEW(a) if( (a) && (a)->id.newid ) (a)= (void *)(a)->id.newid
732 #define ID_NEW_US(a) if( (a)->id.newid) {(a)= (void *)(a)->id.newid; (a)->id.us++;}
733 #define ID_NEW_US2(a) if( ((ID *)a)->newid) {(a)= ((ID *)a)->newid; ((ID *)a)->us++;}
734 #define CFRA (G.scene->r.cfra)
735 #define F_CFRA ((float)(G.scene->r.cfra))
736 #define SFRA (G.scene->r.sfra)
737 #define EFRA (G.scene->r.efra)
738 #define PSFRA ((G.scene->r.psfra != 0)? (G.scene->r.psfra): (G.scene->r.sfra))
739 #define PEFRA ((G.scene->r.psfra != 0)? (G.scene->r.pefra): (G.scene->r.efra))
740 #define FRA2TIME(a) ((((double) G.scene->r.frs_sec_base) * (a)) / G.scene->r.frs_sec)
741 #define TIME2FRA(a) ((((double) G.scene->r.frs_sec) * (a)) / G.scene->r.frs_sec_base)
742 #define FPS (((double) G.scene->r.frs_sec) / G.scene->r.frs_sec_base)
744 #define RAD_PHASE_PATCHES 1
745 #define RAD_PHASE_FACES 2
747 /* base->flag is in DNA_object_types.h */
749 /* scene->snap_flag */
751 #define SCE_SNAP_ROTATE 2
752 /* scene->snap_target */
753 #define SCE_SNAP_TARGET_CLOSEST 0
754 #define SCE_SNAP_TARGET_CENTER 1
755 #define SCE_SNAP_TARGET_MEDIAN 2
756 #define SCE_SNAP_TARGET_ACTIVE 3
757 /* scene->snap_mode */
758 #define SCE_SNAP_MODE_VERTEX 0
759 #define SCE_SNAP_MODE_EDGE 1
760 #define SCE_SNAP_MODE_FACE 2
762 /* sce->selectmode */
763 #define SCE_SELECT_VERTEX 1 /* for mesh */
764 #define SCE_SELECT_EDGE 2
765 #define SCE_SELECT_FACE 4
767 /* sce->selectmode for particles */
768 #define SCE_SELECT_PATH 1
769 #define SCE_SELECT_POINT 2
770 #define SCE_SELECT_END 4
772 /* sce->recalc (now in use by previewrender) */
773 #define SCE_PRV_CHANGED 1
775 /* sce->prop_mode (proportional falloff) */
776 #define PROP_SMOOTH 0
777 #define PROP_SPHERE 1
782 #define PROP_RANDOM 6
784 /* return flag next_object function */
793 #define AUDIO_SCRUB 4
795 #define FFMPEG_MULTIPLEX_AUDIO 1
796 #define FFMPEG_AUTOSPLIT_OUTPUT 2
798 /* Sculpt brush flags */
799 #define SCULPT_BRUSH_AIRBRUSH 1
800 #define SCULPT_BRUSH_ANCHORED 2
801 /* SculptData.flags */
802 #define SCULPT_INPUT_SMOOTH 1
803 #define SCULPT_DRAW_FAST 2
804 #define SCULPT_DRAW_BRUSH 4
805 /* SculptData.brushtype */
807 #define SMOOTH_BRUSH 2
808 #define PINCH_BRUSH 3
809 #define INFLATE_BRUSH 4
811 #define LAYER_BRUSH 6
812 #define FLATTEN_BRUSH 7
813 /* SculptData.texrept */
814 #define SCULPTREPT_DRAG 1
815 #define SCULPTREPT_TILE 2
816 #define SCULPTREPT_3D 3
826 /* toolsettings->imagepaint_flag */
827 #define IMAGEPAINT_DRAWING 1
828 #define IMAGEPAINT_DRAW_TOOL 2
829 #define IMAGEPAINT_DRAW_TOOL_DRAWING 4
831 /* projection painting only */
832 #define IMAGEPAINT_PROJECT_DISABLE 8 /* Non projection 3D painting */
833 #define IMAGEPAINT_PROJECT_XRAY 16
834 #define IMAGEPAINT_PROJECT_BACKFACE 32
835 #define IMAGEPAINT_PROJECT_FLAT 64
836 #define IMAGEPAINT_PROJECT_LAYER_CLONE 128
837 #define IMAGEPAINT_PROJECT_LAYER_MASK 256
838 #define IMAGEPAINT_PROJECT_LAYER_MASK_INV 512
840 /* toolsettings->uvcalc_flag */
841 #define UVCALC_FILLHOLES 1
842 #define UVCALC_NO_ASPECT_CORRECT 2 /* would call this UVCALC_ASPECT_CORRECT, except it should be default with old file */
843 #define UVCALC_TRANSFORM_CORRECT 4 /* adjust UV's while transforming to avoid distortion */
845 /* toolsettings->edge_mode */
846 #define EDGE_MODE_SELECT 0
847 #define EDGE_MODE_TAG_SEAM 1
848 #define EDGE_MODE_TAG_SHARP 2
849 #define EDGE_MODE_TAG_CREASE 3
850 #define EDGE_MODE_TAG_BEVEL 4
852 /* toolsettings->particle flag */
853 #define PE_KEEP_LENGTHS 1
854 #define PE_LOCK_FIRST 2
855 #define PE_DEFLECT_EMITTER 4
856 #define PE_INTERPOLATE_ADDED 8
857 #define PE_SHOW_CHILD 16
858 #define PE_SHOW_TIME 32
859 #define PE_X_MIRROR 64
861 /* toolsetting->particle brushtype */
862 #define PE_BRUSH_NONE -1
863 #define PE_BRUSH_COMB 0
864 #define PE_BRUSH_CUT 1
865 #define PE_BRUSH_LENGTH 2
866 #define PE_BRUSH_PUFF 3
867 #define PE_BRUSH_ADD 4
868 #define PE_BRUSH_WEIGHT 5
869 #define PE_BRUSH_SMOOTH 6
871 /* this must equal ParticleEditSettings.brush array size */
872 #define PE_TOT_BRUSH 7
874 /* toolsettings->retopo_mode */
876 #define RETOPO_PAINT 2
878 /* toolsettings->retopo_paint_tool */
880 #define RETOPO_LINE 2
881 #define RETOPO_ELLIPSE 4
883 /* toolsettings->skgen_options */
884 #define SKGEN_FILTER_INTERNAL (1 << 0)
885 #define SKGEN_FILTER_EXTERNAL (1 << 1)
886 #define SKGEN_SYMMETRY (1 << 2)
887 #define SKGEN_CUT_LENGTH (1 << 3)
888 #define SKGEN_CUT_ANGLE (1 << 4)
889 #define SKGEN_CUT_CORRELATION (1 << 5)
890 #define SKGEN_HARMONIC (1 << 6)
891 #define SKGEN_STICK_TO_EMBEDDING (1 << 7)
892 #define SKGEN_ADAPTIVE_DISTANCE (1 << 8)
893 #define SKGEN_FILTER_SMART (1 << 9)
894 #define SKGEN_DISP_LENGTH (1 << 10)
895 #define SKGEN_DISP_WEIGHT (1 << 11)
896 #define SKGEN_DISP_ORIG (1 << 12)
897 #define SKGEN_DISP_EMBED (1 << 13)
898 #define SKGEN_DISP_INDEX (1 << 14)
900 #define SKGEN_SUB_LENGTH 0
901 #define SKGEN_SUB_ANGLE 1
902 #define SKGEN_SUB_CORRELATION 2
903 #define SKGEN_SUB_TOTAL 3
905 /* toolsettings->skgen_postpro */
906 #define SKGEN_SMOOTH 0
907 #define SKGEN_AVERAGE 1
908 #define SKGEN_SHARPEN 2