#include "EmberPch.h"
#include "EmberDefines.h"
#include "Isaac.h"

namespace EmberNs
{
template<> unique_ptr<QTIsaac<ISAAC_SIZE, ISAAC_INT>> QTIsaac<ISAAC_SIZE, ISAAC_INT>::GlobalRand = unique_ptr<QTIsaac<ISAAC_SIZE, ISAAC_INT>>(new QTIsaac<ISAAC_SIZE, ISAAC_INT>());
template<> unique_ptr<recursive_mutex> QTIsaac<ISAAC_SIZE, ISAAC_INT>::s_CS = unique_ptr<recursive_mutex>(new recursive_mutex());
template EMBER_API class QTIsaac<ISAAC_SIZE, ISAAC_INT>;
}

#include "Curves.h"
#include "Ember.h"
#include "Utils.h"
#include "Iterator.h"
#include "Palette.h"
#include "PaletteList.h"
#include "Point.h"
#include "VarFuncs.h"
#include "Variation.h"
#ifdef FLAM3_COMPAT
	#include "Variations01_flam3_compat.h"//Do this instead if you want full compatibility with flam3.
#else
	#include "Variations01.h"
#endif
#include "Variations02.h"
#include "Variations03.h"
#include "Variations04.h"
#include "Variations05.h"
#include "Variations06.h"
#include "Variations07.h"
#include "Variations08.h"
#include "VariationsDC.h"
#include "VariationList.h"
#include "Affine2D.h"
#include "Xform.h"
#include "EmberMotion.h"
#include "EmberToXml.h"
#include "Spline.h"
#include "XmlToEmber.h"
#include "SpatialFilter.h"
#include "DensityFilter.h"
#include "TemporalFilter.h"
#include "Interpolate.h"
#include "Renderer.h"
#include "Timing.h"
#include "SheepTools.h"

/// <summary>
/// Explicit instantiation of all templated classes which aren't implemented in cpp files.
/// All new templated classes, such as new variations, must be added here.
/// Additional instances of static class member variables.
/// </summary>
namespace EmberNs
{
bool Timing::m_TimingInit = false;
uint Timing::m_ProcessorCount;

#define EXPORTPREPOSTREGVAR(varName, T) \
	template class varName##Variation<T>; \
	template class Pre##varName##Variation<T>; \
	template class Post##varName##Variation<T>;

#define EXPORT_SINGLE_TYPE_EMBER(T) \
	template<> bool XmlToEmber<T>::m_Init = false; \
	template<> vector<string> XmlToEmber<T>::m_FlattenNames = vector<string>(); \
	template<> unordered_map<string, string> XmlToEmber<T>::m_BadParamNames = unordered_map<string, string>(); \
	template<> vector<pair<pair<string, string>, vector<string>>> XmlToEmber<T>::m_BadVariationNames = vector<pair<pair<string, string>, vector<string>>>(); \
	template EMBER_API class Point<T>; \
	template EMBER_API struct Color<T>; \
	template EMBER_API class Iterator<T>; \
	template EMBER_API class StandardIterator<T>; \
	template EMBER_API class XaosIterator<T>; \
	template EMBER_API class Xform<T>; \
	template EMBER_API class MotionParam<T>; \
	template EMBER_API class EmberMotion<T>; \
	template EMBER_API class IteratorHelper<T>; \
	template EMBER_API class VarFuncs<T>; \
	template EMBER_API class Variation<T>; \
	template EMBER_API class ParamWithName<T>; \
	template EMBER_API class ParametricVariation<T>; \
	EXPORTPREPOSTREGVAR(Linear, T) \
	EXPORTPREPOSTREGVAR(Sinusoidal, T) \
	EXPORTPREPOSTREGVAR(Spherical, T) \
	EXPORTPREPOSTREGVAR(Swirl, T) \
	EXPORTPREPOSTREGVAR(Swirl3, T) \
	EXPORTPREPOSTREGVAR(Swirl3r, T) \
	EXPORTPREPOSTREGVAR(Horseshoe, T) \
	EXPORTPREPOSTREGVAR(Polar, T) \
	EXPORTPREPOSTREGVAR(Handkerchief, T) \
	EXPORTPREPOSTREGVAR(Heart, T) \
	EXPORTPREPOSTREGVAR(Disc, T) \
	EXPORTPREPOSTREGVAR(Spiral, T) \
	EXPORTPREPOSTREGVAR(Hyperbolic, T) \
	EXPORTPREPOSTREGVAR(Diamond, T) \
	EXPORTPREPOSTREGVAR(Ex, T) \
	EXPORTPREPOSTREGVAR(Julia, T) \
	EXPORTPREPOSTREGVAR(Bent, T) \
	EXPORTPREPOSTREGVAR(Waves, T) \
	EXPORTPREPOSTREGVAR(Fisheye, T) \
	EXPORTPREPOSTREGVAR(Popcorn, T) \
	EXPORTPREPOSTREGVAR(Exponential, T) \
	EXPORTPREPOSTREGVAR(Power, T) \
	EXPORTPREPOSTREGVAR(Cosine, T) \
	EXPORTPREPOSTREGVAR(Rings, T) \
	EXPORTPREPOSTREGVAR(Fan, T) \
	EXPORTPREPOSTREGVAR(Blob, T) \
	EXPORTPREPOSTREGVAR(Pdj, T) \
	EXPORTPREPOSTREGVAR(Fan2, T) \
	EXPORTPREPOSTREGVAR(Rings2, T) \
	EXPORTPREPOSTREGVAR(Eyefish, T) \
	EXPORTPREPOSTREGVAR(Bubble, T) \
	EXPORTPREPOSTREGVAR(Cylinder, T) \
	EXPORTPREPOSTREGVAR(Perspective, T) \
	EXPORTPREPOSTREGVAR(Noise, T) \
	EXPORTPREPOSTREGVAR(JuliaNGeneric, T) \
	EXPORTPREPOSTREGVAR(JuliaScope, T) \
	EXPORTPREPOSTREGVAR(Blur, T) \
	EXPORTPREPOSTREGVAR(GaussianBlur, T) \
	EXPORTPREPOSTREGVAR(Gaussian, T) \
	EXPORTPREPOSTREGVAR(RadialBlur, T) \
	EXPORTPREPOSTREGVAR(Pie, T) \
	EXPORTPREPOSTREGVAR(Ngon, T) \
	EXPORTPREPOSTREGVAR(Curl, T) \
	EXPORTPREPOSTREGVAR(Rectangles, T) \
	EXPORTPREPOSTREGVAR(Arch, T) \
	EXPORTPREPOSTREGVAR(Tangent, T) \
	EXPORTPREPOSTREGVAR(Square, T) \
	EXPORTPREPOSTREGVAR(Rays, T) \
	EXPORTPREPOSTREGVAR(Rays1, T) \
	EXPORTPREPOSTREGVAR(Rays2, T) \
	EXPORTPREPOSTREGVAR(Rays3, T) \
	EXPORTPREPOSTREGVAR(Blade, T) \
	EXPORTPREPOSTREGVAR(Secant2, T) \
	EXPORTPREPOSTREGVAR(TwinTrian, T) \
	EXPORTPREPOSTREGVAR(Cross, T) \
	EXPORTPREPOSTREGVAR(Disc2, T) \
	EXPORTPREPOSTREGVAR(SuperShape, T) \
	EXPORTPREPOSTREGVAR(Flower, T) \
	EXPORTPREPOSTREGVAR(FlowerDb, T) \
	EXPORTPREPOSTREGVAR(Conic, T) \
	EXPORTPREPOSTREGVAR(Parabola, T) \
	EXPORTPREPOSTREGVAR(Bent2, T) \
	EXPORTPREPOSTREGVAR(Bipolar, T) \
	EXPORTPREPOSTREGVAR(Boarders, T) \
	EXPORTPREPOSTREGVAR(Butterfly, T) \
	EXPORTPREPOSTREGVAR(Cell, T) \
	EXPORTPREPOSTREGVAR(Cpow, T) \
	EXPORTPREPOSTREGVAR(Curve, T) \
	EXPORTPREPOSTREGVAR(Edisc, T) \
	EXPORTPREPOSTREGVAR(Elliptic, T) \
	EXPORTPREPOSTREGVAR(Escher, T) \
	EXPORTPREPOSTREGVAR(Foci, T) \
	EXPORTPREPOSTREGVAR(LazySusan, T) \
	EXPORTPREPOSTREGVAR(Loonie, T) \
	EXPORTPREPOSTREGVAR(Modulus, T) \
	EXPORTPREPOSTREGVAR(Oscilloscope, T) \
	EXPORTPREPOSTREGVAR(Oscilloscope2, T) \
	EXPORTPREPOSTREGVAR(Polar2, T) \
	EXPORTPREPOSTREGVAR(Popcorn2, T) \
	EXPORTPREPOSTREGVAR(Scry, T) \
	EXPORTPREPOSTREGVAR(Scry2, T) \
	EXPORTPREPOSTREGVAR(Separation, T) \
	EXPORTPREPOSTREGVAR(Split, T) \
	EXPORTPREPOSTREGVAR(Splits, T) \
	EXPORTPREPOSTREGVAR(Stripes, T) \
	EXPORTPREPOSTREGVAR(Wedge, T) \
	EXPORTPREPOSTREGVAR(WedgeJulia, T) \
	EXPORTPREPOSTREGVAR(WedgeSph, T) \
	EXPORTPREPOSTREGVAR(Whorl, T) \
	EXPORTPREPOSTREGVAR(Waves2, T) \
	EXPORTPREPOSTREGVAR(Exp, T) \
	EXPORTPREPOSTREGVAR(Exp2, T) \
	EXPORTPREPOSTREGVAR(Log, T) \
	EXPORTPREPOSTREGVAR(Sin, T) \
	EXPORTPREPOSTREGVAR(Cos, T) \
	EXPORTPREPOSTREGVAR(Tan, T) \
	EXPORTPREPOSTREGVAR(Sec, T) \
	EXPORTPREPOSTREGVAR(Csc, T) \
	EXPORTPREPOSTREGVAR(Cot, T) \
	EXPORTPREPOSTREGVAR(Sinh, T) \
	EXPORTPREPOSTREGVAR(Cosh, T) \
	EXPORTPREPOSTREGVAR(Tanh, T) \
	EXPORTPREPOSTREGVAR(TanhSpiral, T) \
	EXPORTPREPOSTREGVAR(Sech, T) \
	EXPORTPREPOSTREGVAR(Csch, T) \
	EXPORTPREPOSTREGVAR(Coth, T) \
	EXPORTPREPOSTREGVAR(Auger, T) \
	EXPORTPREPOSTREGVAR(Flux, T) \
	EXPORTPREPOSTREGVAR(Hemisphere, T) \
	EXPORTPREPOSTREGVAR(Epispiral, T) \
	EXPORTPREPOSTREGVAR(Bwraps, T) \
	EXPORTPREPOSTREGVAR(BwrapsRand, T) \
	EXPORTPREPOSTREGVAR(Extrude, T) \
	EXPORTPREPOSTREGVAR(BlurCircle, T) \
	EXPORTPREPOSTREGVAR(BlurZoom, T) \
	EXPORTPREPOSTREGVAR(BlurPixelize, T) \
	EXPORTPREPOSTREGVAR(Crop, T) \
	EXPORTPREPOSTREGVAR(BCircle, T) \
	EXPORTPREPOSTREGVAR(BlurLinear, T) \
	EXPORTPREPOSTREGVAR(BlurSquare, T) \
	EXPORTPREPOSTREGVAR(Boarders2, T) \
	EXPORTPREPOSTREGVAR(Cardioid, T) \
	EXPORTPREPOSTREGVAR(Checks, T) \
	EXPORTPREPOSTREGVAR(Circlize, T) \
	EXPORTPREPOSTREGVAR(Circlize2, T) \
	EXPORTPREPOSTREGVAR(CosWrap, T) \
	EXPORTPREPOSTREGVAR(DeltaA, T) \
	EXPORTPREPOSTREGVAR(Expo, T) \
	EXPORTPREPOSTREGVAR(FDisc, T) \
	EXPORTPREPOSTREGVAR(Fibonacci, T) \
	EXPORTPREPOSTREGVAR(Fibonacci2, T) \
	EXPORTPREPOSTREGVAR(Glynnia, T) \
	EXPORTPREPOSTREGVAR(Glynnia2, T) \
	EXPORTPREPOSTREGVAR(GridOut, T) \
	EXPORTPREPOSTREGVAR(Hole, T) \
	EXPORTPREPOSTREGVAR(Hypertile, T) \
	EXPORTPREPOSTREGVAR(Hypertile1, T) \
	EXPORTPREPOSTREGVAR(Hypertile2, T) \
	EXPORTPREPOSTREGVAR(Hypertile3D, T) \
	EXPORTPREPOSTREGVAR(Hypertile3D1, T) \
	EXPORTPREPOSTREGVAR(Hypertile3D2, T) \
	EXPORTPREPOSTREGVAR(IDisc, T) \
	EXPORTPREPOSTREGVAR(Julian2, T) \
	EXPORTPREPOSTREGVAR(JuliaQ, T) \
	EXPORTPREPOSTREGVAR(Murl, T) \
	EXPORTPREPOSTREGVAR(Murl2, T) \
	EXPORTPREPOSTREGVAR(NPolar, T) \
	EXPORTPREPOSTREGVAR(Ortho, T) \
	EXPORTPREPOSTREGVAR(Poincare, T) \
	EXPORTPREPOSTREGVAR(Poincare3D, T) \
	EXPORTPREPOSTREGVAR(Polynomial, T) \
	EXPORTPREPOSTREGVAR(PSphere, T) \
	EXPORTPREPOSTREGVAR(Rational3, T) \
	EXPORTPREPOSTREGVAR(Ripple, T) \
	EXPORTPREPOSTREGVAR(Sigmoid, T) \
	EXPORTPREPOSTREGVAR(SinusGrid, T) \
	EXPORTPREPOSTREGVAR(Stwin, T) \
	EXPORTPREPOSTREGVAR(TwoFace, T) \
	EXPORTPREPOSTREGVAR(Unpolar, T) \
	EXPORTPREPOSTREGVAR(WavesN, T) \
	EXPORTPREPOSTREGVAR(XHeart, T) \
	EXPORTPREPOSTREGVAR(Barycentroid, T) \
	EXPORTPREPOSTREGVAR(BiSplit, T) \
	EXPORTPREPOSTREGVAR(Crescents, T) \
	EXPORTPREPOSTREGVAR(Mask, T) \
	EXPORTPREPOSTREGVAR(Cpow2, T) \
	EXPORTPREPOSTREGVAR(Curl3D, T) \
	EXPORTPREPOSTREGVAR(Disc3D, T) \
	EXPORTPREPOSTREGVAR(Funnel, T) \
	EXPORTPREPOSTREGVAR(Linear3D, T) \
	EXPORTPREPOSTREGVAR(PowBlock, T) \
	EXPORTPREPOSTREGVAR(Squirrel, T) \
	EXPORTPREPOSTREGVAR(Ennepers, T) \
	EXPORTPREPOSTREGVAR(SphericalN, T) \
	EXPORTPREPOSTREGVAR(Kaleidoscope, T) \
	EXPORTPREPOSTREGVAR(GlynnSim1, T) \
	EXPORTPREPOSTREGVAR(GlynnSim2, T) \
	EXPORTPREPOSTREGVAR(GlynnSim3, T) \
	EXPORTPREPOSTREGVAR(GlynnSim4, T) \
	EXPORTPREPOSTREGVAR(GlynnSim5, T) \
	EXPORTPREPOSTREGVAR(Starblur, T) \
	EXPORTPREPOSTREGVAR(Sineblur, T) \
	EXPORTPREPOSTREGVAR(Circleblur, T) \
	EXPORTPREPOSTREGVAR(CropN, T) \
	EXPORTPREPOSTREGVAR(ShredRad, T) \
	EXPORTPREPOSTREGVAR(Blob2, T) \
	EXPORTPREPOSTREGVAR(Julia3D, T) \
	EXPORTPREPOSTREGVAR(Julia3Dz, T) \
	EXPORTPREPOSTREGVAR(LinearT, T) \
	EXPORTPREPOSTREGVAR(LinearT3D, T) \
	EXPORTPREPOSTREGVAR(Ovoid, T) \
	EXPORTPREPOSTREGVAR(Ovoid3D, T) \
	EXPORTPREPOSTREGVAR(Spirograph, T) \
	EXPORTPREPOSTREGVAR(Petal, T) \
	EXPORTPREPOSTREGVAR(Spher, T) \
	EXPORTPREPOSTREGVAR(RoundSpher, T) \
	EXPORTPREPOSTREGVAR(RoundSpher3D, T) \
	EXPORTPREPOSTREGVAR(SpiralWing, T) \
	EXPORTPREPOSTREGVAR(Squarize, T) \
	EXPORTPREPOSTREGVAR(Sschecks, T) \
	EXPORTPREPOSTREGVAR(PhoenixJulia, T) \
	EXPORTPREPOSTREGVAR(Mobius, T) \
	EXPORTPREPOSTREGVAR(MobiusN, T) \
	EXPORTPREPOSTREGVAR(MobiusStrip, T) \
	EXPORTPREPOSTREGVAR(Lissajous, T) \
	EXPORTPREPOSTREGVAR(Svf, T) \
	EXPORTPREPOSTREGVAR(Target, T) \
	EXPORTPREPOSTREGVAR(Target0, T) \
	EXPORTPREPOSTREGVAR(Target2, T) \
	EXPORTPREPOSTREGVAR(Taurus, T) \
	EXPORTPREPOSTREGVAR(Collideoscope, T) \
	EXPORTPREPOSTREGVAR(BMod, T) \
	EXPORTPREPOSTREGVAR(BSwirl, T) \
	EXPORTPREPOSTREGVAR(BTransform, T) \
	EXPORTPREPOSTREGVAR(BCollide, T) \
	EXPORTPREPOSTREGVAR(Eclipse, T) \
	EXPORTPREPOSTREGVAR(FlipCircle, T) \
	EXPORTPREPOSTREGVAR(FlipX, T) \
	EXPORTPREPOSTREGVAR(FlipY, T) \
	EXPORTPREPOSTREGVAR(ECollide, T) \
	EXPORTPREPOSTREGVAR(EJulia, T) \
	EXPORTPREPOSTREGVAR(EMod, T) \
	EXPORTPREPOSTREGVAR(EMotion, T) \
	EXPORTPREPOSTREGVAR(EPush, T) \
	EXPORTPREPOSTREGVAR(ERotate, T) \
	EXPORTPREPOSTREGVAR(EScale, T) \
	EXPORTPREPOSTREGVAR(ESwirl, T) \
	EXPORTPREPOSTREGVAR(LazyJess, T) \
	EXPORTPREPOSTREGVAR(LazyTravis, T) \
	EXPORTPREPOSTREGVAR(Squish, T) \
	EXPORTPREPOSTREGVAR(Circus, T) \
	EXPORTPREPOSTREGVAR(Tancos, T) \
	EXPORTPREPOSTREGVAR(Rippled, T) \
	EXPORTPREPOSTREGVAR(Flatten, T) \
	EXPORTPREPOSTREGVAR(Zblur, T) \
	EXPORTPREPOSTREGVAR(Blur3D, T) \
	EXPORTPREPOSTREGVAR(ZScale, T) \
	EXPORTPREPOSTREGVAR(ZTranslate, T) \
	EXPORTPREPOSTREGVAR(ZCone, T) \
	EXPORTPREPOSTREGVAR(RotateX, T) \
	EXPORTPREPOSTREGVAR(RotateY, T) \
	EXPORTPREPOSTREGVAR(RotateZ, T) \
	EXPORTPREPOSTREGVAR(MirrorX, T) \
	EXPORTPREPOSTREGVAR(MirrorY, T) \
	EXPORTPREPOSTREGVAR(MirrorZ, T) \
	EXPORTPREPOSTREGVAR(Depth, T) \
	EXPORTPREPOSTREGVAR(RBlur, T) \
	EXPORTPREPOSTREGVAR(JuliaNab, T) \
	EXPORTPREPOSTREGVAR(Sintrange, T) \
	EXPORTPREPOSTREGVAR(Voron, T) \
	EXPORTPREPOSTREGVAR(Waffle, T) \
	EXPORTPREPOSTREGVAR(Square3D, T) \
	EXPORTPREPOSTREGVAR(SuperShape3D, T) \
	EXPORTPREPOSTREGVAR(Sphyp3D, T) \
	EXPORTPREPOSTREGVAR(Circlecrop, T) \
	EXPORTPREPOSTREGVAR(Circlecrop2, T) \
	EXPORTPREPOSTREGVAR(Julian3Dx, T) \
	EXPORTPREPOSTREGVAR(Fourth, T) \
	EXPORTPREPOSTREGVAR(Mobiq, T) \
	EXPORTPREPOSTREGVAR(Spherivoid, T) \
	EXPORTPREPOSTREGVAR(Farblur, T) \
	EXPORTPREPOSTREGVAR(CurlSP, T) \
	EXPORTPREPOSTREGVAR(Heat, T) \
	EXPORTPREPOSTREGVAR(Interference2, T) \
	EXPORTPREPOSTREGVAR(Sinq, T) \
	EXPORTPREPOSTREGVAR(Sinhq, T) \
	EXPORTPREPOSTREGVAR(Secq, T) \
	EXPORTPREPOSTREGVAR(Sechq, T) \
	EXPORTPREPOSTREGVAR(Tanq, T) \
	EXPORTPREPOSTREGVAR(Tanhq, T) \
	EXPORTPREPOSTREGVAR(Cosq, T) \
	EXPORTPREPOSTREGVAR(Coshq, T) \
	EXPORTPREPOSTREGVAR(Cotq, T) \
	EXPORTPREPOSTREGVAR(Cothq, T) \
	EXPORTPREPOSTREGVAR(Cscq, T) \
	EXPORTPREPOSTREGVAR(Cschq, T) \
	EXPORTPREPOSTREGVAR(Estiq, T) \
	EXPORTPREPOSTREGVAR(Loq, T) \
	EXPORTPREPOSTREGVAR(Curvature, T) \
	EXPORTPREPOSTREGVAR(Qode, T) \
	EXPORTPREPOSTREGVAR(BlurHeart, T) \
	EXPORTPREPOSTREGVAR(Gdoffs, T) \
	EXPORTPREPOSTREGVAR(Octagon, T) \
	EXPORTPREPOSTREGVAR(Trade, T) \
	EXPORTPREPOSTREGVAR(Juliac, T) \
	EXPORTPREPOSTREGVAR(Blade3D, T) \
	EXPORTPREPOSTREGVAR(Blob3D, T) \
	EXPORTPREPOSTREGVAR(Block, T) \
	EXPORTPREPOSTREGVAR(Blocky, T) \
	EXPORTPREPOSTREGVAR(Bubble2, T) \
	EXPORTPREPOSTREGVAR(CircleLinear, T) \
	EXPORTPREPOSTREGVAR(CircleRand, T) \
	EXPORTPREPOSTREGVAR(CircleTrans1, T) \
	EXPORTPREPOSTREGVAR(Cubic3D, T) \
	EXPORTPREPOSTREGVAR(CubicLattice3D, T) \
	EXPORTPREPOSTREGVAR(Foci3D, T) \
	EXPORTPREPOSTREGVAR(FociP, T) \
	EXPORTPREPOSTREGVAR(Ho, T) \
	EXPORTPREPOSTREGVAR(Julia3Dq, T) \
	EXPORTPREPOSTREGVAR(Line, T) \
	EXPORTPREPOSTREGVAR(Loonie2, T) \
	EXPORTPREPOSTREGVAR(Loonie3, T) \
	EXPORTPREPOSTREGVAR(Loonie3D, T) \
	EXPORTPREPOSTREGVAR(Mcarpet, T) \
	EXPORTPREPOSTREGVAR(Waves23D, T) \
	EXPORTPREPOSTREGVAR(Pie3D, T) \
	EXPORTPREPOSTREGVAR(Popcorn23D, T) \
	EXPORTPREPOSTREGVAR(Sinusoidal3D, T) \
	EXPORTPREPOSTREGVAR(Scry3D, T) \
	EXPORTPREPOSTREGVAR(Shredlin, T) \
	EXPORTPREPOSTREGVAR(SplitBrdr, T) \
	EXPORTPREPOSTREGVAR(Wdisc, T) \
	EXPORTPREPOSTREGVAR(Falloff, T) \
	EXPORTPREPOSTREGVAR(Falloff2, T) \
	EXPORTPREPOSTREGVAR(Falloff3, T) \
	EXPORTPREPOSTREGVAR(Xtrb, T) \
	EXPORTPREPOSTREGVAR(Hexaplay3D, T) \
	EXPORTPREPOSTREGVAR(Hexnix3D, T) \
	EXPORTPREPOSTREGVAR(Hexcrop, T) \
	EXPORTPREPOSTREGVAR(Hexes, T) \
	EXPORTPREPOSTREGVAR(Nblur, T) \
	EXPORTPREPOSTREGVAR(Octapol, T) \
	EXPORTPREPOSTREGVAR(Crob, T) \
	EXPORTPREPOSTREGVAR(BubbleT3D, T) \
	EXPORTPREPOSTREGVAR(Synth, T) \
	EXPORTPREPOSTREGVAR(Crackle, T) \
	EXPORTPREPOSTREGVAR(Crackle2, T) \
	EXPORTPREPOSTREGVAR(Erf, T) \
	EXPORTPREPOSTREGVAR(Xerf, T) \
	EXPORTPREPOSTREGVAR(W, T) \
	EXPORTPREPOSTREGVAR(X, T) \
	EXPORTPREPOSTREGVAR(Y, T) \
	EXPORTPREPOSTREGVAR(Z, T) \
	EXPORTPREPOSTREGVAR(Splits3D, T) \
	EXPORTPREPOSTREGVAR(Waves2B, T) \
	EXPORTPREPOSTREGVAR(JacCn, T) \
	EXPORTPREPOSTREGVAR(JacDn, T) \
	EXPORTPREPOSTREGVAR(JacSn, T) \
	EXPORTPREPOSTREGVAR(PressureWave, T) \
	EXPORTPREPOSTREGVAR(Gamma, T) \
	EXPORTPREPOSTREGVAR(PRose3D, T) \
	EXPORTPREPOSTREGVAR(LogDB, T) \
	EXPORTPREPOSTREGVAR(CircleSplit, T) \
	EXPORTPREPOSTREGVAR(Cylinder2, T) \
	EXPORTPREPOSTREGVAR(TileLog, T) \
	EXPORTPREPOSTREGVAR(TileHlp, T) \
	EXPORTPREPOSTREGVAR(Truchet, T) \
	EXPORTPREPOSTREGVAR(TruchetFill, T) \
	EXPORTPREPOSTREGVAR(TruchetHexFill, T) \
	EXPORTPREPOSTREGVAR(TruchetHexCrop, T) \
	EXPORTPREPOSTREGVAR(TruchetGlyph, T) \
	EXPORTPREPOSTREGVAR(TruchetInv, T) \
	EXPORTPREPOSTREGVAR(TruchetKnot, T) \
	EXPORTPREPOSTREGVAR(Waves2Radial, T) \
	EXPORTPREPOSTREGVAR(Panorama1, T) \
	EXPORTPREPOSTREGVAR(Panorama2, T) \
	EXPORTPREPOSTREGVAR(Helicoid, T) \
	EXPORTPREPOSTREGVAR(Helix, T) \
	EXPORTPREPOSTREGVAR(Sphereblur, T) \
	EXPORTPREPOSTREGVAR(Cpow3, T) \
	EXPORTPREPOSTREGVAR(Concentric, T) \
	EXPORTPREPOSTREGVAR(Hypercrop, T) \
	EXPORTPREPOSTREGVAR(Hypershift, T) \
	EXPORTPREPOSTREGVAR(Hypershift2, T) \
	EXPORTPREPOSTREGVAR(Lens, T) \
	EXPORTPREPOSTREGVAR(Projective, T) \
	EXPORTPREPOSTREGVAR(DepthBlur, T) \
	EXPORTPREPOSTREGVAR(DepthBlur2, T) \
	EXPORTPREPOSTREGVAR(DepthGaussian, T) \
	EXPORTPREPOSTREGVAR(DepthGaussian2, T) \
	EXPORTPREPOSTREGVAR(DepthNgon, T) \
	EXPORTPREPOSTREGVAR(DepthNgon2, T) \
	EXPORTPREPOSTREGVAR(DepthSine, T) \
	EXPORTPREPOSTREGVAR(DepthSine2, T) \
	EXPORTPREPOSTREGVAR(CothSpiral, T) \
	EXPORTPREPOSTREGVAR(Dust, T) \
	EXPORTPREPOSTREGVAR(Asteria, T) \
	EXPORTPREPOSTREGVAR(Pulse, T) \
	EXPORTPREPOSTREGVAR(Excinis, T) \
	EXPORTPREPOSTREGVAR(Vibration, T) \
	EXPORTPREPOSTREGVAR(Vibration2, T) \
	EXPORTPREPOSTREGVAR(Arcsech, T) \
	EXPORTPREPOSTREGVAR(Arcsech2, T) \
	EXPORTPREPOSTREGVAR(Arcsinh, T) \
	EXPORTPREPOSTREGVAR(Arctanh, T) \
	EXPORTPREPOSTREGVAR(HexTruchet, T) \
	EXPORTPREPOSTREGVAR(HexRand, T) \
	EXPORTPREPOSTREGVAR(Smartshape, T) \
	EXPORTPREPOSTREGVAR(Squares, T) \
	EXPORTPREPOSTREGVAR(Starblur2, T) \
	EXPORTPREPOSTREGVAR(UnicornGaloshen, T) \
	EXPORTPREPOSTREGVAR(Dragonfire, T) \
	EXPORTPREPOSTREGVAR(Henon, T) \
	EXPORTPREPOSTREGVAR(Lozi, T) \
	EXPORTPREPOSTREGVAR(PointSymmetry, T) \
	EXPORTPREPOSTREGVAR(DSpherical, T) \
	EXPORTPREPOSTREGVAR(Modulusx, T) \
	EXPORTPREPOSTREGVAR(Modulusy, T) \
	EXPORTPREPOSTREGVAR(Rotate, T) \
	EXPORTPREPOSTREGVAR(Shift, T) \
	template EMBER_API class PostSmartcropVariation<T>; /*Only implemented as post.*/ \
	EXPORTPREPOSTREGVAR(DCBubble, T) \
	EXPORTPREPOSTREGVAR(DCCarpet, T) \
	EXPORTPREPOSTREGVAR(DCCube, T) \
	EXPORTPREPOSTREGVAR(DCCylinder, T) \
	EXPORTPREPOSTREGVAR(DCGridOut, T) \
	EXPORTPREPOSTREGVAR(DCLinear, T) \
	EXPORTPREPOSTREGVAR(DCPerlin, T) \
	EXPORTPREPOSTREGVAR(DCZTransl, T) \
	EXPORTPREPOSTREGVAR(DCTriangle, T) \
	EXPORTPREPOSTREGVAR(RandCubes, T) \
	EXPORTPREPOSTREGVAR(PixelFlow, T) \
	EXPORTPREPOSTREGVAR(Waves22, T) \
	EXPORTPREPOSTREGVAR(Waves23, T) \
	EXPORTPREPOSTREGVAR(Waves42, T) \
	EXPORTPREPOSTREGVAR(Waves3, T) \
	EXPORTPREPOSTREGVAR(Waves4, T) \
	EXPORTPREPOSTREGVAR(Gnarly, T) \
	EXPORTPREPOSTREGVAR(Inkdrop, T) \
	EXPORTPREPOSTREGVAR(HexModulus, T) \
	template EMBER_API class VariationList<T>; \
	template EMBER_API class SpatialFilter<T>; \
	template EMBER_API class GaussianFilter<T>; \
	template EMBER_API class HermiteFilter<T>; \
	template EMBER_API class BoxFilter<T>; \
	template EMBER_API class TriangleFilter<T>; \
	template EMBER_API class BellFilter<T>; \
	template EMBER_API class BsplineFilter<T>; \
	template EMBER_API class MitchellFilter<T>; \
	template EMBER_API class BlackmanFilter<T>; \
	template EMBER_API class CatromFilter<T>; \
	template EMBER_API class HanningFilter<T>; \
	template EMBER_API class HammingFilter<T>; \
	template EMBER_API class Lanczos3Filter<T>; \
	template EMBER_API class Lanczos2Filter<T>; \
	template EMBER_API class QuadraticFilter<T>; \
	template EMBER_API class DensityFilter<T>; \
	template EMBER_API class TemporalFilter<T>; \
	template EMBER_API class ExpTemporalFilter<T>; \
	template EMBER_API class GaussianTemporalFilter<T>; \
	template EMBER_API class BoxTemporalFilter<T>; \
	template EMBER_API class SpatialFilterCreator<T>; \
	template EMBER_API class TemporalFilterCreator<T>; \
	template EMBER_API class Interpolater<T>; \
	template EMBER_API class Ember<T>; \
	template EMBER_API class CarToRas<T>; \
	template EMBER_API class Curves<T>; \
	template EMBER_API class XmlToEmber<T>; \
	template EMBER_API class EmberToXml<T>;

#define EXPORT_TWO_TYPE_EMBER(T, bucketT) \
	template EMBER_API class SheepTools<T, bucketT>;

EXPORT_SINGLE_TYPE_EMBER(float)
EXPORT_TWO_TYPE_EMBER(float, float)

//Only ever use float palettes.
template EMBER_API class Palette<float>;
template EMBER_API class PaletteList<float>;
template EMBER_API class Spline<float>;

#ifdef DO_DOUBLE
	EXPORT_SINGLE_TYPE_EMBER(double)
	EXPORT_TWO_TYPE_EMBER(double, float)
#endif
}
