| // |
| // C++ Implementation: MilkdropPresetFactory |
| // |
| // Description: |
| // |
| // |
| // Author: Carmelo Piccione <carmelo.piccione@gmail.com>, (C) 2008 |
| // |
| // Copyright: See COPYING file that comes with this distribution |
| // |
| // |
| // |
| #include "MilkdropPresetFactory.hpp" |
| #include "MilkdropPreset.hpp" |
| #include "BuiltinFuncs.hpp" |
| #include "Eval.hpp" |
| #include "IdlePreset.hpp" |
| #include "PresetFrameIO.hpp" |
| |
| MilkdropPresetFactory::MilkdropPresetFactory(int gx, int gy): _usePresetOutputs(false) |
| { |
| /* Initializes the builtin function database */ |
| BuiltinFuncs::init_builtin_func_db(); |
| |
| /* Initializes all infix operators */ |
| Eval::init_infix_ops(); |
| |
| _presetOutputs = createPresetOutputs(gx,gy); |
| _presetOutputs2 = createPresetOutputs(gx, gy); |
| } |
| |
| MilkdropPresetFactory::~MilkdropPresetFactory() { |
| |
| std::cerr << "[~MilkdropPresetFactory] destroy infix ops" << std::endl; |
| Eval::destroy_infix_ops(); |
| std::cerr << "[~MilkdropPresetFactory] destroy builtin func" << std::endl; |
| BuiltinFuncs::destroy_builtin_func_db(); |
| std::cerr << "[~MilkdropPresetFactory] delete preset out puts" << std::endl; |
| delete(_presetOutputs); |
| delete(_presetOutputs2); |
| std::cerr << "[~MilkdropPresetFactory] done" << std::endl; |
| |
| } |
| |
| /* Reinitializes the engine variables to a default (conservative and sane) value */ |
| void resetPresetOutputs(PresetOutputs * presetOutputs) |
| { |
| |
| presetOutputs->zoom=1.0; |
| presetOutputs->zoomexp = 1.0; |
| presetOutputs->rot= 0.0; |
| presetOutputs->warp= 0.0; |
| |
| presetOutputs->sx= 1.0; |
| presetOutputs->sy= 1.0; |
| presetOutputs->dx= 0.0; |
| presetOutputs->dy= 0.0; |
| presetOutputs->cx= 0.5; |
| presetOutputs->cy= 0.5; |
| |
| presetOutputs->screenDecay=.98; |
| |
| presetOutputs->wave.r= 1.0; |
| presetOutputs->wave.g= 0.2; |
| presetOutputs->wave.b= 0.0; |
| presetOutputs->wave.x= 0.5; |
| presetOutputs->wave.y= 0.5; |
| presetOutputs->wave.mystery= 0.0; |
| |
| presetOutputs->border.outer_size= 0.0; |
| presetOutputs->border.outer_r= 0.0; |
| presetOutputs->border.outer_g= 0.0; |
| presetOutputs->border.outer_b= 0.0; |
| presetOutputs->border.outer_a= 0.0; |
| |
| presetOutputs->border.inner_size = 0.0; |
| presetOutputs->border.inner_r = 0.0; |
| presetOutputs->border.inner_g = 0.0; |
| presetOutputs->border.inner_b = 0.0; |
| presetOutputs->border.inner_a = 0.0; |
| |
| presetOutputs->mv.a = 0.0; |
| presetOutputs->mv.r = 0.0; |
| presetOutputs->mv.g = 0.0; |
| presetOutputs->mv.b = 0.0; |
| presetOutputs->mv.length = 1.0; |
| presetOutputs->mv.x_num = 16.0; |
| presetOutputs->mv.y_num = 12.0; |
| presetOutputs->mv.x_offset = 0.02; |
| presetOutputs->mv.y_offset = 0.02; |
| |
| |
| /* PER_FRAME CONSTANTS END */ |
| presetOutputs->fRating = 0; |
| presetOutputs->fGammaAdj = 1.0; |
| presetOutputs->videoEcho.zoom = 1.0; |
| presetOutputs->videoEcho.a = 0; |
| presetOutputs->videoEcho.orientation = Normal; |
| |
| presetOutputs->wave.additive = false; |
| presetOutputs->wave.dots = false; |
| presetOutputs->wave.thick = false; |
| presetOutputs->wave.modulateAlphaByVolume = 0; |
| presetOutputs->wave.maximizeColors = 0; |
| presetOutputs->textureWrap = 0; |
| presetOutputs->bDarkenCenter = 0; |
| presetOutputs->bRedBlueStereo = 0; |
| presetOutputs->bBrighten = 0; |
| presetOutputs->bDarken = 0; |
| presetOutputs->bSolarize = 0; |
| presetOutputs->bInvert = 0; |
| presetOutputs->bMotionVectorsOn = 1; |
| |
| presetOutputs->wave.a =1.0; |
| presetOutputs->wave.scale = 1.0; |
| presetOutputs->wave.smoothing = 0; |
| presetOutputs->wave.mystery = 0; |
| presetOutputs->wave.modOpacityEnd = 0; |
| presetOutputs->wave.modOpacityStart = 0; |
| presetOutputs->fWarpAnimSpeed = 0; |
| presetOutputs->fWarpScale = 0; |
| presetOutputs->fShader = 0; |
| |
| /* PER_PIXEL CONSTANT END */ |
| /* Q VARIABLES START */ |
| |
| for (int i = 0;i< 32;i++) |
| presetOutputs->q[i] = 0; |
| |
| // for ( std::vector<CustomWave*>::iterator pos = presetOutputs->customWaves.begin(); |
| // pos != presetOutputs->customWaves.end(); ++pos ) |
| // if ( *pos != 0 ) delete ( *pos ); |
| |
| // for ( std::vector<CustomShape*>::iterator pos = presetOutputs->customShapes.begin(); |
| // pos != presetOutputs->customShapes.end(); ++pos ) |
| // if ( *pos != 0 ) delete ( *pos ); |
| |
| presetOutputs->customWaves.clear(); |
| presetOutputs->customShapes.clear(); |
| |
| /* Q VARIABLES END */ |
| |
| } |
| |
| |
| /* Reinitializes the engine variables to a default (conservative and sane) value */ |
| void MilkdropPresetFactory::reset() |
| { |
| |
| resetPresetOutputs(_presetOutputs); |
| resetPresetOutputs(_presetOutputs2); |
| } |
| |
| PresetOutputs* MilkdropPresetFactory::createPresetOutputs(int gx, int gy) |
| { |
| |
| PresetOutputs *presetOutputs = new PresetOutputs(); |
| |
| presetOutputs->Initialize(gx,gy); |
| |
| /* PER FRAME CONSTANTS BEGIN */ |
| presetOutputs->zoom=1.0; |
| presetOutputs->zoomexp = 1.0; |
| presetOutputs->rot= 0.0; |
| presetOutputs->warp= 0.0; |
| |
| presetOutputs->sx= 1.0; |
| presetOutputs->sy= 1.0; |
| presetOutputs->dx= 0.0; |
| presetOutputs->dy= 0.0; |
| presetOutputs->cx= 0.5; |
| presetOutputs->cy= 0.5; |
| |
| presetOutputs->screenDecay=.98; |
| |
| |
| //_presetInputs.meshx = 0; |
| //_presetInputs.meshy = 0; |
| |
| |
| /* PER_FRAME CONSTANTS END */ |
| presetOutputs->fRating = 0; |
| presetOutputs->fGammaAdj = 1.0; |
| presetOutputs->videoEcho.zoom = 1.0; |
| presetOutputs->videoEcho.a = 0; |
| presetOutputs->videoEcho.orientation = Normal; |
| |
| presetOutputs->textureWrap = 0; |
| presetOutputs->bDarkenCenter = 0; |
| presetOutputs->bRedBlueStereo = 0; |
| presetOutputs->bBrighten = 0; |
| presetOutputs->bDarken = 0; |
| presetOutputs->bSolarize = 0; |
| presetOutputs->bInvert = 0; |
| presetOutputs->bMotionVectorsOn = 1; |
| |
| presetOutputs->fWarpAnimSpeed = 0; |
| presetOutputs->fWarpScale = 0; |
| presetOutputs->fShader = 0; |
| |
| /* PER_PIXEL CONSTANTS BEGIN */ |
| |
| /* PER_PIXEL CONSTANT END */ |
| |
| /* Q AND T VARIABLES START */ |
| |
| for (int i = 0;i<NUM_Q_VARIABLES;i++) |
| presetOutputs->q[i] = 0; |
| |
| /* Q AND T VARIABLES END */ |
| return presetOutputs; |
| } |
| |
| |
| std::auto_ptr<Preset> MilkdropPresetFactory::allocate(const std::string & url, const std::string & name, const std::string & author) { |
| |
| PresetOutputs *presetOutputs = _usePresetOutputs ? _presetOutputs : _presetOutputs2; |
| |
| _usePresetOutputs = !_usePresetOutputs; |
| resetPresetOutputs(presetOutputs); |
| |
| std::string path; |
| if (PresetFactory::protocol(url, path) == PresetFactory::IDLE_PRESET_PROTOCOL) { |
| return IdlePresets::allocate(path, *presetOutputs); |
| } else |
| return std::auto_ptr<Preset>(new MilkdropPreset(url, name, *presetOutputs)); |
| } |