diff --git a/Builds/MSVC/VS2013/Ember.vcxproj b/Builds/MSVC/VS2013/Ember.vcxproj
index 0688dec..36a660c 100644
--- a/Builds/MSVC/VS2013/Ember.vcxproj
+++ b/Builds/MSVC/VS2013/Ember.vcxproj
@@ -320,6 +320,7 @@
+
diff --git a/Builds/MSVC/VS2013/Ember.vcxproj.filters b/Builds/MSVC/VS2013/Ember.vcxproj.filters
index c5bda1e..62849b1 100644
--- a/Builds/MSVC/VS2013/Ember.vcxproj.filters
+++ b/Builds/MSVC/VS2013/Ember.vcxproj.filters
@@ -145,6 +145,9 @@
Source Files
+
+ Header Files\Variations
+
diff --git a/Builds/QtCreator/Ember/Ember.pro b/Builds/QtCreator/Ember/Ember.pro
index 9f0ea05..45e613b 100644
--- a/Builds/QtCreator/Ember/Ember.pro
+++ b/Builds/QtCreator/Ember/Ember.pro
@@ -23,7 +23,8 @@ SOURCES += \
$$PRJ_DIR/Ember.cpp \
$$PRJ_DIR/EmberPch.cpp \
$$PRJ_DIR/RendererBase.cpp \
- $$PRJ_DIR/Renderer.cpp
+ $$PRJ_DIR/Renderer.cpp \
+ $$PRJ_DIR/VariationList.cpp
include(deployment.pri)
qtcAddDeployment()
diff --git a/Source/Ember/Affine2D.h b/Source/Ember/Affine2D.h
index e30110e..b2c4353 100644
--- a/Source/Ember/Affine2D.h
+++ b/Source/Ember/Affine2D.h
@@ -121,13 +121,4 @@ public:
m23T m_Mat;
};
-
-//This class had to be implemented in a cpp file because the compiler was breaking.
-//So the explicit instantiation must be declared here rather than in Ember.cpp where
-//all of the other classes are done.
-//template EMBER_API class Affine2D;
-
-//#ifdef DO_DOUBLE
-// template EMBER_API class Affine2D;
-//#endif
}
diff --git a/Source/Ember/Ember.cpp b/Source/Ember/Ember.cpp
index eb6bd76..4e878fd 100644
--- a/Source/Ember/Ember.cpp
+++ b/Source/Ember/Ember.cpp
@@ -51,9 +51,9 @@ bool Timing::m_TimingInit = false;
uint Timing::m_ProcessorCount;
#define EXPORTPREPOSTREGVAR(varName, T) \
- template EMBER_API class varName##Variation; \
- template EMBER_API class Pre##varName##Variation; \
- template EMBER_API class Post##varName##Variation;
+ template class varName##Variation; \
+ template class Pre##varName##Variation; \
+ template class Post##varName##Variation;
#define EXPORT_SINGLE_TYPE_EMBER(T) \
template<> const char* PaletteList::m_DefaultFilename = "flam3-palettes.xml"; \
diff --git a/Source/Ember/Ember.h b/Source/Ember/Ember.h
index 856b6c9..e294ce8 100644
--- a/Source/Ember/Ember.h
+++ b/Source/Ember/Ember.h
@@ -13,6 +13,8 @@
namespace EmberNs
{
+template class Interpolater;
+
///
/// Bit position specifying the presence of each type of 3D parameter.
/// One, none, some or all of these can be present.
@@ -42,6 +44,7 @@ public:
/// Default constructor which calls Init() to set default values.
///
Ember()
+ : m_VariationList(VariationList::Instance())
{
Init();
}
@@ -51,7 +54,8 @@ public:
///
/// The Ember object to copy
Ember(const Ember& ember)
- : m_Edits(nullptr)
+ : m_VariationList(VariationList::Instance()),
+ m_Edits(nullptr)
{
Ember::operator=(ember);
}
@@ -62,7 +66,8 @@ public:
/// The Ember object to copy
template
Ember(const Ember& ember)
- : m_Edits(nullptr)
+ : m_VariationList(VariationList::Instance()),
+ m_Edits(nullptr)
{
Ember::operator=(ember);
}
@@ -299,7 +304,7 @@ public:
ember.m_FinalXform.m_ColorSpeed = 0;
ember.m_FinalXform.m_Motion.clear();
ember.m_FinalXform.ClearAndDeleteVariations();
- ember.m_FinalXform.AddVariation(new LinearVariation(0));//Do this so it doesn't appear empty.
+ ember.m_FinalXform.AddVariation(m_VariationList.GetVariationCopy(eVariationId::VAR_LINEAR, 0));//Do this so it doesn't appear empty.
}
}
@@ -1096,7 +1101,7 @@ public:
m_Xforms[i].m_Affine.D(0);
m_Xforms[i].m_Affine.E(1);
m_Xforms[i].m_Affine.F(0);
- m_Xforms[i].AddVariation(new LinearVariation());
+ m_Xforms[i].AddVariation(m_VariationList.GetVariationCopy(eVariationId::VAR_LINEAR));
result++;
sym = -sym;
}
@@ -1118,7 +1123,7 @@ public:
m_Xforms[i].m_Affine.E(m_Xforms[i].m_Affine.A());
m_Xforms[i].m_Affine.C(0);
m_Xforms[i].m_Affine.F(0);
- m_Xforms[i].AddVariation(new LinearVariation());
+ m_Xforms[i].AddVariation(m_VariationList.GetVariationCopy(eVariationId::VAR_LINEAR));
result++;
}
@@ -1747,6 +1752,9 @@ private:
//Xml field: "finalxform".
Xform m_FinalXform;
+ //Single global reference to create variations with.
+ VariationList& m_VariationList;
+
///
/// Interpolation function that takes the address of a member variable of type T as a template parameter.
/// This is an alternative to using macros.
diff --git a/Source/Ember/Interpolate.h b/Source/Ember/Interpolate.h
index dcfa744..7d56def 100644
--- a/Source/Ember/Interpolate.h
+++ b/Source/Ember/Interpolate.h
@@ -1,6 +1,7 @@
#pragma once
#include "Ember.h"
+#include "VariationList.h"
///
/// Interpolater class.
@@ -12,6 +13,7 @@ namespace EmberNs
/// g++ needs a forward declaration here.
///
template class Ember;
+template class VariationList;
///
/// Contains many static functions for handling interpolation and other miscellaneous operations on
@@ -42,6 +44,7 @@ public:
bool currentFinal, final = sourceEmbers[0].UseFinalXform();
size_t i, xf, currentCount, maxCount = sourceEmbers[0].XformCount();
Xform* destOtherXform;
+ VariationList& variationList(VariationList::Instance());
//Determine the max number of xforms present in sourceEmbers.
//Also check if final xforms are used in any of them.
@@ -135,7 +138,7 @@ public:
destOtherXform->GetVariationById(eVariationId::VAR_WEDGE_SPH) ||
destOtherXform->GetVariationById(eVariationId::VAR_WEDGE_JULIA))
{
- destXform->AddVariation(new LinearVariation(-1));
+ destXform->AddVariation(variationList.GetVariationCopy(eVariationId::VAR_LINEAR, -1));
//Set the coefs appropriately.
destXform->m_Affine.A(-1);
destXform->m_Affine.D(0);
@@ -164,58 +167,71 @@ public:
if (destOtherXform->GetVariationById(eVariationId::VAR_RECTANGLES))
{
- RectanglesVariation* var = new RectanglesVariation();
- var->SetParamVal("rectangles_x", 0);
- var->SetParamVal("rectangles_y", 0);
- destXform->AddVariation(var);
+ if (auto var = variationList.GetParametricVariationCopy(eVariationId::VAR_RECTANGLES))
+ {
+ var->SetParamVal("rectangles_x", 0);
+ var->SetParamVal("rectangles_y", 0);
+ destXform->AddVariation(var);
+ }
+
found++;
}
if (destOtherXform->GetVariationById(eVariationId::VAR_RINGS2))
{
- Rings2Variation* var = new Rings2Variation();
- var->SetParamVal("rings2_val", 0);
- destXform->AddVariation(var);
+ if (auto var = variationList.GetParametricVariationCopy(eVariationId::VAR_RINGS2))
+ {
+ var->SetParamVal("rings2_val", 0);
+ destXform->AddVariation(var);
+ }
+
found++;
}
if (destOtherXform->GetVariationById(eVariationId::VAR_FAN2))
{
- Fan2Variation* var = new Fan2Variation();
- destXform->AddVariation(var);
+ destXform->AddVariation(variationList.GetVariationCopy(eVariationId::VAR_FAN2));
found++;
}
if (destOtherXform->GetVariationById(eVariationId::VAR_BLOB))
{
- BlobVariation* var = new BlobVariation();
- var->SetParamVal("blob_low", 1);
- destXform->AddVariation(var);
+ if (auto var = variationList.GetParametricVariationCopy(eVariationId::VAR_BLOB))
+ {
+ var->SetParamVal("blob_low", 1);
+ destXform->AddVariation(var);
+ }
+
found++;
}
if (destOtherXform->GetVariationById(eVariationId::VAR_PERSPECTIVE))
{
- PerspectiveVariation* var = new PerspectiveVariation();
- destXform->AddVariation(var);
+ destXform->AddVariation(variationList.GetVariationCopy(eVariationId::VAR_PERSPECTIVE));
found++;
}
if (destOtherXform->GetVariationById(eVariationId::VAR_CURL))
{
- CurlVariation* var = new CurlVariation();
- var->SetParamVal("curl_c1", 0);
- destXform->AddVariation(var);
+ if (auto var = variationList.GetParametricVariationCopy(eVariationId::VAR_CURL))
+ {
+ var->SetParamVal("curl_c1", 0);
+ destXform->AddVariation(var);
+ }
+
found++;
}
if (destOtherXform->GetVariationById(eVariationId::VAR_SUPER_SHAPE))
{
- SuperShapeVariation* var = new SuperShapeVariation();
- var->SetParamVal("super_shape_n1", 2);
- var->SetParamVal("super_shape_n2", 2);
- var->SetParamVal("super_shape_n3", 2);
- destXform->AddVariation(var);
+ if (auto var = variationList.GetParametricVariationCopy(eVariationId::VAR_SUPER_SHAPE))
+ {
+ var->SetParamVal("super_shape_n1", 2);
+ var->SetParamVal("super_shape_n2", 2);
+ var->SetParamVal("super_shape_n3", 2);
+ destXform->AddVariation(var);
+ }
+
found++;
}
}
@@ -238,13 +254,13 @@ public:
if (destOtherXform->GetVariationById(eVariationId::VAR_FAN))
{
- destXform->AddVariation(new FanVariation());
+ destXform->AddVariation(variationList.GetVariationCopy(eVariationId::VAR_FAN));
found++;
}
if (destOtherXform->GetVariationById(eVariationId::VAR_RINGS))
{
- destXform->AddVariation(new RingsVariation());
+ destXform->AddVariation(variationList.GetVariationCopy(eVariationId::VAR_RINGS));
found++;
}
}
@@ -264,7 +280,7 @@ public:
//If there still are no matches, switch back to linear.
if (found == 0)
{
- destXform->AddVariation(new LinearVariation());
+ destXform->AddVariation(variationList.GetVariationCopy(eVariationId::VAR_LINEAR));
}
else if (found > 0)
{
@@ -892,105 +908,6 @@ public:
}
}
- /*
- //Will need to alter this to handle 2D palettes.
- static bool InterpMissingColors(vector>& palette)
- {
- //Check for a non-full palette.
- int minIndex, maxIndex;
- int colorli, colorri;
- int wrapMin, wrapMax;
- int intl, intr;
- int str, enr;
- int i, j, k;
- double prcr;
-
- if (palette.size() != 256)
- return false;
-
- for (i = 0; i < 256; i++)
- {
- if (palette[i].m_Index >= 0)
- {
- minIndex = i;
- break;
- }
- }
-
- if (i == 256)
- {
- //No colors. Set all indices properly.
- for (i = 0; i < 256; i++)
- palette[i].m_Index = (T)i;
-
- return false;
- }
-
- wrapMin = minIndex + 256;
-
- for (i = 255; i >= 0; i--)//Moving backwards, ouch!
- {
- if (palette[i].m_Index >= 0)
- {
- maxIndex = i;
- break;
- }
- }
-
- wrapMax = maxIndex - 256;
-
- //Loop over the indices looking for negs,
- i = 0;
-
- while (i < 256)
- {
- if (palette[i].m_Index < 0)
- {
- //Start of a range of negs.
- str = i;
- intl = i - 1;
- colorli = intl;
-
- while (palette[i].m_Index < 0 && i < 256)
- {
- enr = i;
- intr = i + 1;
- colorri = intr;
- i++;
- }
-
- if (intl == -1)
- {
- intl = wrapMax;
- colorli = maxIndex;
- }
-
- if (intr == 256)
- {
- intr = wrapMin;
- colorri = minIndex;
- }
-
- for (j = str; j <= enr; j++)
- {
- prcr = (j - intl) / T(intr - intl);
-
- for (k = 0; k <= 3; k++)
- palette[j].Channels[k] = T(palette[colorli].Channels[k] * (1 - prcr) + palette[colorri].Channels[k] * prcr);
-
- palette[j].m_Index = T(j);
- }
-
- i = colorri + 1;
- }
- else
- i++;
- }
-
- return true;
- }
- */
-
///
/// Compare xforms for sorting based first on color speed and second on determinants if
/// color speeds are equal.
diff --git a/Source/Ember/Renderer.cpp b/Source/Ember/Renderer.cpp
index 8b974a8..7ea4173 100644
--- a/Source/Ember/Renderer.cpp
+++ b/Source/Ember/Renderer.cpp
@@ -107,7 +107,6 @@ void Renderer::ComputeBounds()
///
/// Compute the scale based on the zoom, then the quality based on the computed scale.
-/// This sets up the bounds of the cartesian plane that the raster bounds correspond to.
/// This must be called before ComputeCamera() which will use scale.
///
template
diff --git a/Source/Ember/SheepTools.h b/Source/Ember/SheepTools.h
index 121ff17..87853c3 100644
--- a/Source/Ember/SheepTools.h
+++ b/Source/Ember/SheepTools.h
@@ -62,6 +62,7 @@ public:
/// The full path and filename of the palette file
/// A pre-constructed renderer to use. The caller should not delete this.
SheepTools(const string& palettePath, Renderer* renderer)
+ : m_VariationList(VariationList::Instance())
{
Timing t;
m_Smooth = true;
@@ -87,9 +88,9 @@ public:
Xform xform1(T(0.25), T(1), T(0.5), T(1), T(0.5), T(0), T(0), T(0.5), T(0.5), T(0.25));
Xform xform2(T(0.25), T(0.66), T(0.5), T(1), T(0.5), T(0), T(0), T(0.5), T(-0.5), T(0.25));
Xform xform3(T(0.25), T(0.33), T(0.5), T(1), T(0.5), T(0), T(0), T(0.5), T(0.0), T(-0.5));
- xform1.AddVariation(new LinearVariation());
- xform2.AddVariation(new LinearVariation());
- xform3.AddVariation(new LinearVariation());
+ xform1.AddVariation(m_VariationList.GetVariationCopy(eVariationId::VAR_LINEAR));
+ xform2.AddVariation(m_VariationList.GetVariationCopy(eVariationId::VAR_LINEAR));
+ xform3.AddVariation(m_VariationList.GetVariationCopy(eVariationId::VAR_LINEAR));
ember.AddXform(xform1);
ember.AddXform(xform2);
ember.AddXform(xform3);
@@ -1349,6 +1350,6 @@ private:
unique_ptr> m_Renderer;
QTIsaac m_Rand;
PaletteList m_PaletteList;
- VariationList m_VariationList;
+ VariationList& m_VariationList;
};
}
diff --git a/Source/Ember/VariationList.cpp b/Source/Ember/VariationList.cpp
new file mode 100644
index 0000000..e3ff9ae
--- /dev/null
+++ b/Source/Ember/VariationList.cpp
@@ -0,0 +1,589 @@
+#include "EmberPch.h"
+#include "VariationList.h"
+#include "Variations01.h"
+#include "Variations02.h"
+#include "Variations03.h"
+#include "Variations04.h"
+#include "Variations05.h"
+#include "Variations06.h"
+#include "Variations07.h"
+#include "VariationsDC.h"
+
+namespace EmberNs
+{
+#define ADDPREPOSTREGVAR(varName) \
+ m_Variations.push_back(new varName##Variation()); \
+ m_Variations.push_back(new Pre##varName##Variation()); \
+ m_Variations.push_back(new Post##varName##Variation());
+
+///
+/// Singleton pattern, return a reference to the only instance of this object in existence.
+///
+template
+VariationList& VariationList::Instance()
+{
+ static VariationList v;
+ return v;
+}
+
+///
+/// Constructor which initializes all of the variation objects and stores them in the list.
+///
+template
+VariationList::VariationList()
+{
+ m_Variations.reserve(size_t(eVariationId::LAST_VAR));
+ ADDPREPOSTREGVAR(Linear)
+ ADDPREPOSTREGVAR(Sinusoidal)
+ ADDPREPOSTREGVAR(Spherical)
+ ADDPREPOSTREGVAR(Swirl)
+ ADDPREPOSTREGVAR(Horseshoe)
+ ADDPREPOSTREGVAR(Polar)
+ ADDPREPOSTREGVAR(Handkerchief)
+ ADDPREPOSTREGVAR(Heart)
+ ADDPREPOSTREGVAR(Disc)
+ ADDPREPOSTREGVAR(Spiral)
+ ADDPREPOSTREGVAR(Hyperbolic)
+ ADDPREPOSTREGVAR(Diamond)
+ ADDPREPOSTREGVAR(Ex)
+ ADDPREPOSTREGVAR(Julia)
+ ADDPREPOSTREGVAR(Bent)
+ ADDPREPOSTREGVAR(Waves)
+ ADDPREPOSTREGVAR(Fisheye)
+ ADDPREPOSTREGVAR(Popcorn)
+ ADDPREPOSTREGVAR(Exponential)
+ ADDPREPOSTREGVAR(Power)
+ ADDPREPOSTREGVAR(Cosine)
+ ADDPREPOSTREGVAR(Rings)
+ ADDPREPOSTREGVAR(Fan)
+ ADDPREPOSTREGVAR(Blob)
+ ADDPREPOSTREGVAR(Pdj)
+ ADDPREPOSTREGVAR(Fan2)
+ ADDPREPOSTREGVAR(Rings2)
+ ADDPREPOSTREGVAR(Eyefish)
+ ADDPREPOSTREGVAR(Bubble)
+ ADDPREPOSTREGVAR(Cylinder)
+ ADDPREPOSTREGVAR(Perspective)
+ ADDPREPOSTREGVAR(Noise)
+ ADDPREPOSTREGVAR(JuliaNGeneric)
+ ADDPREPOSTREGVAR(JuliaScope)
+ ADDPREPOSTREGVAR(Blur)
+ ADDPREPOSTREGVAR(GaussianBlur)
+ ADDPREPOSTREGVAR(RadialBlur)
+ ADDPREPOSTREGVAR(Pie)
+ ADDPREPOSTREGVAR(Ngon)
+ ADDPREPOSTREGVAR(Curl)
+ ADDPREPOSTREGVAR(Rectangles)
+ ADDPREPOSTREGVAR(Arch)
+ ADDPREPOSTREGVAR(Tangent)
+ ADDPREPOSTREGVAR(Square)
+ ADDPREPOSTREGVAR(Rays)
+ ADDPREPOSTREGVAR(Blade)
+ ADDPREPOSTREGVAR(Secant2)
+ ADDPREPOSTREGVAR(TwinTrian)
+ ADDPREPOSTREGVAR(Cross)
+ ADDPREPOSTREGVAR(Disc2)
+ ADDPREPOSTREGVAR(SuperShape)
+ ADDPREPOSTREGVAR(Flower)
+ ADDPREPOSTREGVAR(Conic)
+ ADDPREPOSTREGVAR(Parabola)
+ ADDPREPOSTREGVAR(Bent2)
+ ADDPREPOSTREGVAR(Bipolar)
+ ADDPREPOSTREGVAR(Boarders)
+ ADDPREPOSTREGVAR(Butterfly)
+ ADDPREPOSTREGVAR(Cell)
+ ADDPREPOSTREGVAR(Cpow)
+ ADDPREPOSTREGVAR(Curve)
+ ADDPREPOSTREGVAR(Edisc)
+ ADDPREPOSTREGVAR(Elliptic)
+ ADDPREPOSTREGVAR(Escher)
+ ADDPREPOSTREGVAR(Foci)
+ ADDPREPOSTREGVAR(LazySusan)
+ ADDPREPOSTREGVAR(Loonie)
+ ADDPREPOSTREGVAR(Modulus)
+ ADDPREPOSTREGVAR(Oscilloscope)
+ ADDPREPOSTREGVAR(Polar2)
+ ADDPREPOSTREGVAR(Popcorn2)
+ ADDPREPOSTREGVAR(Scry)
+ ADDPREPOSTREGVAR(Separation)
+ ADDPREPOSTREGVAR(Split)
+ ADDPREPOSTREGVAR(Splits)
+ ADDPREPOSTREGVAR(Stripes)
+ ADDPREPOSTREGVAR(Wedge)
+ ADDPREPOSTREGVAR(WedgeJulia)
+ ADDPREPOSTREGVAR(WedgeSph)
+ ADDPREPOSTREGVAR(Whorl)
+ ADDPREPOSTREGVAR(Waves2)
+ ADDPREPOSTREGVAR(Exp)
+ ADDPREPOSTREGVAR(Log)
+ ADDPREPOSTREGVAR(Sin)
+ ADDPREPOSTREGVAR(Cos)
+ ADDPREPOSTREGVAR(Tan)
+ ADDPREPOSTREGVAR(Sec)
+ ADDPREPOSTREGVAR(Csc)
+ ADDPREPOSTREGVAR(Cot)
+ ADDPREPOSTREGVAR(Sinh)
+ ADDPREPOSTREGVAR(Cosh)
+ ADDPREPOSTREGVAR(Tanh)
+ ADDPREPOSTREGVAR(Sech)
+ ADDPREPOSTREGVAR(Csch)
+ ADDPREPOSTREGVAR(Coth)
+ ADDPREPOSTREGVAR(Auger)
+ ADDPREPOSTREGVAR(Flux)
+ ADDPREPOSTREGVAR(Hemisphere)
+ ADDPREPOSTREGVAR(Epispiral)
+ ADDPREPOSTREGVAR(Bwraps)
+ ADDPREPOSTREGVAR(BlurCircle)
+ ADDPREPOSTREGVAR(BlurZoom)
+ ADDPREPOSTREGVAR(BlurPixelize)
+ ADDPREPOSTREGVAR(Crop)
+ ADDPREPOSTREGVAR(BCircle)
+ ADDPREPOSTREGVAR(BlurLinear)
+ ADDPREPOSTREGVAR(BlurSquare)
+ ADDPREPOSTREGVAR(Boarders2)
+ ADDPREPOSTREGVAR(Cardioid)
+ ADDPREPOSTREGVAR(Checks)
+ ADDPREPOSTREGVAR(Circlize)
+ ADDPREPOSTREGVAR(Circlize2)
+ ADDPREPOSTREGVAR(CosWrap)
+ ADDPREPOSTREGVAR(DeltaA)
+ ADDPREPOSTREGVAR(Expo)
+ ADDPREPOSTREGVAR(Extrude)
+ ADDPREPOSTREGVAR(FDisc)
+ ADDPREPOSTREGVAR(Fibonacci)
+ ADDPREPOSTREGVAR(Fibonacci2)
+ ADDPREPOSTREGVAR(Glynnia)
+ ADDPREPOSTREGVAR(GridOut)
+ ADDPREPOSTREGVAR(Hole)
+ ADDPREPOSTREGVAR(Hypertile)
+ ADDPREPOSTREGVAR(Hypertile1)
+ ADDPREPOSTREGVAR(Hypertile2)
+ ADDPREPOSTREGVAR(Hypertile3D)
+ ADDPREPOSTREGVAR(Hypertile3D1)
+ ADDPREPOSTREGVAR(Hypertile3D2)
+ ADDPREPOSTREGVAR(IDisc)
+ ADDPREPOSTREGVAR(Julian2)
+ ADDPREPOSTREGVAR(JuliaQ)
+ ADDPREPOSTREGVAR(Murl)
+ ADDPREPOSTREGVAR(Murl2)
+ ADDPREPOSTREGVAR(NPolar)
+ ADDPREPOSTREGVAR(Ortho)
+ ADDPREPOSTREGVAR(Poincare)
+ ADDPREPOSTREGVAR(Poincare3D)
+ ADDPREPOSTREGVAR(Polynomial)
+ ADDPREPOSTREGVAR(PSphere)
+ ADDPREPOSTREGVAR(Rational3)
+ ADDPREPOSTREGVAR(Ripple)
+ ADDPREPOSTREGVAR(Sigmoid)
+ ADDPREPOSTREGVAR(SinusGrid)
+ ADDPREPOSTREGVAR(Stwin)
+ ADDPREPOSTREGVAR(TwoFace)
+ ADDPREPOSTREGVAR(Unpolar)
+ ADDPREPOSTREGVAR(WavesN)
+ ADDPREPOSTREGVAR(XHeart)
+ ADDPREPOSTREGVAR(Barycentroid)
+ ADDPREPOSTREGVAR(BiSplit)
+ ADDPREPOSTREGVAR(Crescents)
+ ADDPREPOSTREGVAR(Mask)
+ ADDPREPOSTREGVAR(Cpow2)
+ ADDPREPOSTREGVAR(Curl3D)
+ ADDPREPOSTREGVAR(Disc3D)
+ ADDPREPOSTREGVAR(Funnel)
+ ADDPREPOSTREGVAR(Linear3D)
+ ADDPREPOSTREGVAR(PowBlock)
+ ADDPREPOSTREGVAR(Squirrel)
+ ADDPREPOSTREGVAR(Ennepers)
+ ADDPREPOSTREGVAR(SphericalN)
+ ADDPREPOSTREGVAR(Kaleidoscope)
+ ADDPREPOSTREGVAR(GlynnSim1)
+ ADDPREPOSTREGVAR(GlynnSim2)
+ ADDPREPOSTREGVAR(GlynnSim3)
+ ADDPREPOSTREGVAR(Starblur)
+ ADDPREPOSTREGVAR(Sineblur)
+ ADDPREPOSTREGVAR(Circleblur)
+ ADDPREPOSTREGVAR(CropN)
+ ADDPREPOSTREGVAR(ShredRad)
+ ADDPREPOSTREGVAR(Blob2)
+ ADDPREPOSTREGVAR(Julia3D)
+ ADDPREPOSTREGVAR(Julia3Dz)
+ ADDPREPOSTREGVAR(LinearT)
+ ADDPREPOSTREGVAR(LinearT3D)
+ ADDPREPOSTREGVAR(Ovoid)
+ ADDPREPOSTREGVAR(Ovoid3D)
+ ADDPREPOSTREGVAR(Spirograph)
+ ADDPREPOSTREGVAR(Petal)
+ ADDPREPOSTREGVAR(RoundSpher)
+ ADDPREPOSTREGVAR(RoundSpher3D)
+ ADDPREPOSTREGVAR(SpiralWing)
+ ADDPREPOSTREGVAR(Squarize)
+ ADDPREPOSTREGVAR(Sschecks)
+ ADDPREPOSTREGVAR(PhoenixJulia)
+ ADDPREPOSTREGVAR(Mobius)
+ ADDPREPOSTREGVAR(MobiusN)
+ ADDPREPOSTREGVAR(MobiusStrip)
+ ADDPREPOSTREGVAR(Lissajous)
+ ADDPREPOSTREGVAR(Svf)
+ ADDPREPOSTREGVAR(Target)
+ ADDPREPOSTREGVAR(Taurus)
+ ADDPREPOSTREGVAR(Collideoscope)
+ ADDPREPOSTREGVAR(BMod)
+ ADDPREPOSTREGVAR(BSwirl)
+ ADDPREPOSTREGVAR(BTransform)
+ ADDPREPOSTREGVAR(BCollide)
+ ADDPREPOSTREGVAR(Eclipse)
+ ADDPREPOSTREGVAR(FlipCircle)
+ ADDPREPOSTREGVAR(FlipY)
+ ADDPREPOSTREGVAR(ECollide)
+ ADDPREPOSTREGVAR(EJulia)
+ ADDPREPOSTREGVAR(EMod)
+ ADDPREPOSTREGVAR(EMotion)
+ ADDPREPOSTREGVAR(EPush)
+ ADDPREPOSTREGVAR(ERotate)
+ ADDPREPOSTREGVAR(EScale)
+ ADDPREPOSTREGVAR(ESwirl)
+ ADDPREPOSTREGVAR(LazyTravis)
+ ADDPREPOSTREGVAR(Squish)
+ ADDPREPOSTREGVAR(Circus)
+ ADDPREPOSTREGVAR(Tancos)
+ ADDPREPOSTREGVAR(Rippled)
+ ADDPREPOSTREGVAR(RotateX)
+ ADDPREPOSTREGVAR(RotateY)
+ ADDPREPOSTREGVAR(RotateZ)
+ ADDPREPOSTREGVAR(Flatten)
+ ADDPREPOSTREGVAR(Zblur)
+ ADDPREPOSTREGVAR(Blur3D)
+ ADDPREPOSTREGVAR(ZScale)
+ ADDPREPOSTREGVAR(ZTranslate)
+ ADDPREPOSTREGVAR(ZCone)
+ ADDPREPOSTREGVAR(MirrorX)
+ ADDPREPOSTREGVAR(MirrorY)
+ ADDPREPOSTREGVAR(MirrorZ)
+ ADDPREPOSTREGVAR(Depth)
+ ADDPREPOSTREGVAR(Spherical3D)
+ ADDPREPOSTREGVAR(RBlur)
+ ADDPREPOSTREGVAR(JuliaNab)
+ ADDPREPOSTREGVAR(Sintrange)
+ ADDPREPOSTREGVAR(Voron)
+ ADDPREPOSTREGVAR(Waffle)
+ ADDPREPOSTREGVAR(Square3D)
+ ADDPREPOSTREGVAR(SuperShape3D)
+ ADDPREPOSTREGVAR(Sphyp3D)
+ ADDPREPOSTREGVAR(Circlecrop)
+ ADDPREPOSTREGVAR(Julian3Dx)
+ ADDPREPOSTREGVAR(Fourth)
+ ADDPREPOSTREGVAR(Mobiq)
+ ADDPREPOSTREGVAR(Spherivoid)
+ ADDPREPOSTREGVAR(Farblur)
+ ADDPREPOSTREGVAR(CurlSP)
+ ADDPREPOSTREGVAR(Heat)
+ ADDPREPOSTREGVAR(Interference2)
+ ADDPREPOSTREGVAR(Sinq)
+ ADDPREPOSTREGVAR(Sinhq)
+ ADDPREPOSTREGVAR(Secq)
+ ADDPREPOSTREGVAR(Sechq)
+ ADDPREPOSTREGVAR(Tanq)
+ ADDPREPOSTREGVAR(Tanhq)
+ ADDPREPOSTREGVAR(Cosq)
+ ADDPREPOSTREGVAR(Coshq)
+ ADDPREPOSTREGVAR(Cotq)
+ ADDPREPOSTREGVAR(Cothq)
+ ADDPREPOSTREGVAR(Cscq)
+ ADDPREPOSTREGVAR(Cschq)
+ ADDPREPOSTREGVAR(Estiq)
+ ADDPREPOSTREGVAR(Loq)
+ ADDPREPOSTREGVAR(Curvature)
+ ADDPREPOSTREGVAR(Qode)
+ ADDPREPOSTREGVAR(BlurHeart)
+ ADDPREPOSTREGVAR(Truchet)
+ ADDPREPOSTREGVAR(Gdoffs)
+ ADDPREPOSTREGVAR(Octagon)
+ ADDPREPOSTREGVAR(Trade)
+ ADDPREPOSTREGVAR(Juliac)
+ ADDPREPOSTREGVAR(Blade3D)
+ ADDPREPOSTREGVAR(Blob3D)
+ ADDPREPOSTREGVAR(Blocky)
+ ADDPREPOSTREGVAR(Bubble2)
+ ADDPREPOSTREGVAR(CircleLinear)
+ ADDPREPOSTREGVAR(CircleRand)
+ ADDPREPOSTREGVAR(CircleTrans1)
+ ADDPREPOSTREGVAR(Cubic3D)
+ ADDPREPOSTREGVAR(CubicLattice3D)
+ ADDPREPOSTREGVAR(Foci3D)
+ ADDPREPOSTREGVAR(Ho)
+ ADDPREPOSTREGVAR(Julia3Dq)
+ ADDPREPOSTREGVAR(Line)
+ ADDPREPOSTREGVAR(Loonie2)
+ ADDPREPOSTREGVAR(Loonie3)
+ ADDPREPOSTREGVAR(Loonie3D)
+ ADDPREPOSTREGVAR(Mcarpet)
+ ADDPREPOSTREGVAR(Waves23D)
+ ADDPREPOSTREGVAR(Pie3D)
+ ADDPREPOSTREGVAR(Popcorn23D)
+ ADDPREPOSTREGVAR(Sinusoidal3D)
+ ADDPREPOSTREGVAR(Scry3D)
+ ADDPREPOSTREGVAR(Shredlin)
+ ADDPREPOSTREGVAR(SplitBrdr)
+ ADDPREPOSTREGVAR(Wdisc)
+ ADDPREPOSTREGVAR(Falloff)
+ ADDPREPOSTREGVAR(Falloff2)
+ ADDPREPOSTREGVAR(Falloff3)
+ ADDPREPOSTREGVAR(Xtrb)
+ ADDPREPOSTREGVAR(Hexaplay3D)
+ ADDPREPOSTREGVAR(Hexnix3D)
+ ADDPREPOSTREGVAR(Hexcrop)
+ ADDPREPOSTREGVAR(Hexes)
+ ADDPREPOSTREGVAR(Nblur)
+ ADDPREPOSTREGVAR(Octapol)
+ ADDPREPOSTREGVAR(Crob)
+ ADDPREPOSTREGVAR(BubbleT3D)
+ ADDPREPOSTREGVAR(Synth)
+ ADDPREPOSTREGVAR(Crackle)
+ m_Variations.push_back(new PostSmartcropVariation());//Post only
+ ADDPREPOSTREGVAR(Xerf)
+ ADDPREPOSTREGVAR(Erf)
+ ADDPREPOSTREGVAR(W)
+ ADDPREPOSTREGVAR(X)
+ ADDPREPOSTREGVAR(Y)
+ ADDPREPOSTREGVAR(Z)
+ ADDPREPOSTREGVAR(Splits3D)
+ ADDPREPOSTREGVAR(Waves2B)
+ ADDPREPOSTREGVAR(JacCn)
+ ADDPREPOSTREGVAR(JacDn)
+ ADDPREPOSTREGVAR(JacSn)
+ ADDPREPOSTREGVAR(PressureWave)
+ ADDPREPOSTREGVAR(Gamma)
+ ADDPREPOSTREGVAR(PRose3D)
+ ADDPREPOSTREGVAR(LogDB)
+ //ADDPREPOSTREGVAR(LinearXZ)
+ //ADDPREPOSTREGVAR(LinearYZ)
+ //DC are special.
+ ADDPREPOSTREGVAR(DCBubble)
+ ADDPREPOSTREGVAR(DCCarpet)
+ ADDPREPOSTREGVAR(DCCube)
+ ADDPREPOSTREGVAR(DCCylinder)
+ ADDPREPOSTREGVAR(DCGridOut)
+ ADDPREPOSTREGVAR(DCLinear)
+ ADDPREPOSTREGVAR(DCPerlin)
+ ADDPREPOSTREGVAR(DCTriangle)
+ ADDPREPOSTREGVAR(DCZTransl)
+
+ for (auto var : m_Variations) var->Precalc();
+
+ std::sort(m_Variations.begin(), m_Variations.end(), [&](const Variation* var1, const Variation* var2) { return var1->VariationId() < var2->VariationId(); });
+ m_RegVariations.reserve(m_Variations.size() / 3);
+ m_PreVariations.reserve(m_Variations.size() / 3);
+ m_PostVariations.reserve(m_Variations.size() / 3);
+ m_ParametricVariations.reserve(size_t(m_Variations.size() * .90));//This is a rough guess at how many are parametric.
+
+ //Place pointers to variations in vectors specific to their type.
+ //Many of the elements in m_ParametricVariations will be present in the reg, pre and post vectors.
+ //Note that these are not new copies, rather just pointers to the original instances in m_Variations.
+ for (auto var : m_Variations)
+ {
+ if (var->VarType() == eVariationType::VARTYPE_REG)
+ m_RegVariations.push_back(var);
+ else if (var->VarType() == eVariationType::VARTYPE_PRE)
+ m_PreVariations.push_back(var);
+ else if (var->VarType() == eVariationType::VARTYPE_POST)
+ m_PostVariations.push_back(var);
+
+ if (auto parVar = dynamic_cast*>(var))
+ m_ParametricVariations.push_back(parVar);
+ }
+}
+
+///
+/// Delete each element of the list.
+///
+template
+VariationList::~VariationList()
+{
+ ClearVec(m_Variations);//No need to delete parametric because they point to the entries in original vector.
+}
+
+///
+/// Get a pointer to the variation at the specified index.
+///
+/// The index in the list to retrieve
+/// A pointer to the variation at the index if in range, else nullptr.
+template
+const Variation* VariationList::GetVariation(size_t index) const { return index < m_Variations.size() ? m_Variations[index] : nullptr; }
+
+///
+/// Get a pointer to the variation of a specified type at the specified index.
+///
+/// The index in the list to retrieve
+/// The type of variation to retrieve
+/// A pointer to the variation of the specified type at the index if in range, else nullptr.
+template
+const Variation* VariationList::GetVariation(size_t index, eVariationType varType) const
+{
+ switch (varType)
+ {
+ case eVariationType::VARTYPE_REG:
+ return index < m_RegVariations.size() ? m_RegVariations[index] : nullptr;
+ break;
+
+ case eVariationType::VARTYPE_PRE:
+ return index < m_PreVariations.size() ? m_PreVariations[index] : nullptr;
+ break;
+
+ case eVariationType::VARTYPE_POST:
+ return index < m_PostVariations.size() ? m_PostVariations[index] : nullptr;
+ break;
+
+ default:
+ return nullptr;
+ break;
+ }
+}
+
+///
+/// Gets a pointer to a copy of the variation at the specified index.
+/// Optionally specify a weight to assign the new copy.
+///
+/// The index in the list to make a copy of
+/// The weight to assign the new copy. Default: 1
+/// A pointer to the variation at the index if in range, else nullptr.
+template
+Variation* VariationList::GetVariationCopy(size_t index, T weight = 1) const { return MakeCopyWithWeight(GetVariation(index), weight); }
+template
+Variation* VariationList::GetVariationCopy(size_t index, eVariationType varType, T weight = 1) const { return MakeCopyWithWeight(GetVariation(index, varType), weight); }
+
+///
+/// Get a pointer to the variation with the specified ID.
+///
+/// The ID to search for
+/// A pointer to the variation if found, else nullptr.
+template
+const Variation* VariationList::GetVariation(eVariationId id) const
+{
+ for (auto var : m_Variations)
+ if (var && id == var->VariationId())
+ return var;
+
+ return nullptr;
+}
+
+///
+/// Gets a pointer to a copy of the variation with the specified ID.
+/// Optionally specify a weight to assign the new copy.
+///
+/// The id of the variation in the list to make a copy of
+/// The weight to assign the new copy. Default: 1
+/// A pointer to the variation with a matching ID, else nullptr.
+template
+Variation* VariationList::GetVariationCopy(eVariationId id, T weight = 1) const { return MakeCopyWithWeight(GetVariation(id), weight); }
+
+///
+/// Get a pointer to the variation with the specified name.
+///
+/// The name to search for
+/// A pointer to the variation if found, else nullptr.
+template
+const Variation* VariationList::GetVariation(const string& name) const
+{
+ for (auto var : m_Variations)
+ if (var && !_stricmp(name.c_str(), var->Name().c_str()))
+ return var;
+
+ return nullptr;
+}
+
+///
+/// Gets a pointer to a copy of the variation with the specified name.
+/// Optionally specify a weight to assign the new copy.
+///
+/// The name of the variation in the list to make a copy of
+/// The weight to assign the new copy. Default: 1
+/// A pointer to the variation with a matching name, else nullptr.
+template
+Variation* VariationList::GetVariationCopy(const string& name, T weight = 1) const { return MakeCopyWithWeight(GetVariation(name), weight); }
+
+///
+/// Get a parametric variation at the specified index.
+/// Note this is the index in the parametric variations list, not in the master list.
+///
+/// The index in the parametric variations list to retrieve
+/// The parametric variation at the index specified if in range, else nullptr.
+template
+const ParametricVariation* VariationList::GetParametricVariation(size_t index) const { return index < m_ParametricVariations.size() ? m_ParametricVariations[index] : nullptr; }
+
+///
+/// Get a parametric variation with the specified name.
+///
+/// The name of the variation in the parametric variations list to retrieve
+/// The parametric variation with a matching name, else nullptr.
+template
+const ParametricVariation* VariationList::GetParametricVariation(const string& name) const
+{
+ for (auto var : m_ParametricVariations)
+ if (var && !_stricmp(name.c_str(), var->Name().c_str()))
+ return var;
+
+ return nullptr;
+}
+
+template
+ParametricVariation* VariationList::GetParametricVariationCopy(eVariationId id, T weight) const
+{
+ return dynamic_cast*>(MakeCopyWithWeight(GetVariation(id), weight));
+}
+
+///
+/// Get the index of the variation with the specified name.
+///
+/// The name of the variation whose index is returned
+/// The index of the variation with the matching name, else -1
+template
+int VariationList::GetVariationIndex(const string& name) const
+{
+ for (size_t i = 0; i < m_Variations.size() && m_Variations[i]; i++)
+ if (!_stricmp(name.c_str(), m_Variations[i]->Name().c_str()))
+ return int(i);
+
+ return -1;
+}
+
+///
+/// Accessors.
+///
+template size_t VariationList::Size() const { return m_Variations.size(); }
+template size_t VariationList::RegSize() const { return m_RegVariations.size(); }
+template size_t VariationList::PreSize() const { return m_PreVariations.size(); }
+template size_t VariationList::PostSize() const { return m_PostVariations.size(); }
+template size_t VariationList::ParametricSize() const { return m_ParametricVariations.size(); }
+template const vector*>& VariationList::AllVars() const { return m_Variations; }
+template const vector*>& VariationList::RegVars() const { return m_RegVariations; }
+template const vector*>& VariationList::PreVars() const { return m_PreVariations; }
+template const vector*>& VariationList::PostVars() const { return m_PostVariations; }
+
+///
+/// Make a dyncamically allocated copy of a variation and assign it a specified weight.
+/// Return a pointer to the new copy.
+///
+/// The variation to copy
+/// The weight to assign it
+/// A pointer to the new variation copy if success, else nullptr.
+template
+Variation* VariationList::MakeCopyWithWeight(const Variation* var, T weight) const
+{
+ if (var)
+ {
+ auto var2 = var->Copy();
+ var2->m_Weight = weight;
+ return var2;
+ }
+
+ return nullptr;
+}
+
+//This class was implemented in a cpp file to avoid exposing so many variation classes.
+//So the explicit instantiation must be declared here rather than in Ember.cpp where
+//all of the other classes are done.
+template EMBER_API class VariationList;
+
+#ifdef DO_DOUBLE
+ template EMBER_API class VariationList;
+#endif
+}
\ No newline at end of file
diff --git a/Source/Ember/VariationList.h b/Source/Ember/VariationList.h
index 0e2d71e..cf31970 100644
--- a/Source/Ember/VariationList.h
+++ b/Source/Ember/VariationList.h
@@ -1,13 +1,6 @@
#pragma once
-#include "Variations01.h"
-#include "Variations02.h"
-#include "Variations03.h"
-#include "Variations04.h"
-#include "Variations05.h"
-#include "Variations06.h"
-#include "Variations07.h"
-#include "VariationsDC.h"
+#include "Variation.h"
///
/// VariationList class.
@@ -20,562 +13,44 @@ namespace EmberNs
/// of specific ones. This class holds a list of pointers to variation objects for every
/// variation available. Similar to the PaletteList class, a caller can look up a variation
/// by name or ID and retrieve a copy of it.
+/// This class follows the singleton pattern.
/// All variations are deleted upon destruction.
/// Template argument expected to be float or double.
///
template
class EMBER_API VariationList
{
-#define ADDPREPOSTREGVAR(varName) \
- m_Variations.push_back(new varName##Variation()); \
- m_Variations.push_back(new Pre##varName##Variation()); \
- m_Variations.push_back(new Post##varName##Variation());
-
public:
- ///
- /// Constructor which initializes all of the variation objects and stores them in the list.
- ///
- VariationList()
- {
- m_Variations.reserve(size_t(eVariationId::LAST_VAR));
- ADDPREPOSTREGVAR(Linear)
- ADDPREPOSTREGVAR(Sinusoidal)
- ADDPREPOSTREGVAR(Spherical)
- ADDPREPOSTREGVAR(Swirl)
- ADDPREPOSTREGVAR(Horseshoe)
- ADDPREPOSTREGVAR(Polar)
- ADDPREPOSTREGVAR(Handkerchief)
- ADDPREPOSTREGVAR(Heart)
- ADDPREPOSTREGVAR(Disc)
- ADDPREPOSTREGVAR(Spiral)
- ADDPREPOSTREGVAR(Hyperbolic)
- ADDPREPOSTREGVAR(Diamond)
- ADDPREPOSTREGVAR(Ex)
- ADDPREPOSTREGVAR(Julia)
- ADDPREPOSTREGVAR(Bent)
- ADDPREPOSTREGVAR(Waves)
- ADDPREPOSTREGVAR(Fisheye)
- ADDPREPOSTREGVAR(Popcorn)
- ADDPREPOSTREGVAR(Exponential)
- ADDPREPOSTREGVAR(Power)
- ADDPREPOSTREGVAR(Cosine)
- ADDPREPOSTREGVAR(Rings)
- ADDPREPOSTREGVAR(Fan)
- ADDPREPOSTREGVAR(Blob)
- ADDPREPOSTREGVAR(Pdj)
- ADDPREPOSTREGVAR(Fan2)
- ADDPREPOSTREGVAR(Rings2)
- ADDPREPOSTREGVAR(Eyefish)
- ADDPREPOSTREGVAR(Bubble)
- ADDPREPOSTREGVAR(Cylinder)
- ADDPREPOSTREGVAR(Perspective)
- ADDPREPOSTREGVAR(Noise)
- ADDPREPOSTREGVAR(JuliaNGeneric)
- ADDPREPOSTREGVAR(JuliaScope)
- ADDPREPOSTREGVAR(Blur)
- ADDPREPOSTREGVAR(GaussianBlur)
- ADDPREPOSTREGVAR(RadialBlur)
- ADDPREPOSTREGVAR(Pie)
- ADDPREPOSTREGVAR(Ngon)
- ADDPREPOSTREGVAR(Curl)
- ADDPREPOSTREGVAR(Rectangles)
- ADDPREPOSTREGVAR(Arch)
- ADDPREPOSTREGVAR(Tangent)
- ADDPREPOSTREGVAR(Square)
- ADDPREPOSTREGVAR(Rays)
- ADDPREPOSTREGVAR(Blade)
- ADDPREPOSTREGVAR(Secant2)
- ADDPREPOSTREGVAR(TwinTrian)
- ADDPREPOSTREGVAR(Cross)
- ADDPREPOSTREGVAR(Disc2)
- ADDPREPOSTREGVAR(SuperShape)
- ADDPREPOSTREGVAR(Flower)
- ADDPREPOSTREGVAR(Conic)
- ADDPREPOSTREGVAR(Parabola)
- ADDPREPOSTREGVAR(Bent2)
- ADDPREPOSTREGVAR(Bipolar)
- ADDPREPOSTREGVAR(Boarders)
- ADDPREPOSTREGVAR(Butterfly)
- ADDPREPOSTREGVAR(Cell)
- ADDPREPOSTREGVAR(Cpow)
- ADDPREPOSTREGVAR(Curve)
- ADDPREPOSTREGVAR(Edisc)
- ADDPREPOSTREGVAR(Elliptic)
- ADDPREPOSTREGVAR(Escher)
- ADDPREPOSTREGVAR(Foci)
- ADDPREPOSTREGVAR(LazySusan)
- ADDPREPOSTREGVAR(Loonie)
- ADDPREPOSTREGVAR(Modulus)
- ADDPREPOSTREGVAR(Oscilloscope)
- ADDPREPOSTREGVAR(Polar2)
- ADDPREPOSTREGVAR(Popcorn2)
- ADDPREPOSTREGVAR(Scry)
- ADDPREPOSTREGVAR(Separation)
- ADDPREPOSTREGVAR(Split)
- ADDPREPOSTREGVAR(Splits)
- ADDPREPOSTREGVAR(Stripes)
- ADDPREPOSTREGVAR(Wedge)
- ADDPREPOSTREGVAR(WedgeJulia)
- ADDPREPOSTREGVAR(WedgeSph)
- ADDPREPOSTREGVAR(Whorl)
- ADDPREPOSTREGVAR(Waves2)
- ADDPREPOSTREGVAR(Exp)
- ADDPREPOSTREGVAR(Log)
- ADDPREPOSTREGVAR(Sin)
- ADDPREPOSTREGVAR(Cos)
- ADDPREPOSTREGVAR(Tan)
- ADDPREPOSTREGVAR(Sec)
- ADDPREPOSTREGVAR(Csc)
- ADDPREPOSTREGVAR(Cot)
- ADDPREPOSTREGVAR(Sinh)
- ADDPREPOSTREGVAR(Cosh)
- ADDPREPOSTREGVAR(Tanh)
- ADDPREPOSTREGVAR(Sech)
- ADDPREPOSTREGVAR(Csch)
- ADDPREPOSTREGVAR(Coth)
- ADDPREPOSTREGVAR(Auger)
- ADDPREPOSTREGVAR(Flux)
- ADDPREPOSTREGVAR(Hemisphere)
- ADDPREPOSTREGVAR(Epispiral)
- ADDPREPOSTREGVAR(Bwraps)
- ADDPREPOSTREGVAR(BlurCircle)
- ADDPREPOSTREGVAR(BlurZoom)
- ADDPREPOSTREGVAR(BlurPixelize)
- ADDPREPOSTREGVAR(Crop)
- ADDPREPOSTREGVAR(BCircle)
- ADDPREPOSTREGVAR(BlurLinear)
- ADDPREPOSTREGVAR(BlurSquare)
- ADDPREPOSTREGVAR(Boarders2)
- ADDPREPOSTREGVAR(Cardioid)
- ADDPREPOSTREGVAR(Checks)
- ADDPREPOSTREGVAR(Circlize)
- ADDPREPOSTREGVAR(Circlize2)
- ADDPREPOSTREGVAR(CosWrap)
- ADDPREPOSTREGVAR(DeltaA)
- ADDPREPOSTREGVAR(Expo)
- ADDPREPOSTREGVAR(Extrude)
- ADDPREPOSTREGVAR(FDisc)
- ADDPREPOSTREGVAR(Fibonacci)
- ADDPREPOSTREGVAR(Fibonacci2)
- ADDPREPOSTREGVAR(Glynnia)
- ADDPREPOSTREGVAR(GridOut)
- ADDPREPOSTREGVAR(Hole)
- ADDPREPOSTREGVAR(Hypertile)
- ADDPREPOSTREGVAR(Hypertile1)
- ADDPREPOSTREGVAR(Hypertile2)
- ADDPREPOSTREGVAR(Hypertile3D)
- ADDPREPOSTREGVAR(Hypertile3D1)
- ADDPREPOSTREGVAR(Hypertile3D2)
- ADDPREPOSTREGVAR(IDisc)
- ADDPREPOSTREGVAR(Julian2)
- ADDPREPOSTREGVAR(JuliaQ)
- ADDPREPOSTREGVAR(Murl)
- ADDPREPOSTREGVAR(Murl2)
- ADDPREPOSTREGVAR(NPolar)
- ADDPREPOSTREGVAR(Ortho)
- ADDPREPOSTREGVAR(Poincare)
- ADDPREPOSTREGVAR(Poincare3D)
- ADDPREPOSTREGVAR(Polynomial)
- ADDPREPOSTREGVAR(PSphere)
- ADDPREPOSTREGVAR(Rational3)
- ADDPREPOSTREGVAR(Ripple)
- ADDPREPOSTREGVAR(Sigmoid)
- ADDPREPOSTREGVAR(SinusGrid)
- ADDPREPOSTREGVAR(Stwin)
- ADDPREPOSTREGVAR(TwoFace)
- ADDPREPOSTREGVAR(Unpolar)
- ADDPREPOSTREGVAR(WavesN)
- ADDPREPOSTREGVAR(XHeart)
- ADDPREPOSTREGVAR(Barycentroid)
- ADDPREPOSTREGVAR(BiSplit)
- ADDPREPOSTREGVAR(Crescents)
- ADDPREPOSTREGVAR(Mask)
- ADDPREPOSTREGVAR(Cpow2)
- ADDPREPOSTREGVAR(Curl3D)
- ADDPREPOSTREGVAR(Disc3D)
- ADDPREPOSTREGVAR(Funnel)
- ADDPREPOSTREGVAR(Linear3D)
- ADDPREPOSTREGVAR(PowBlock)
- ADDPREPOSTREGVAR(Squirrel)
- ADDPREPOSTREGVAR(Ennepers)
- ADDPREPOSTREGVAR(SphericalN)
- ADDPREPOSTREGVAR(Kaleidoscope)
- ADDPREPOSTREGVAR(GlynnSim1)
- ADDPREPOSTREGVAR(GlynnSim2)
- ADDPREPOSTREGVAR(GlynnSim3)
- ADDPREPOSTREGVAR(Starblur)
- ADDPREPOSTREGVAR(Sineblur)
- ADDPREPOSTREGVAR(Circleblur)
- ADDPREPOSTREGVAR(CropN)
- ADDPREPOSTREGVAR(ShredRad)
- ADDPREPOSTREGVAR(Blob2)
- ADDPREPOSTREGVAR(Julia3D)
- ADDPREPOSTREGVAR(Julia3Dz)
- ADDPREPOSTREGVAR(LinearT)
- ADDPREPOSTREGVAR(LinearT3D)
- ADDPREPOSTREGVAR(Ovoid)
- ADDPREPOSTREGVAR(Ovoid3D)
- ADDPREPOSTREGVAR(Spirograph)
- ADDPREPOSTREGVAR(Petal)
- ADDPREPOSTREGVAR(RoundSpher)
- ADDPREPOSTREGVAR(RoundSpher3D)
- ADDPREPOSTREGVAR(SpiralWing)
- ADDPREPOSTREGVAR(Squarize)
- ADDPREPOSTREGVAR(Sschecks)
- ADDPREPOSTREGVAR(PhoenixJulia)
- ADDPREPOSTREGVAR(Mobius)
- ADDPREPOSTREGVAR(MobiusN)
- ADDPREPOSTREGVAR(MobiusStrip)
- ADDPREPOSTREGVAR(Lissajous)
- ADDPREPOSTREGVAR(Svf)
- ADDPREPOSTREGVAR(Target)
- ADDPREPOSTREGVAR(Taurus)
- ADDPREPOSTREGVAR(Collideoscope)
- ADDPREPOSTREGVAR(BMod)
- ADDPREPOSTREGVAR(BSwirl)
- ADDPREPOSTREGVAR(BTransform)
- ADDPREPOSTREGVAR(BCollide)
- ADDPREPOSTREGVAR(Eclipse)
- ADDPREPOSTREGVAR(FlipCircle)
- ADDPREPOSTREGVAR(FlipY)
- ADDPREPOSTREGVAR(ECollide)
- ADDPREPOSTREGVAR(EJulia)
- ADDPREPOSTREGVAR(EMod)
- ADDPREPOSTREGVAR(EMotion)
- ADDPREPOSTREGVAR(EPush)
- ADDPREPOSTREGVAR(ERotate)
- ADDPREPOSTREGVAR(EScale)
- ADDPREPOSTREGVAR(ESwirl)
- ADDPREPOSTREGVAR(LazyTravis)
- ADDPREPOSTREGVAR(Squish)
- ADDPREPOSTREGVAR(Circus)
- ADDPREPOSTREGVAR(Tancos)
- ADDPREPOSTREGVAR(Rippled)
- ADDPREPOSTREGVAR(RotateX)
- ADDPREPOSTREGVAR(RotateY)
- ADDPREPOSTREGVAR(RotateZ)
- ADDPREPOSTREGVAR(Flatten)
- ADDPREPOSTREGVAR(Zblur)
- ADDPREPOSTREGVAR(Blur3D)
- ADDPREPOSTREGVAR(ZScale)
- ADDPREPOSTREGVAR(ZTranslate)
- ADDPREPOSTREGVAR(ZCone)
- ADDPREPOSTREGVAR(MirrorX)
- ADDPREPOSTREGVAR(MirrorY)
- ADDPREPOSTREGVAR(MirrorZ)
- ADDPREPOSTREGVAR(Depth)
- ADDPREPOSTREGVAR(Spherical3D)
- ADDPREPOSTREGVAR(RBlur)
- ADDPREPOSTREGVAR(JuliaNab)
- ADDPREPOSTREGVAR(Sintrange)
- ADDPREPOSTREGVAR(Voron)
- ADDPREPOSTREGVAR(Waffle)
- ADDPREPOSTREGVAR(Square3D)
- ADDPREPOSTREGVAR(SuperShape3D)
- ADDPREPOSTREGVAR(Sphyp3D)
- ADDPREPOSTREGVAR(Circlecrop)
- ADDPREPOSTREGVAR(Julian3Dx)
- ADDPREPOSTREGVAR(Fourth)
- ADDPREPOSTREGVAR(Mobiq)
- ADDPREPOSTREGVAR(Spherivoid)
- ADDPREPOSTREGVAR(Farblur)
- ADDPREPOSTREGVAR(CurlSP)
- ADDPREPOSTREGVAR(Heat)
- ADDPREPOSTREGVAR(Interference2)
- ADDPREPOSTREGVAR(Sinq)
- ADDPREPOSTREGVAR(Sinhq)
- ADDPREPOSTREGVAR(Secq)
- ADDPREPOSTREGVAR(Sechq)
- ADDPREPOSTREGVAR(Tanq)
- ADDPREPOSTREGVAR(Tanhq)
- ADDPREPOSTREGVAR(Cosq)
- ADDPREPOSTREGVAR(Coshq)
- ADDPREPOSTREGVAR(Cotq)
- ADDPREPOSTREGVAR(Cothq)
- ADDPREPOSTREGVAR(Cscq)
- ADDPREPOSTREGVAR(Cschq)
- ADDPREPOSTREGVAR(Estiq)
- ADDPREPOSTREGVAR(Loq)
- ADDPREPOSTREGVAR(Curvature)
- ADDPREPOSTREGVAR(Qode)
- ADDPREPOSTREGVAR(BlurHeart)
- ADDPREPOSTREGVAR(Truchet)
- ADDPREPOSTREGVAR(Gdoffs)
- ADDPREPOSTREGVAR(Octagon)
- ADDPREPOSTREGVAR(Trade)
- ADDPREPOSTREGVAR(Juliac)
- ADDPREPOSTREGVAR(Blade3D)
- ADDPREPOSTREGVAR(Blob3D)
- ADDPREPOSTREGVAR(Blocky)
- ADDPREPOSTREGVAR(Bubble2)
- ADDPREPOSTREGVAR(CircleLinear)
- ADDPREPOSTREGVAR(CircleRand)
- ADDPREPOSTREGVAR(CircleTrans1)
- ADDPREPOSTREGVAR(Cubic3D)
- ADDPREPOSTREGVAR(CubicLattice3D)
- ADDPREPOSTREGVAR(Foci3D)
- ADDPREPOSTREGVAR(Ho)
- ADDPREPOSTREGVAR(Julia3Dq)
- ADDPREPOSTREGVAR(Line)
- ADDPREPOSTREGVAR(Loonie2)
- ADDPREPOSTREGVAR(Loonie3)
- ADDPREPOSTREGVAR(Loonie3D)
- ADDPREPOSTREGVAR(Mcarpet)
- ADDPREPOSTREGVAR(Waves23D)
- ADDPREPOSTREGVAR(Pie3D)
- ADDPREPOSTREGVAR(Popcorn23D)
- ADDPREPOSTREGVAR(Sinusoidal3D)
- ADDPREPOSTREGVAR(Scry3D)
- ADDPREPOSTREGVAR(Shredlin)
- ADDPREPOSTREGVAR(SplitBrdr)
- ADDPREPOSTREGVAR(Wdisc)
- ADDPREPOSTREGVAR(Falloff)
- ADDPREPOSTREGVAR(Falloff2)
- ADDPREPOSTREGVAR(Falloff3)
- ADDPREPOSTREGVAR(Xtrb)
- ADDPREPOSTREGVAR(Hexaplay3D)
- ADDPREPOSTREGVAR(Hexnix3D)
- ADDPREPOSTREGVAR(Hexcrop)
- ADDPREPOSTREGVAR(Hexes)
- ADDPREPOSTREGVAR(Nblur)
- ADDPREPOSTREGVAR(Octapol)
- ADDPREPOSTREGVAR(Crob)
- ADDPREPOSTREGVAR(BubbleT3D)
- ADDPREPOSTREGVAR(Synth)
- ADDPREPOSTREGVAR(Crackle)
- m_Variations.push_back(new PostSmartcropVariation());//Post only
- ADDPREPOSTREGVAR(Xerf)
- ADDPREPOSTREGVAR(Erf)
- ADDPREPOSTREGVAR(W)
- ADDPREPOSTREGVAR(X)
- ADDPREPOSTREGVAR(Y)
- ADDPREPOSTREGVAR(Z)
- ADDPREPOSTREGVAR(Splits3D)
- ADDPREPOSTREGVAR(Waves2B)
- ADDPREPOSTREGVAR(JacCn)
- ADDPREPOSTREGVAR(JacDn)
- ADDPREPOSTREGVAR(JacSn)
- ADDPREPOSTREGVAR(PressureWave)
- ADDPREPOSTREGVAR(Gamma)
- ADDPREPOSTREGVAR(PRose3D)
- ADDPREPOSTREGVAR(LogDB)
- //ADDPREPOSTREGVAR(LinearXZ)
- //ADDPREPOSTREGVAR(LinearYZ)
- //DC are special.
- ADDPREPOSTREGVAR(DCBubble)
- ADDPREPOSTREGVAR(DCCarpet)
- ADDPREPOSTREGVAR(DCCube)
- ADDPREPOSTREGVAR(DCCylinder)
- ADDPREPOSTREGVAR(DCGridOut)
- ADDPREPOSTREGVAR(DCLinear)
- ADDPREPOSTREGVAR(DCPerlin)
- ADDPREPOSTREGVAR(DCTriangle)
- ADDPREPOSTREGVAR(DCZTransl)
+ static VariationList& Instance();
+ ~VariationList();
+ VariationList(const VariationList& varList) = delete;
+ VariationList& operator = (const VariationList& varList) = delete;
+ const Variation* GetVariation(size_t index) const;
+ const Variation* GetVariation(size_t index, eVariationType varType) const;
+ Variation* GetVariationCopy(size_t index, T weight = 1) const;
+ Variation* GetVariationCopy(size_t index, eVariationType varType, T weight = 1) const;
+ const Variation* GetVariation(eVariationId id) const;
+ Variation* GetVariationCopy(eVariationId id, T weight = 1) const;
+ const Variation* GetVariation(const string& name) const;
+ Variation* GetVariationCopy(const string& name, T weight = 1) const;
+ const ParametricVariation* GetParametricVariation(size_t index) const;
+ const ParametricVariation* GetParametricVariation(const string& name) const;
+ ParametricVariation* GetParametricVariationCopy(eVariationId id, T weight = 1) const;
+ int GetVariationIndex(const string& name) const;
+ size_t Size() const;
+ size_t RegSize() const;
+ size_t PreSize() const;
+ size_t PostSize() const;
+ size_t ParametricSize() const;
- for (auto var : m_Variations) var->Precalc();
-
- std::sort(m_Variations.begin(), m_Variations.end(), [&](const Variation* var1, const Variation* var2) { return var1->VariationId() < var2->VariationId(); });
- m_RegVariations.reserve(m_Variations.size() / 3);
- m_PreVariations.reserve(m_Variations.size() / 3);
- m_PostVariations.reserve(m_Variations.size() / 3);
- m_ParametricVariations.reserve(size_t(m_Variations.size() * .90));//This is a rough guess at how many are parametric.
-
- //Place pointers to variations in vectors specific to their type.
- //Many of the elements in m_ParametricVariations will be present in the reg, pre and post vectors.
- //Note that these are not new copies, rather just pointers to the original instances in m_Variations.
- for (auto var : m_Variations)
- {
- if (var->VarType() == eVariationType::VARTYPE_REG)
- m_RegVariations.push_back(var);
- else if (var->VarType() == eVariationType::VARTYPE_PRE)
- m_PreVariations.push_back(var);
- else if (var->VarType() == eVariationType::VARTYPE_POST)
- m_PostVariations.push_back(var);
-
- if (auto parVar = dynamic_cast*>(var))
- m_ParametricVariations.push_back(parVar);
- }
- }
-
- ///
- /// Delete each element of the list.
- ///
- ~VariationList()
- {
- ClearVec(m_Variations);//No need to delete parametric because they point to the entries in original vector.
- }
-
- ///
- /// Get a pointer to the variation at the specified index.
- ///
- /// The index in the list to retrieve
- /// A pointer to the variation at the index if in range, else nullptr.
- const Variation* GetVariation(size_t index) const { return index < m_Variations.size() ? m_Variations[index] : nullptr; }
-
- ///
- /// Get a pointer to the variation of a specified type at the specified index.
- ///
- /// The index in the list to retrieve
- /// The type of variation to retrieve
- /// A pointer to the variation of the specified type at the index if in range, else nullptr.
- const Variation* GetVariation(size_t index, eVariationType varType) const
- {
- switch (varType)
- {
- case eVariationType::VARTYPE_REG:
- return index < m_RegVariations.size() ? m_RegVariations[index] : nullptr;
- break;
-
- case eVariationType::VARTYPE_PRE:
- return index < m_PreVariations.size() ? m_PreVariations[index] : nullptr;
- break;
-
- case eVariationType::VARTYPE_POST:
- return index < m_PostVariations.size() ? m_PostVariations[index] : nullptr;
- break;
-
- default:
- return nullptr;
- break;
- }
- }
-
- ///
- /// Gets a pointer to a copy of the variation at the specified index.
- /// Optionally specify a weight to assign the new copy.
- ///
- /// The index in the list to make a copy of
- /// The weight to assign the new copy. Default: 1
- /// A pointer to the variation at the index if in range, else nullptr.
- Variation* GetVariationCopy(size_t index, T weight = 1) const { return MakeCopyWithWeight(GetVariation(index), weight); }
- Variation* GetVariationCopy(size_t index, eVariationType varType, T weight = 1) const { return MakeCopyWithWeight(GetVariation(index, varType), weight); }
-
- ///
- /// Get a pointer to the variation with the specified ID.
- ///
- /// The ID to search for
- /// A pointer to the variation if found, else nullptr.
- const Variation* GetVariation(eVariationId id) const
- {
- for (auto var : m_Variations)
- if (var && id == var->VariationId())
- return var;
-
- return nullptr;
- }
-
- ///
- /// Gets a pointer to a copy of the variation with the specified ID.
- /// Optionally specify a weight to assign the new copy.
- ///
- /// The id of the variation in the list to make a copy of
- /// The weight to assign the new copy. Default: 1
- /// A pointer to the variation with a matching ID, else nullptr.
- Variation* GetVariationCopy(eVariationId id, T weight = 1) const { return MakeCopyWithWeight(GetVariation(id), weight); }
-
- ///
- /// Get a pointer to the variation with the specified name.
- ///
- /// The name to search for
- /// A pointer to the variation if found, else nullptr.
- const Variation* GetVariation(const string& name) const
- {
- for (auto var : m_Variations)
- if (var && !_stricmp(name.c_str(), var->Name().c_str()))
- return var;
-
- return nullptr;
- }
-
- ///
- /// Gets a pointer to a copy of the variation with the specified name.
- /// Optionally specify a weight to assign the new copy.
- ///
- /// The name of the variation in the list to make a copy of
- /// The weight to assign the new copy. Default: 1
- /// A pointer to the variation with a matching name, else nullptr.
- Variation* GetVariationCopy(const string& name, T weight = 1) const { return MakeCopyWithWeight(GetVariation(name), weight); }
-
- ///
- /// Get a parametric variation at the specified index.
- /// Note this is the index in the parametric variations list, not in the master list.
- ///
- /// The index in the parametric variations list to retrieve
- /// The parametric variation at the index specified if in range, else nullptr.
- const ParametricVariation* GetParametricVariation(size_t index) const { return index < m_ParametricVariations.size() ? m_ParametricVariations[index] : nullptr; }
-
- ///
- /// Get a parametric variation with the specified name.
- ///
- /// The name of the variation in the parametric variations list to retrieve
- /// The parametric variation with a matching name, else nullptr.
- const ParametricVariation* GetParametricVariation(const string& name) const
- {
- for (auto var : m_ParametricVariations)
- if (var && !_stricmp(name.c_str(), var->Name().c_str()))
- return var;
-
- return nullptr;
- }
-
- ///
- /// Get the index of the variation with the specified name.
- ///
- /// The name of the variation whose index is returned
- /// The index of the variation with the matching name, else -1
- int GetVariationIndex(const string& name)
- {
- for (size_t i = 0; i < m_Variations.size() && m_Variations[i]; i++)
- if (!_stricmp(name.c_str(), m_Variations[i]->Name().c_str()))
- return int(i);
-
- return -1;
- }
-
- ///
- /// Accessors.
- ///
- size_t Size() const { return m_Variations.size(); }
- size_t RegSize() const { return m_RegVariations.size(); }
- size_t PreSize() const { return m_PreVariations.size(); }
- size_t PostSize() const { return m_PostVariations.size(); }
- size_t ParametricSize() const { return m_ParametricVariations.size(); }
-
- const vector*>& AllVars() const { return m_Variations; }
- const vector*>& RegVars() const { return m_RegVariations; }
- const vector*>& PreVars() const { return m_PreVariations; }
- const vector*>& PostVars() const { return m_PostVariations; }
+ const vector*>& AllVars() const;
+ const vector*>& RegVars() const;
+ const vector*>& PreVars() const;
+ const vector*>& PostVars() const;
private:
- ///
- /// Make a dyncamically allocated copy of a variation and assign it a specified weight.
- /// Return a pointer to the new copy.
- ///
- /// The variation to copy
- /// The weight to assign it
- /// A pointer to the new variation copy if success, else nullptr.
- Variation* MakeCopyWithWeight(const Variation* var, T weight) const
- {
- if (var)
- {
- auto var2 = var->Copy();
- var2->m_Weight = weight;
- return var2;
- }
-
- return nullptr;
- }
-
- ///
- /// Assignment operator which does nothing since these are non-copyable.
- /// Do not provide a copy constructor and ensure the assignment operator does nothing.
- ///
- /// The VariationList object which won't be copied
- /// Reference to unchanged self
- VariationList& operator = (const VariationList& varList)
- {
- return *this;
- }
+ VariationList();
+ Variation* MakeCopyWithWeight(const Variation* var, T weight) const;
vector*> m_Variations;//A list of pointers to dynamically allocated variation objects.
vector*> m_RegVariations;
diff --git a/Source/Ember/Variations01.h b/Source/Ember/Variations01.h
index 5447a4a..b1de7d7 100644
--- a/Source/Ember/Variations01.h
+++ b/Source/Ember/Variations01.h
@@ -1,9 +1,12 @@
#pragma once
#include "Variation.h"
+#include "Xform.h"
namespace EmberNs
{
+//template class Xform;
+
///
/// Linear:
/// nx = tx;
@@ -12,7 +15,7 @@ namespace EmberNs
/// p[1] += weight * ny;
///
template
-class EMBER_API LinearVariation : public Variation
+class LinearVariation : public Variation
{
public:
LinearVariation(T weight = 1.0) : Variation("linear", eVariationId::VAR_LINEAR, weight) { }
@@ -47,7 +50,7 @@ public:
/// p[1] += weight * ny;
///
template
-class EMBER_API SinusoidalVariation : public Variation
+class SinusoidalVariation : public Variation
{
public:
SinusoidalVariation(T weight = 1.0) : Variation("sinusoidal", eVariationId::VAR_SINUSOIDAL, weight) { }
@@ -83,7 +86,7 @@ public:
/// p[1] += weight * ny;
///
template
-class EMBER_API SphericalVariation : public Variation
+class SphericalVariation : public Variation
{
public:
SphericalVariation(T weight = 1.0) : Variation("spherical", eVariationId::VAR_SPHERICAL, weight, true) { }
@@ -129,7 +132,7 @@ public:
/// p[1] += weight * ny;
///
template
-class EMBER_API SwirlVariation : public Variation
+class SwirlVariation : public Variation
{
public:
SwirlVariation(T weight = 1.0) : Variation("swirl", eVariationId::VAR_SWIRL, weight, true) { }
@@ -172,7 +175,7 @@ public:
/// p[1] += weight * ny;
///
template
-class EMBER_API HorseshoeVariation : public Variation
+class HorseshoeVariation : public Variation
{
public:
HorseshoeVariation(T weight = 1.0) : Variation("horseshoe", eVariationId::VAR_HORSESHOE, weight, true, true) { }
@@ -215,7 +218,7 @@ public:
/// p[1] += weight * ny;
///
template
-class EMBER_API PolarVariation : public Variation
+class PolarVariation : public Variation
{
public:
PolarVariation(T weight = 1.0) : Variation("polar", eVariationId::VAR_POLAR, weight, true, true, false, true, false) { }
@@ -250,7 +253,7 @@ public:
/// p[1] += weight * cos(a - r) * r;
///
template
-class EMBER_API HandkerchiefVariation : public Variation
+class HandkerchiefVariation : public Variation
{
public:
HandkerchiefVariation(T weight = 1.0) : Variation("handkerchief", eVariationId::VAR_HANDKERCHIEF, weight, true, true, false, true) { }
@@ -286,7 +289,7 @@ public:
/// p[1] += weight * cos(a) * -r;
///
template
-class EMBER_API HeartVariation : public Variation
+class HeartVariation : public Variation
{
public:
HeartVariation(T weight = 1.0) : Variation("heart", eVariationId::VAR_HEART, weight, true, true, false, true) { }
@@ -328,7 +331,7 @@ public:
/// p[1] += weight * cos(r) * a / M_PI;
///
template
-class EMBER_API DiscVariation : public ParametricVariation
+class DiscVariation : public ParametricVariation
{
public:
DiscVariation(T weight = 1.0) : ParametricVariation("disc", eVariationId::VAR_DISC, weight, true, true, false, true)
@@ -390,7 +393,7 @@ private:
/// p[1] += weight * (sin(a) - cos(r)) / r;
///
template
-class EMBER_API SpiralVariation : public Variation
+class SpiralVariation : public Variation
{
public:
SpiralVariation(T weight = 1.0) : Variation("spiral", eVariationId::VAR_SPIRAL, weight, true, true, true) { }
@@ -435,7 +438,7 @@ public:
/// p[1] += weight * cos(a) * r;
///
template
-class EMBER_API HyperbolicVariation : public Variation
+class HyperbolicVariation : public Variation
{
public:
HyperbolicVariation(T weight = 1.0) : Variation("hyperbolic", eVariationId::VAR_HYPERBOLIC, weight, true, true, true) { }
@@ -478,7 +481,7 @@ public:
/// p[1] += weight * cos(a) * sin(r);
///
template
-class EMBER_API DiamondVariation : public Variation
+class DiamondVariation : public Variation
{
public:
DiamondVariation(T weight = 1.0) : Variation("diamond", eVariationId::VAR_DIAMOND, weight, true, true, true) { }
@@ -517,7 +520,7 @@ public:
/// p[1] += weight * (m0 - m1);
///
template
-class EMBER_API ExVariation : public Variation
+class ExVariation : public Variation
{
public:
ExVariation(T weight = 1.0) : Variation("ex", eVariationId::VAR_EX, weight, true, true, false, true) { }
@@ -568,7 +571,7 @@ public:
/// p[1] += v * ny;
///
template
-class EMBER_API JuliaVariation : public Variation
+class JuliaVariation : public Variation
{
public:
JuliaVariation(T weight = 1.0) : Variation("julia", eVariationId::VAR_JULIA, weight, true, true, false, true) { }
@@ -617,7 +620,7 @@ public:
/// p[1] += weight * ny;
///
template
-class EMBER_API BentVariation : public Variation
+class BentVariation : public Variation
{
public:
BentVariation(T weight = 1.0) : Variation("bent", eVariationId::VAR_BENT, weight) { }
@@ -660,7 +663,7 @@ public:
/// Special case here, use parametric for precalcs, but no regular params.
///
template
-class EMBER_API WavesVariation : public ParametricVariation
+class WavesVariation : public ParametricVariation
{
public:
WavesVariation(T weight = 1.0) : ParametricVariation("waves", eVariationId::VAR_WAVES, weight)
@@ -738,7 +741,7 @@ private:
/// p[1] += weight * ny;
///
template
-class EMBER_API FisheyeVariation : public Variation
+class FisheyeVariation : public Variation
{
public:
FisheyeVariation(T weight = 1.0) : Variation("fisheye", eVariationId::VAR_FISHEYE, weight, true, true) { }
@@ -778,7 +781,7 @@ public:
/// p[1] += weight * ny;
///
template
-class EMBER_API PopcornVariation : public Variation
+class PopcornVariation : public Variation
{
public:
PopcornVariation(T weight = 1.0) : Variation("popcorn", eVariationId::VAR_POPCORN, weight) { }
@@ -824,7 +827,7 @@ public:
/// p[1] += weight * ny;
///
template
-class EMBER_API ExponentialVariation : public Variation
+class ExponentialVariation : public Variation
{
public:
ExponentialVariation(T weight = 1.0) : Variation("exponential", eVariationId::VAR_EXPONENTIAL, weight) { }
@@ -868,7 +871,7 @@ public:
/// p[1] += weight * ny;
///
template
-class EMBER_API PowerVariation : public Variation
+class PowerVariation : public Variation
{
public:
PowerVariation(T weight = 1.0) : Variation("power", eVariationId::VAR_POWER, weight, true, true, true) { }
@@ -906,7 +909,7 @@ public:
/// p[1] += weight * ny;
///
template
-class EMBER_API CosineVariation : public Variation
+class CosineVariation : public Variation
{
public:
CosineVariation(T weight = 1.0) : Variation("cosine", eVariationId::VAR_COSINE, weight) { }
@@ -953,7 +956,7 @@ public:
/// p[1] += weight * ny;
///
template
-class EMBER_API RingsVariation : public Variation
+class RingsVariation : public Variation
{
public:
RingsVariation(T weight = 1.0) : Variation("rings", eVariationId::VAR_RINGS, weight, true, true, true) { }
@@ -1007,7 +1010,7 @@ public:
/// p[1] += weight * ny;
///
template
-class EMBER_API FanVariation : public Variation
+class FanVariation : public Variation
{
public:
FanVariation(T weight = 1.0) : Variation("fan", eVariationId::VAR_FAN, weight, true, true, false, true) { }
@@ -1063,7 +1066,7 @@ public:
/// p[1] += weight * ny;
///
template
-class EMBER_API BlobVariation : public ParametricVariation
+class BlobVariation : public ParametricVariation
{
public:
BlobVariation(T weight = 1.0) : ParametricVariation("blob", eVariationId::VAR_BLOB, weight, true, true, true, true)
@@ -1142,7 +1145,7 @@ private:
/// p[1] += weight * (nx2 - ny2);
///
template
-class EMBER_API PdjVariation : public ParametricVariation
+class PdjVariation : public ParametricVariation
{
public:
PdjVariation(T weight = 1.0) : ParametricVariation("pdj", eVariationId::VAR_PDJ, weight)
@@ -1235,7 +1238,7 @@ private:
/// p[1] += weight * ny;
///
template
-class EMBER_API Fan2Variation : public ParametricVariation
+class Fan2Variation : public ParametricVariation
{
public:
Fan2Variation(T weight = 1.0) : ParametricVariation("fan2", eVariationId::VAR_FAN2, weight, true, true, false, true)
@@ -1329,7 +1332,7 @@ private:
/// p[1] += weight * ny;
///
template
-class EMBER_API Rings2Variation : public ParametricVariation
+class Rings2Variation : public ParametricVariation
{
public:
Rings2Variation(T weight = 1.0) : ParametricVariation("rings2", eVariationId::VAR_RINGS2, weight, true, true, true)
@@ -1398,7 +1401,7 @@ private:
/// p[1] += r * ty;
///
template
-class EMBER_API EyefishVariation : public Variation
+class EyefishVariation : public Variation
{
public:
EyefishVariation(T weight = 1.0) : Variation("eyefish", eVariationId::VAR_EYEFISH, weight, true, true) { }
@@ -1432,7 +1435,7 @@ public:
/// Bubble.
///
template
-class EMBER_API BubbleVariation : public Variation
+class BubbleVariation : public Variation
{
public:
BubbleVariation(T weight = 1.0) : Variation("bubble", eVariationId::VAR_BUBBLE, weight, true) { }
@@ -1473,7 +1476,7 @@ public:
/// Cylinder.
///
template
-class EMBER_API CylinderVariation : public Variation
+class CylinderVariation : public Variation
{
public:
CylinderVariation(T weight = 1.0) : Variation("cylinder", eVariationId::VAR_CYLINDER, weight) { }
@@ -1504,7 +1507,7 @@ public:
/// Perspective.
///
template
-class EMBER_API PerspectiveVariation : public ParametricVariation
+class PerspectiveVariation : public ParametricVariation
{
public:
PerspectiveVariation(T weight = 1.0) : ParametricVariation("perspective", eVariationId::VAR_PERSPECTIVE, weight)
@@ -1584,7 +1587,7 @@ private:
/// Noise.
///
template
-class EMBER_API NoiseVariation : public Variation
+class NoiseVariation : public Variation
{
public:
NoiseVariation(T weight = 1.0) : Variation("noise", eVariationId::VAR_NOISE, weight) { }
@@ -1620,7 +1623,7 @@ public:
/// JuliaN.
///
template
-class EMBER_API JuliaNGenericVariation : public ParametricVariation
+class JuliaNGenericVariation : public ParametricVariation
{
public:
JuliaNGenericVariation(T weight = 1.0) : ParametricVariation("julian", eVariationId::VAR_JULIAN, weight, true, false, false, false, true)
@@ -1696,7 +1699,7 @@ private:
/// JuliaScope.
///
template
-class EMBER_API JuliaScopeVariation : public ParametricVariation
+class JuliaScopeVariation : public ParametricVariation
{
public:
JuliaScopeVariation(T weight = 1.0) : ParametricVariation("juliascope", eVariationId::VAR_JULIASCOPE, weight, true, false, false, false, true)
@@ -1810,7 +1813,7 @@ private:
/// If the original pre_blur functionality is needed, use pre_gaussian_blur.
///
template
-class EMBER_API BlurVariation : public Variation
+class BlurVariation : public Variation
{
public:
BlurVariation(T weight = 1.0) : Variation("blur", eVariationId::VAR_BLUR, weight) { }
@@ -1846,7 +1849,7 @@ public:
/// Gaussian blur.
///
template
-class EMBER_API GaussianBlurVariation : public Variation
+class GaussianBlurVariation : public Variation
{
public:
GaussianBlurVariation(T weight = 1.0) : Variation("gaussian_blur", eVariationId::VAR_GAUSSIAN_BLUR, weight) { }
@@ -1882,7 +1885,7 @@ public:
/// Radial blur.
///
template
-class EMBER_API RadialBlurVariation : public ParametricVariation
+class RadialBlurVariation : public ParametricVariation
{
public:
RadialBlurVariation(T weight = 1.0) : ParametricVariation("radial_blur", eVariationId::VAR_RADIAL_BLUR, weight, true, true, false, false, true)
@@ -1958,7 +1961,7 @@ private:
/// Pie.
///
template
-class EMBER_API PieVariation : public ParametricVariation
+class PieVariation : public ParametricVariation
{
public:
PieVariation(T weight = 1.0) : ParametricVariation("pie", eVariationId::VAR_PIE, weight)
@@ -2034,7 +2037,7 @@ private:
/// Ngon.
///
template
-class EMBER_API NgonVariation : public ParametricVariation
+class NgonVariation : public ParametricVariation
{
public:
NgonVariation(T weight = 1.0) : ParametricVariation("ngon", eVariationId::VAR_NGON, weight, true, false, false, false, true)
@@ -2145,7 +2148,7 @@ private:
/// curl code.
///
template
-class EMBER_API CurlVariation : public ParametricVariation
+class CurlVariation : public ParametricVariation
{
public:
CurlVariation(T weight = 1.0) : ParametricVariation("curl", eVariationId::VAR_CURL, weight)
@@ -2222,7 +2225,7 @@ private:
/// Rectangles.
///
template
-class EMBER_API RectanglesVariation : public ParametricVariation
+class RectanglesVariation : public ParametricVariation
{
public:
RectanglesVariation(T weight = 1.0) : ParametricVariation("rectangles", eVariationId::VAR_RECTANGLES, weight)
@@ -2295,7 +2298,7 @@ private:
/// Arch.
///
template
-class EMBER_API ArchVariation : public Variation
+class ArchVariation : public Variation
{
public:
ArchVariation(T weight = 1.0) : Variation("arch", eVariationId::VAR_ARCH, weight) { }
@@ -2333,7 +2336,7 @@ public:
/// Tangent.
///
template
-class EMBER_API TangentVariation : public Variation
+class TangentVariation : public Variation
{
public:
TangentVariation(T weight = 1.0) : Variation("tangent", eVariationId::VAR_TANGENT, weight) { }
@@ -2364,7 +2367,7 @@ public:
/// Square.
///
template
-class EMBER_API SquareVariation : public Variation
+class SquareVariation : public Variation
{
public:
SquareVariation(T weight = 1.0) : Variation("square", eVariationId::VAR_SQUARE, weight) { }
@@ -2395,7 +2398,7 @@ public:
/// Rays.
///
template
-class EMBER_API RaysVariation : public Variation
+class RaysVariation : public Variation
{
public:
RaysVariation(T weight = 1.0) : Variation("rays", eVariationId::VAR_RAYS, weight, true) { }
@@ -2438,7 +2441,7 @@ public:
/// Blade.
///
template
-class EMBER_API BladeVariation : public Variation
+class BladeVariation : public Variation
{
public:
BladeVariation(T weight = 1.0) : Variation("blade", eVariationId::VAR_BLADE, weight, true, true) { }
@@ -2476,7 +2479,7 @@ public:
/// Secant2.
///
template
-class EMBER_API Secant2Variation : public Variation
+class Secant2Variation : public Variation
{
public:
Secant2Variation(T weight = 1.0) : Variation("secant2", eVariationId::VAR_SECANT2, weight, true, true) { }
@@ -2524,7 +2527,7 @@ public:
/// TwinTrian.
///
template
-class EMBER_API TwinTrianVariation : public Variation
+class TwinTrianVariation : public Variation
{
public:
TwinTrianVariation(T weight = 1.0) : Variation("TwinTrian", eVariationId::VAR_TWINTRIAN, weight, true, true) { }
@@ -2571,7 +2574,7 @@ public:
/// Cross.
///
template
-class EMBER_API CrossVariation : public Variation
+class CrossVariation : public Variation
{
public:
CrossVariation(T weight = 1.0) : Variation("cross", eVariationId::VAR_CROSS, weight) { }
@@ -2610,7 +2613,7 @@ public:
/// Disc2.
///
template
-class EMBER_API Disc2Variation : public ParametricVariation
+class Disc2Variation : public ParametricVariation
{
public:
Disc2Variation(T weight = 1.0) : ParametricVariation("disc2", eVariationId::VAR_DISC2, weight, false, false, false, true)
@@ -2707,7 +2710,7 @@ private:
/// SuperShape.
///
template
-class EMBER_API SuperShapeVariation : public ParametricVariation
+class SuperShapeVariation : public ParametricVariation
{
public:
SuperShapeVariation(T weight = 1.0) : ParametricVariation("super_shape", eVariationId::VAR_SUPER_SHAPE, weight, true, true, false, false, true)
@@ -2806,7 +2809,7 @@ private:
/// Flower.
///
template
-class EMBER_API FlowerVariation : public ParametricVariation
+class FlowerVariation : public ParametricVariation
{
public:
FlowerVariation(T weight = 1.0) : ParametricVariation("flower", eVariationId::VAR_FLOWER, weight, true, true, false, false, true)
@@ -2868,7 +2871,7 @@ private:
/// Conic.
///
template
-class EMBER_API ConicVariation : public ParametricVariation
+class ConicVariation : public ParametricVariation
{
public:
ConicVariation(T weight = 1.0) : ParametricVariation("conic", eVariationId::VAR_CONIC, weight, true, true)
@@ -2931,7 +2934,7 @@ private:
/// Parabola.
///
template
-class EMBER_API ParabolaVariation : public ParametricVariation
+class ParabolaVariation : public ParametricVariation
{
public:
ParabolaVariation(T weight = 1.0) : ParametricVariation("parabola", eVariationId::VAR_PARABOLA, weight, true, true)
@@ -2993,7 +2996,7 @@ private:
/// Bent2.
///
template
-class EMBER_API Bent2Variation : public ParametricVariation
+class Bent2Variation : public ParametricVariation
{
public:
Bent2Variation(T weight = 1.0) : ParametricVariation("bent2", eVariationId::VAR_BENT2, weight)
@@ -3078,7 +3081,7 @@ private:
/// Bipolar.
///
template
-class EMBER_API BipolarVariation : public ParametricVariation
+class BipolarVariation : public ParametricVariation
{
public:
BipolarVariation(T weight = 1.0) : ParametricVariation("bipolar", eVariationId::VAR_BIPOLAR, weight, true)
@@ -3228,7 +3231,7 @@ private:
/// Boarders.
///
template
-class EMBER_API BoardersVariation : public Variation
+class BoardersVariation : public Variation
{
public:
BoardersVariation(T weight = 1.0) : Variation("boarders", eVariationId::VAR_BOARDERS, weight) { }
@@ -3335,7 +3338,7 @@ public:
/// Butterfly.
///
template
-class EMBER_API ButterflyVariation : public Variation
+class ButterflyVariation : public Variation
{
public:
ButterflyVariation(T weight = 1.0) : Variation("butterfly", eVariationId::VAR_BUTTERFLY, weight) { }
@@ -3378,7 +3381,7 @@ public:
/// Cell.
///
template
-class EMBER_API CellVariation : public ParametricVariation
+class CellVariation : public ParametricVariation
{
public:
CellVariation(T weight = 1.0) : ParametricVariation("cell", eVariationId::VAR_CELL, weight)
@@ -3509,7 +3512,7 @@ private:
/// Cpow.
///
template
-class EMBER_API CpowVariation : public ParametricVariation
+class CpowVariation : public ParametricVariation
{
public:
CpowVariation(T weight = 1.0) : ParametricVariation("cpow", eVariationId::VAR_CPOW, weight, true, false, false, false, true)
@@ -3595,7 +3598,7 @@ private:
/// Curve.
///
template