blob: 9b7a5a417c4d4dde0cd7bdd471d60bada78552bb [file] [log] [blame]
#ifndef PRESET_FRAME_IO_HPP
#define PRESET_FRAME_IO_HPP
#include <vector>
#include "Renderer/MilkdropWaveform.hpp"
#include "Renderer/Pipeline.hpp"
#include "Renderer/Filters.hpp"
#include "CustomShape.hpp"
#include "CustomWave.hpp"
#include "Renderer/VideoEcho.hpp"
/// Container for all *read only* engine variables a preset requires to
/// evaluate milkdrop equations. Every preset object needs a reference to one of these.
class PresetInputs : public PipelineContext {
public:
/* PER_PIXEL VARIBLES BEGIN */
float x_per_pixel;
float y_per_pixel;
float rad_per_pixel;
float ang_per_pixel;
/* PER_PIXEL VARIBLES END */
float bass;
float mid;
float treb;
float bass_att;
float mid_att;
float treb_att;
/* variables were added in milkdrop 1.04 */
int gx, gy;
float **x_mesh;
float **y_mesh;
float **rad_mesh;
float **theta_mesh;
float **origtheta; //grid containing interpolated mesh reference values
float **origrad;
float **origx; //original mesh
float **origy;
void resetMesh();
~PresetInputs();
PresetInputs();
/// Initializes this preset inputs given a mesh size.
/// \param gx the width of the mesh
/// \param gy the height of the mesh
/// \note This must be called before reading values from this class
void Initialize(int gx, int gy);
/// Updates this preset inputs with the latest values from the
/// the pipeline context and beat detection unit
void update (const BeatDetect & music, const PipelineContext & context);
private:
};
/// Container class for all preset writeable engine variables. This is the important glue
/// between the presets and renderer to facilitate smooth preset switching
/// Every preset object needs a reference to one of these.
class PresetOutputs : public Pipeline {
public:
typedef std::vector<CustomWave*> cwave_container;
typedef std::vector<CustomShape*> cshape_container;
cwave_container customWaves;
cshape_container customShapes;
void Initialize(int gx, int gy);
PresetOutputs();
~PresetOutputs();
virtual void Render(const BeatDetect &music, const PipelineContext &context);
void PerPixelMath( const PipelineContext &context);
/* PER FRAME VARIABLES BEGIN */
float zoom;
float zoomexp;
float rot;
float warp;
float sx;
float sy;
float dx;
float dy;
float cx;
float cy;
VideoEcho videoEcho;
MilkdropWaveform wave;
Border border;
MotionVectors mv;
DarkenCenter darkenCenter;
Brighten brighten;
Darken darken;
Invert invert;
Solarize solarize;
int gy,gx;
/* PER_FRAME VARIABLES END */
float fRating;
float fGammaAdj;
bool bDarkenCenter;
bool bRedBlueStereo;
bool bBrighten;
bool bDarken;
bool bSolarize;
bool bInvert;
bool bMotionVectorsOn;
float fWarpAnimSpeed;
float fWarpScale;
float fShader;
float **zoom_mesh;
float **zoomexp_mesh;
float **rot_mesh;
float **sx_mesh;
float **sy_mesh;
float **dx_mesh;
float **dy_mesh;
float **cx_mesh;
float **cy_mesh;
float **warp_mesh;
float **orig_x; //original mesh
float **orig_y;
float **rad_mesh;
};
#endif