--Code changes

-Convert all enums to class enum to be consistent with C++11 style.
 -Convert some if/else statements in filter classes to case statements.
 -Add overloaded stream operators to print various enums.
This commit is contained in:
mfeemster 2016-01-04 16:50:15 -08:00
parent c8e2355ec2
commit f5d0be5e5d
40 changed files with 1483 additions and 2041 deletions

View File

@ -17,7 +17,7 @@ namespace EmberNs
/// Bit position specifying the presence of each type of 3D parameter. /// Bit position specifying the presence of each type of 3D parameter.
/// One, none, some or all of these can be present. /// One, none, some or all of these can be present.
/// </summary> /// </summary>
enum class eProjBits : size_t enum class eProjBits : et
{ {
PROJBITS_ZPOS = 1, PROJBITS_ZPOS = 1,
PROJBITS_PERSP = 2, PROJBITS_PERSP = 2,
@ -493,16 +493,16 @@ public:
m_CamMat[1][2] = std::sin(m_CamPitch) * std::cos(-m_CamYaw); m_CamMat[1][2] = std::sin(m_CamPitch) * std::cos(-m_CamYaw);
m_CamMat[2][2] = std::cos(m_CamPitch); m_CamMat[2][2] = std::cos(m_CamPitch);
if (projBits & size_t(eProjBits::PROJBITS_BLUR)) if (projBits & et(eProjBits::PROJBITS_BLUR))
{ {
if (projBits & size_t(eProjBits::PROJBITS_YAW)) if (projBits & et(eProjBits::PROJBITS_YAW))
m_ProjFunc = &EmberNs::Ember<T>::ProjectPitchYawDepthBlur; m_ProjFunc = &EmberNs::Ember<T>::ProjectPitchYawDepthBlur;
else else
m_ProjFunc = &EmberNs::Ember<T>::ProjectPitchDepthBlur; m_ProjFunc = &EmberNs::Ember<T>::ProjectPitchDepthBlur;
} }
else if ((projBits & size_t(eProjBits::PROJBITS_PITCH)) || (projBits & size_t(eProjBits::PROJBITS_YAW))) else if ((projBits & et(eProjBits::PROJBITS_PITCH)) || (projBits & et(eProjBits::PROJBITS_YAW)))
{ {
if (projBits & size_t(eProjBits::PROJBITS_YAW)) if (projBits & et(eProjBits::PROJBITS_YAW))
m_ProjFunc = &EmberNs::Ember<T>::ProjectPitchYaw; m_ProjFunc = &EmberNs::Ember<T>::ProjectPitchYaw;
else else
m_ProjFunc = &EmberNs::Ember<T>::ProjectPitch; m_ProjFunc = &EmberNs::Ember<T>::ProjectPitch;
@ -677,9 +677,9 @@ public:
while (auto xform = GetTotalXform(xformIndex++)) while (auto xform = GetTotalXform(xformIndex++))
{ {
unflattened |= xform->DeleteVariationById(VAR_PRE_FLATTEN); unflattened |= xform->DeleteVariationById(eVariationId::VAR_PRE_FLATTEN);
unflattened |= xform->DeleteVariationById(VAR_FLATTEN); unflattened |= xform->DeleteVariationById(eVariationId::VAR_FLATTEN);
unflattened |= xform->DeleteVariationById(VAR_POST_FLATTEN); unflattened |= xform->DeleteVariationById(eVariationId::VAR_POST_FLATTEN);
} }
return unflattened; return unflattened;
@ -1136,15 +1136,15 @@ public:
{ {
size_t val = 0; size_t val = 0;
if (m_CamZPos != 0) val |= size_t(eProjBits::PROJBITS_ZPOS); if (m_CamZPos != 0) val |= et(eProjBits::PROJBITS_ZPOS);
if (m_CamPerspective != 0) val |= size_t(eProjBits::PROJBITS_PERSP); if (m_CamPerspective != 0) val |= et(eProjBits::PROJBITS_PERSP);
if (m_CamPitch != 0) val |= size_t(eProjBits::PROJBITS_PITCH); if (m_CamPitch != 0) val |= et(eProjBits::PROJBITS_PITCH);
if (m_CamYaw != 0) val |= size_t(eProjBits::PROJBITS_YAW); if (m_CamYaw != 0) val |= et(eProjBits::PROJBITS_YAW);
if (m_CamDepthBlur != 0) val |= size_t(eProjBits::PROJBITS_BLUR); if (m_CamDepthBlur != 0) val |= et(eProjBits::PROJBITS_BLUR);
return val; return val;
} }

View File

@ -74,6 +74,7 @@ namespace EmberNs
#define FLOAT_MIN_TAN -FLOAT_MAX_TAN #define FLOAT_MIN_TAN -FLOAT_MAX_TAN
#define EMPTYFIELD -9999 #define EMPTYFIELD -9999
typedef std::chrono::high_resolution_clock Clock; typedef std::chrono::high_resolution_clock Clock;
typedef uint et;
/// <summary> /// <summary>
/// Thin wrapper around getting the current time in milliseconds. /// Thin wrapper around getting the current time in milliseconds.
@ -119,17 +120,17 @@ static inline size_t NowMs()
#define m23T glm::detail::tmat2x3<T, glm::defaultp> #define m23T glm::detail::tmat2x3<T, glm::defaultp>
#endif #endif
enum class eInterp : uint { EMBER_INTERP_LINEAR = 0, EMBER_INTERP_SMOOTH = 1 }; enum class eInterp : et { EMBER_INTERP_LINEAR = 0, EMBER_INTERP_SMOOTH = 1 };
enum class eAffineInterp : uint { AFFINE_INTERP_LINEAR = 0, AFFINE_INTERP_LOG = 1, AFFINE_INTERP_COMPAT = 2, AFFINE_INTERP_OLDER = 3 }; enum class eAffineInterp : et { AFFINE_INTERP_LINEAR = 0, AFFINE_INTERP_LOG = 1, AFFINE_INTERP_COMPAT = 2, AFFINE_INTERP_OLDER = 3 };
enum class ePaletteMode : uint { PALETTE_STEP = 0, PALETTE_LINEAR = 1 }; enum class ePaletteMode : et { PALETTE_STEP = 0, PALETTE_LINEAR = 1 };
enum class ePaletteInterp : uint { INTERP_HSV = 0, INTERP_SWEEP = 1 }; enum class ePaletteInterp : et { INTERP_HSV = 0, INTERP_SWEEP = 1 };
enum class eMotion : uint { MOTION_SIN = 1, MOTION_TRIANGLE = 2, MOTION_HILL = 3, MOTION_SAW = 4 }; enum class eMotion : et { MOTION_SIN = 1, MOTION_TRIANGLE = 2, MOTION_HILL = 3, MOTION_SAW = 4 };
enum class eProcessAction : uint { NOTHING = 0, ACCUM_ONLY = 1, FILTER_AND_ACCUM = 2, KEEP_ITERATING = 3, FULL_RENDER = 4 }; enum class eProcessAction : et { NOTHING = 0, ACCUM_ONLY = 1, FILTER_AND_ACCUM = 2, KEEP_ITERATING = 3, FULL_RENDER = 4 };
enum class eProcessState : uint { NONE = 0, ITER_STARTED = 1, ITER_DONE = 2, FILTER_DONE = 3, ACCUM_DONE = 4 }; enum class eProcessState : et { NONE = 0, ITER_STARTED = 1, ITER_DONE = 2, FILTER_DONE = 3, ACCUM_DONE = 4 };
enum class eInteractiveFilter : uint { FILTER_LOG = 0, FILTER_DE = 1 }; enum class eInteractiveFilter : et { FILTER_LOG = 0, FILTER_DE = 1 };
enum class eScaleType : uint { SCALE_NONE = 0, SCALE_WIDTH = 1, SCALE_HEIGHT = 2 }; enum class eScaleType : et { SCALE_NONE = 0, SCALE_WIDTH = 1, SCALE_HEIGHT = 2 };
enum class eRenderStatus : uint { RENDER_OK = 0, RENDER_ERROR = 1, RENDER_ABORT = 2 }; enum class eRenderStatus : et { RENDER_OK = 0, RENDER_ERROR = 1, RENDER_ABORT = 2 };
enum class eEmberMotionParam : uint//These must remain in this order forever. enum class eEmberMotionParam : et//These must remain in this order forever.
{ {
FLAME_MOTION_NONE, FLAME_MOTION_NONE,
FLAME_MOTION_ZOOM, FLAME_MOTION_ZOOM,

View File

@ -53,6 +53,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <thread> #include <thread>
#include <time.h> #include <time.h>
#include <type_traits>
#include <vector> #include <vector>
#include <unordered_map> #include <unordered_map>

View File

@ -106,7 +106,7 @@ public:
{ {
size_t found = 0; size_t found = 0;
//Remove linear. //Remove linear.
destXform->DeleteVariationById(VAR_LINEAR); destXform->DeleteVariationById(eVariationId::VAR_LINEAR);
//Only do the next substitution for log interpolation. //Only do the next substitution for log interpolation.
if ((i == 0 && destEmbers[i].m_AffineInterp == eAffineInterp::AFFINE_INTERP_LOG) || if ((i == 0 && destEmbers[i].m_AffineInterp == eAffineInterp::AFFINE_INTERP_LOG) ||
@ -128,13 +128,13 @@ public:
//Interpolate these against a 180 degree rotated identity //Interpolate these against a 180 degree rotated identity
//with weight -1. //with weight -1.
//Added JULIAN/JULIASCOPE to get rid of black wedges. //Added JULIAN/JULIASCOPE to get rid of black wedges.
if (destOtherXform->GetVariationById(VAR_SPHERICAL) || if (destOtherXform->GetVariationById(eVariationId::VAR_SPHERICAL) ||
destOtherXform->GetVariationById(VAR_NGON) || destOtherXform->GetVariationById(eVariationId::VAR_NGON) ||
destOtherXform->GetVariationById(VAR_JULIAN) || destOtherXform->GetVariationById(eVariationId::VAR_JULIAN) ||
destOtherXform->GetVariationById(VAR_JULIASCOPE) || destOtherXform->GetVariationById(eVariationId::VAR_JULIASCOPE) ||
destOtherXform->GetVariationById(VAR_POLAR) || destOtherXform->GetVariationById(eVariationId::VAR_POLAR) ||
destOtherXform->GetVariationById(VAR_WEDGE_SPH) || destOtherXform->GetVariationById(eVariationId::VAR_WEDGE_SPH) ||
destOtherXform->GetVariationById(VAR_WEDGE_JULIA)) destOtherXform->GetVariationById(eVariationId::VAR_WEDGE_JULIA))
{ {
destXform->AddVariation(new LinearVariation<T>(-1)); destXform->AddVariation(new LinearVariation<T>(-1));
//Set the coefs appropriately. //Set the coefs appropriately.
@ -163,7 +163,7 @@ public:
destOtherXform = destEmbers[i + ii].GetTotalXform(xf); destOtherXform = destEmbers[i + ii].GetTotalXform(xf);
if (destOtherXform->GetVariationById(VAR_RECTANGLES)) if (destOtherXform->GetVariationById(eVariationId::VAR_RECTANGLES))
{ {
RectanglesVariation<T>* var = new RectanglesVariation<T>(); RectanglesVariation<T>* var = new RectanglesVariation<T>();
var->SetParamVal("rectangles_x", 0); var->SetParamVal("rectangles_x", 0);
@ -172,7 +172,7 @@ public:
found++; found++;
} }
if (destOtherXform->GetVariationById(VAR_RINGS2)) if (destOtherXform->GetVariationById(eVariationId::VAR_RINGS2))
{ {
Rings2Variation<T>* var = new Rings2Variation<T>(); Rings2Variation<T>* var = new Rings2Variation<T>();
var->SetParamVal("rings2_val", 0); var->SetParamVal("rings2_val", 0);
@ -180,14 +180,14 @@ public:
found++; found++;
} }
if (destOtherXform->GetVariationById(VAR_FAN2)) if (destOtherXform->GetVariationById(eVariationId::VAR_FAN2))
{ {
Fan2Variation<T>* var = new Fan2Variation<T>(); Fan2Variation<T>* var = new Fan2Variation<T>();
destXform->AddVariation(var); destXform->AddVariation(var);
found++; found++;
} }
if (destOtherXform->GetVariationById(VAR_BLOB)) if (destOtherXform->GetVariationById(eVariationId::VAR_BLOB))
{ {
BlobVariation<T>* var = new BlobVariation<T>(); BlobVariation<T>* var = new BlobVariation<T>();
var->SetParamVal("blob_low", 1); var->SetParamVal("blob_low", 1);
@ -195,14 +195,14 @@ public:
found++; found++;
} }
if (destOtherXform->GetVariationById(VAR_PERSPECTIVE)) if (destOtherXform->GetVariationById(eVariationId::VAR_PERSPECTIVE))
{ {
PerspectiveVariation<T>* var = new PerspectiveVariation<T>(); PerspectiveVariation<T>* var = new PerspectiveVariation<T>();
destXform->AddVariation(var); destXform->AddVariation(var);
found++; found++;
} }
if (destOtherXform->GetVariationById(VAR_CURL)) if (destOtherXform->GetVariationById(eVariationId::VAR_CURL))
{ {
CurlVariation<T>* var = new CurlVariation<T>(); CurlVariation<T>* var = new CurlVariation<T>();
var->SetParamVal("curl_c1", 0); var->SetParamVal("curl_c1", 0);
@ -210,7 +210,7 @@ public:
found++; found++;
} }
if (destOtherXform->GetVariationById(VAR_SUPER_SHAPE)) if (destOtherXform->GetVariationById(eVariationId::VAR_SUPER_SHAPE))
{ {
SuperShapeVariation<T>* var = new SuperShapeVariation<T>(); SuperShapeVariation<T>* var = new SuperShapeVariation<T>();
var->SetParamVal("super_shape_n1", 2); var->SetParamVal("super_shape_n1", 2);
@ -237,13 +237,13 @@ public:
destOtherXform = destEmbers[i + ii].GetTotalXform(xf); destOtherXform = destEmbers[i + ii].GetTotalXform(xf);
if (destOtherXform->GetVariationById(VAR_FAN)) if (destOtherXform->GetVariationById(eVariationId::VAR_FAN))
{ {
destXform->AddVariation(new FanVariation<T>()); destXform->AddVariation(new FanVariation<T>());
found++; found++;
} }
if (destOtherXform->GetVariationById(VAR_RINGS)) if (destOtherXform->GetVariationById(eVariationId::VAR_RINGS))
{ {
destXform->AddVariation(new RingsVariation<T>()); destXform->AddVariation(new RingsVariation<T>());
found++; found++;

View File

@ -1262,7 +1262,7 @@ EmberStats Renderer<T, bucketT>::Iterate(size_t iterCount, size_t temporalSample
{ {
#endif #endif
#if defined(WIN32) #if defined(WIN32)
SetThreadPriority(GetCurrentThread(), m_Priority); SetThreadPriority(GetCurrentThread(), int(m_Priority));
#elif defined(__APPLE__) #elif defined(__APPLE__)
sched_param sp = {0}; sched_param sp = {0};
sp.sched_priority = m_Priority; sp.sched_priority = m_Priority;

View File

@ -587,10 +587,10 @@ size_t RendererBase::ThreadCount() const { return m_ThreadsToUse; }
/// <summary> /// <summary>
/// Get the renderer type enum. /// Get the renderer type enum.
/// CPU_RENDERER for this class, other values for derived classes. /// eRendererType::CPU_RENDERER for this class, other values for derived classes.
/// </summary> /// </summary>
/// <returns>CPU_RENDERER</returns> /// <returns>eRendererType::CPU_RENDERER</returns>
eRendererType RendererBase::RendererType() const { return CPU_RENDERER; } eRendererType RendererBase::RendererType() const { return eRendererType::CPU_RENDERER; }
/// <summary> /// <summary>
/// //Non-virtual threading control. /// //Non-virtual threading control.

View File

@ -82,7 +82,7 @@ public:
/// Add more in the future as different rendering methods are experimented with. /// Add more in the future as different rendering methods are experimented with.
/// Possible values might be: CPU+OpenGL, Particle, Inverse. /// Possible values might be: CPU+OpenGL, Particle, Inverse.
/// </summary> /// </summary>
enum eRendererType { CPU_RENDERER, OPENCL_RENDERER }; enum class eRendererType : et { CPU_RENDERER, OPENCL_RENDERER };
/// <summary> /// <summary>
/// A base class with virtual functions to allow both templating and polymorphism to work together. /// A base class with virtual functions to allow both templating and polymorphism to work together.

View File

@ -14,7 +14,7 @@ namespace EmberNs
/// <summary> /// <summary>
/// Mutation mode enum. /// Mutation mode enum.
/// </summary> /// </summary>
enum eMutateMode enum class eMutateMode : int
{ {
MUTATE_NOT_SPECIFIED = -1, MUTATE_NOT_SPECIFIED = -1,
MUTATE_ALL_VARIATIONS = 0, MUTATE_ALL_VARIATIONS = 0,
@ -29,7 +29,7 @@ enum eMutateMode
/// <summary> /// <summary>
/// Cross mode enum. /// Cross mode enum.
/// </summary> /// </summary>
enum eCrossMode enum class eCrossMode : int
{ {
CROSS_NOT_SPECIFIED = -1, CROSS_NOT_SPECIFIED = -1,
CROSS_UNION = 0, CROSS_UNION = 0,
@ -179,7 +179,7 @@ public:
/// <param name="mode">The mutation mode</param> /// <param name="mode">The mutation mode</param>
/// <param name="useVars">The variations to use if the mutation mode is random</param> /// <param name="useVars">The variations to use if the mutation mode is random</param>
/// <param name="sym">The type of symmetry to add if random specified. If 0, it will be added randomly.</param> /// <param name="sym">The type of symmetry to add if random specified. If 0, it will be added randomly.</param>
/// <param name="speed">The speed to multiply the pre affine transforms by if the mutate mode is MUTATE_ALL_COEFS, else ignored.</param> /// <param name="speed">The speed to multiply the pre affine transforms by if the mutate mode is eMutateMode::MUTATE_ALL_COEFS, else ignored.</param>
/// <param name="maxVars">The maximum number of variations to allow in any single xform in the ember.</param> /// <param name="maxVars">The maximum number of variations to allow in any single xform in the ember.</param>
/// <returns>A string describing what was done</returns> /// <returns>A string describing what was done</returns>
string Mutate(Ember<T>& ember, eMutateMode mode, vector<eVariationId>& useVars, intmax_t sym, T speed, size_t maxVars) string Mutate(Ember<T>& ember, eMutateMode mode, vector<eVariationId>& useVars, intmax_t sym, T speed, size_t maxVars)
@ -192,27 +192,27 @@ public:
mutation.Clear(); mutation.Clear();
//If mutate_mode = -1, choose a random mutation mode. //If mutate_mode = -1, choose a random mutation mode.
if (mode == MUTATE_NOT_SPECIFIED) if (mode == eMutateMode::MUTATE_NOT_SPECIFIED)
{ {
randSelect = m_Rand.Frand01<T>(); randSelect = m_Rand.Frand01<T>();
if (randSelect < T(0.1)) if (randSelect < T(0.1))
mode = MUTATE_ALL_VARIATIONS; mode = eMutateMode::MUTATE_ALL_VARIATIONS;
else if (randSelect < T(0.3)) else if (randSelect < T(0.3))
mode = MUTATE_ONE_XFORM_COEFS; mode = eMutateMode::MUTATE_ONE_XFORM_COEFS;
else if (randSelect < T(0.5)) else if (randSelect < T(0.5))
mode = MUTATE_ADD_SYMMETRY; mode = eMutateMode::MUTATE_ADD_SYMMETRY;
else if (randSelect < T(0.6)) else if (randSelect < T(0.6))
mode = MUTATE_POST_XFORMS; mode = eMutateMode::MUTATE_POST_XFORMS;
else if (randSelect < T(0.7)) else if (randSelect < T(0.7))
mode = MUTATE_COLOR_PALETTE; mode = eMutateMode::MUTATE_COLOR_PALETTE;
else if (randSelect < T(0.8)) else if (randSelect < T(0.8))
mode = MUTATE_DELETE_XFORM; mode = eMutateMode::MUTATE_DELETE_XFORM;
else else
mode = MUTATE_ALL_COEFS; mode = eMutateMode::MUTATE_ALL_COEFS;
} }
if (mode == MUTATE_ALL_VARIATIONS) if (mode == eMutateMode::MUTATE_ALL_VARIATIONS)
{ {
os << "mutate all variations"; os << "mutate all variations";
@ -248,7 +248,7 @@ public:
} }
while (!done); while (!done);
} }
else if (mode == MUTATE_ONE_XFORM_COEFS) else if (mode == eMutateMode::MUTATE_ONE_XFORM_COEFS)
{ {
//Generate a 2-xform random. //Generate a 2-xform random.
Random(mutation, useVars, sym, 2, maxVars); Random(mutation, useVars, sym, 2, maxVars);
@ -271,12 +271,12 @@ public:
xform1->m_Affine.m_Mat[i][j] = xform2->m_Affine.m_Mat[i][j]; xform1->m_Affine.m_Mat[i][j] = xform2->m_Affine.m_Mat[i][j];
} }
} }
else if (mode == MUTATE_ADD_SYMMETRY) else if (mode == eMutateMode::MUTATE_ADD_SYMMETRY)
{ {
os << "mutate symmetry"; os << "mutate symmetry";
ember.AddSymmetry(0, m_Rand); ember.AddSymmetry(0, m_Rand);
} }
else if (mode == MUTATE_POST_XFORMS) else if (mode == eMutateMode::MUTATE_POST_XFORMS)
{ {
bool same = (m_Rand.Rand() & 3) > 0;//25% chance of using the same post for all of them. bool same = (m_Rand.Rand() & 3) > 0;//25% chance of using the same post for all of them.
size_t b = 1 + m_Rand.Rand() % 6; size_t b = 1 + m_Rand.Rand() % 6;
@ -353,7 +353,7 @@ public:
} }
} }
} }
else if (mode == MUTATE_COLOR_PALETTE) else if (mode == eMutateMode::MUTATE_COLOR_PALETTE)
{ {
T s = m_Rand.Frand01<T>(); T s = m_Rand.Frand01<T>();
@ -384,7 +384,7 @@ public:
} }
} }
} }
else if (mode == MUTATE_DELETE_XFORM) else if (mode == eMutateMode::MUTATE_DELETE_XFORM)
{ {
size_t nx = m_Rand.Rand() % ember.TotalXformCount(); size_t nx = m_Rand.Rand() % ember.TotalXformCount();
os << "mutate delete xform " << nx; os << "mutate delete xform " << nx;
@ -392,7 +392,7 @@ public:
if (ember.TotalXformCount() > 1) if (ember.TotalXformCount() > 1)
ember.DeleteTotalXform(nx); ember.DeleteTotalXform(nx);
} }
else if (mode == MUTATE_ALL_COEFS) else if (mode == eMutateMode::MUTATE_ALL_COEFS)
{ {
os << "mutate all coefs"; os << "mutate all coefs";
Random(mutation, useVars, sym, ember.TotalXformCount(), maxVars); Random(mutation, useVars, sym, ember.TotalXformCount(), maxVars);
@ -422,7 +422,7 @@ public:
/// <param name="emberOut">The result ember</param> /// <param name="emberOut">The result ember</param>
/// <param name="crossMode">The cross mode</param> /// <param name="crossMode">The cross mode</param>
/// <returns>A string describing what was done</returns> /// <returns>A string describing what was done</returns>
string Cross(Ember<T>& ember0, Ember<T>& ember1, Ember<T>& emberOut, int crossMode) string Cross(Ember<T>& ember0, Ember<T>& ember1, Ember<T>& emberOut, eCrossMode crossMode)
{ {
uint rb; uint rb;
size_t i; size_t i;
@ -430,19 +430,19 @@ public:
ostringstream os; ostringstream os;
char ministr[32]; char ministr[32];
if (crossMode == CROSS_NOT_SPECIFIED) if (crossMode == eCrossMode::CROSS_NOT_SPECIFIED)
{ {
T s = m_Rand.Frand01<T>(); T s = m_Rand.Frand01<T>();
if (s < 0.1) if (s < 0.1)
crossMode = CROSS_UNION; crossMode = eCrossMode::CROSS_UNION;
else if (s < 0.2) else if (s < 0.2)
crossMode = CROSS_INTERPOLATE; crossMode = eCrossMode::CROSS_INTERPOLATE;
else else
crossMode = CROSS_ALTERNATE; crossMode = eCrossMode::CROSS_ALTERNATE;
} }
if (crossMode == CROSS_UNION) if (crossMode == eCrossMode::CROSS_UNION)
{ {
//Make a copy of the first ember. //Make a copy of the first ember.
emberOut = ember0; emberOut = ember0;
@ -453,7 +453,7 @@ public:
os << "cross union"; os << "cross union";
} }
else if (crossMode == CROSS_INTERPOLATE) else if (crossMode == eCrossMode::CROSS_INTERPOLATE)
{ {
//Linearly interpolate somewhere between the two. //Linearly interpolate somewhere between the two.
Ember<T> parents[2]; Ember<T> parents[2];
@ -640,8 +640,8 @@ public:
} }
} }
//If first input variation is -1 random choose one to use or decide to use multiple. //If useVars is empty, randomly choose one to use or decide to use multiple.
if (useVars.empty() || useVars[0] == -1) if (useVars.empty())
var = m_Rand.RandBit() ? m_Rand.Rand() % varCount : -1; var = m_Rand.RandBit() ? m_Rand.Rand() % varCount : -1;
else else
var = -2; var = -2;

View File

@ -11,7 +11,7 @@ namespace EmberNs
/// <summary> /// <summary>
/// The types of spatial filters available. /// The types of spatial filters available.
/// </summary> /// </summary>
enum class eSpatialFilterType : size_t enum class eSpatialFilterType : et
{ {
GAUSSIAN_SPATIAL_FILTER, GAUSSIAN_SPATIAL_FILTER,
HERMITE_SPATIAL_FILTER, HERMITE_SPATIAL_FILTER,

View File

@ -11,7 +11,7 @@ namespace EmberNs
/// <summary> /// <summary>
/// The types of temporal filters available. /// The types of temporal filters available.
/// </summary> /// </summary>
enum class eTemporalFilterType : size_t enum class eTemporalFilterType : et
{ {
BOX_TEMPORAL_FILTER, BOX_TEMPORAL_FILTER,
GAUSSIAN_TEMPORAL_FILTER, GAUSSIAN_TEMPORAL_FILTER,

View File

@ -19,7 +19,7 @@ namespace EmberNs
/// <summary> /// <summary>
/// Enum to encapsulate and add type safety to the thread priority defines. /// Enum to encapsulate and add type safety to the thread priority defines.
/// </summary> /// </summary>
enum eThreadPriority enum class eThreadPriority : int
{ {
LOWEST = THREAD_PRIORITY_LOWEST,//-2 LOWEST = THREAD_PRIORITY_LOWEST,//-2
BELOW_NORMAL = THREAD_PRIORITY_BELOW_NORMAL,//-1 BELOW_NORMAL = THREAD_PRIORITY_BELOW_NORMAL,//-1
@ -227,7 +227,7 @@ public:
\ \
private: \ private: \
x(const x& other) = delete; \ x(const x& other) = delete; \
const x& operator=(const x& other) = delete//Semicolon deliberately omitted to force it on the caller. const x& operator=(const x& other) = delete//Semicolon deliberately omitted to force it on the caller.
//Use this if the body of the destructor is empty and is will be implemented inline in the header file. //Use this if the body of the destructor is empty and is will be implemented inline in the header file.
#define SINGLETON_DERIVED_IMPL(x) \ #define SINGLETON_DERIVED_IMPL(x) \
@ -237,7 +237,7 @@ public:
\ \
private: \ private: \
x(const x& other) = delete; \ x(const x& other) = delete; \
const x& operator=(const x& other) = delete const x& operator=(const x& other) = delete
/// <summary> /// <summary>
/// Open a file in binary mode and read its entire contents into a vector of bytes. Optionally null terminate. /// Open a file in binary mode and read its entire contents into a vector of bytes. Optionally null terminate.

View File

@ -20,7 +20,7 @@ template <typename T> class Xform;
/// <summary> /// <summary>
/// The type of variation: regular, pre or post. /// The type of variation: regular, pre or post.
/// </summary> /// </summary>
enum eVariationType enum class eVariationType : et
{ {
VARTYPE_REG, VARTYPE_REG,
VARTYPE_PRE, VARTYPE_PRE,
@ -33,7 +33,7 @@ enum eVariationType
/// to the output. However, if they did not involve the input points, they should be added /// to the output. However, if they did not involve the input points, they should be added
/// to the output. /// to the output.
/// </summary> /// </summary>
enum eVariationAssignType enum class eVariationAssignType : et
{ {
ASSIGNTYPE_SET, ASSIGNTYPE_SET,
ASSIGNTYPE_SUM ASSIGNTYPE_SUM
@ -42,7 +42,7 @@ enum eVariationAssignType
/// <summary> /// <summary>
/// Complete list of every variation class ID. /// Complete list of every variation class ID.
/// </summary> /// </summary>
enum eVariationId enum class eVariationId : et
{ {
VAR_ARCH , VAR_ARCH ,
VAR_AUGER , VAR_AUGER ,
@ -520,8 +520,8 @@ enum eVariationId
VAR_PRE_LINEAR, VAR_PRE_LINEAR,
VAR_PRE_LINEAR_T, VAR_PRE_LINEAR_T,
VAR_PRE_LINEAR_T3D, VAR_PRE_LINEAR_T3D,
//VAR_PRE_LINEAR_XZ, //eVariationId::VAR_PRE_LINEAR_XZ,
//VAR_PRE_LINEAR_YZ, //eVariationId::VAR_PRE_LINEAR_YZ,
VAR_PRE_LINEAR3D, VAR_PRE_LINEAR3D,
VAR_PRE_LISSAJOUS, VAR_PRE_LISSAJOUS,
VAR_PRE_LOG, VAR_PRE_LOG,
@ -1002,7 +1002,7 @@ enum eVariationId
VAR_POST_DC_TRIANGLE, VAR_POST_DC_TRIANGLE,
VAR_POST_DC_ZTRANSL, VAR_POST_DC_ZTRANSL,
LAST_VAR = VAR_POST_DC_ZTRANSL + 1 LAST_VAR = eVariationId::VAR_POST_DC_ZTRANSL + 1
}; };
/// <summary> /// <summary>
@ -1077,7 +1077,7 @@ public:
m_NeedPrecalcSqrtSumSquares = true; m_NeedPrecalcSqrtSumSquares = true;
} }
m_AssignType = ASSIGNTYPE_SET; m_AssignType = eVariationAssignType::ASSIGNTYPE_SET;
SetType(); SetType();
} }
@ -1150,7 +1150,7 @@ public:
/// <param name="point">The point to read values from in the case of post, ignored for pre.</param> /// <param name="point">The point to read values from in the case of post, ignored for pre.</param>
void PrecalcHelper(IteratorHelper<T>& iteratorHelper, Point<T>* point) void PrecalcHelper(IteratorHelper<T>& iteratorHelper, Point<T>* point)
{ {
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
if (m_NeedPrecalcSumSquares) if (m_NeedPrecalcSumSquares)
{ {
@ -1174,7 +1174,7 @@ public:
if (m_NeedPrecalcAtanYX) if (m_NeedPrecalcAtanYX)
iteratorHelper.m_PrecalcAtanyx = atan2(iteratorHelper.m_TransY, iteratorHelper.m_TransX); iteratorHelper.m_PrecalcAtanyx = atan2(iteratorHelper.m_TransY, iteratorHelper.m_TransX);
} }
else if (m_VarType == VARTYPE_POST) else if (m_VarType == eVariationType::VARTYPE_POST)
{ {
if (m_NeedPrecalcSumSquares) if (m_NeedPrecalcSumSquares)
{ {
@ -1208,7 +1208,7 @@ public:
{ {
ostringstream ss; ostringstream ss;
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
if (m_NeedPrecalcSumSquares) if (m_NeedPrecalcSumSquares)
{ {
@ -1232,7 +1232,7 @@ public:
if (m_NeedPrecalcAtanYX) if (m_NeedPrecalcAtanYX)
ss << "\tprecalcAtanyx = atan2(transY, transX);\n"; ss << "\tprecalcAtanyx = atan2(transY, transX);\n";
} }
else if (m_VarType == VARTYPE_POST) else if (m_VarType == eVariationType::VARTYPE_POST)
{ {
if (m_NeedPrecalcSumSquares) if (m_NeedPrecalcSumSquares)
{ {
@ -1385,9 +1385,9 @@ public:
/// <returns>pre_, post_ or the empty string</returns> /// <returns>pre_, post_ or the empty string</returns>
string Prefix() const string Prefix() const
{ {
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
return "pre_"; return "pre_";
else if (m_VarType == VARTYPE_POST) else if (m_VarType == eVariationType::VARTYPE_POST)
return "post_"; return "post_";
else else
return ""; return "";
@ -1427,11 +1427,11 @@ protected:
void SetType() void SetType()
{ {
if (m_Name.find("pre_") == 0) if (m_Name.find("pre_") == 0)
m_VarType = VARTYPE_PRE; m_VarType = eVariationType::VARTYPE_PRE;
else if (m_Name.find("post_") == 0) else if (m_Name.find("post_") == 0)
m_VarType = VARTYPE_POST; m_VarType = eVariationType::VARTYPE_POST;
else else
m_VarType = VARTYPE_REG; m_VarType = eVariationType::VARTYPE_REG;
} }
Xform<T>* m_Xform;//The parent Xform that this variation is a child of. Xform<T>* m_Xform;//The parent Xform that this variation is a child of.
@ -1452,7 +1452,7 @@ private:
/// The type of parameter represented by ParamWithName<T>. /// The type of parameter represented by ParamWithName<T>.
/// This allows restricting of certain parameters to sensible values. /// This allows restricting of certain parameters to sensible values.
/// </summary> /// </summary>
enum eParamType enum class eParamType : et
{ {
REAL, REAL,
REAL_CYCLIC, REAL_CYCLIC,
@ -1461,6 +1461,44 @@ enum eParamType
INTEGER_NONZERO INTEGER_NONZERO
}; };
/// <summary>
/// Thin wrapper to allow << operator on param type.
/// </summary>
/// <param name="stream">The stream to insert into</param>
/// <param name="t">The type whose string representation will be inserted into the stream</param>
/// <returns></returns>
static std::ostream& operator<<(std::ostream& stream, const eParamType& t)
{
switch (t)
{
case eParamType::REAL:
stream << "real";
break;
case eParamType::REAL_CYCLIC:
stream << "cyclic";
break;
case eParamType::REAL_NONZERO:
stream << "non-zero";
break;
case eParamType::INTEGER:
stream << "integer";
break;
case eParamType::INTEGER_NONZERO:
stream << "integer non-zero";
break;
default:
stream << "error";
break;
}
return stream;
}
template <typename T> class ParametricVariation; template <typename T> class ParametricVariation;
/// <summary> /// <summary>
@ -1487,7 +1525,7 @@ public:
/// </summary> /// </summary>
ParamWithName() ParamWithName()
{ {
Init(nullptr, "", 0, REAL, TLOW, TMAX); Init(nullptr, "", 0, eParamType::REAL, TLOW, TMAX);
} }
/// <summary> /// <summary>
@ -1502,7 +1540,7 @@ public:
string name, string name,
size_t size = sizeof(T)) size_t size = sizeof(T))
{ {
Init(param, name, 0, REAL, TLOW, TMAX, true, false, size); Init(param, name, 0, eParamType::REAL, TLOW, TMAX, true, false, size);
} }
/// <summary> /// <summary>
@ -1517,7 +1555,7 @@ public:
T* param, T* param,
string name) string name)
{ {
Init(param, name, 0, REAL, TLOW, TMAX, true, true); Init(param, name, 0, eParamType::REAL, TLOW, TMAX, true, true);
} }
/// <summary> /// <summary>
@ -1529,7 +1567,7 @@ public:
/// <param name="type">The type of the parameter</param> /// <param name="type">The type of the parameter</param>
/// <param name="min">The minimum value the parameter can be</param> /// <param name="min">The minimum value the parameter can be</param>
/// <param name="max">The maximum value the parameter can be</param> /// <param name="max">The maximum value the parameter can be</param>
ParamWithName(T* param, const string& name, T def = 0, eParamType type = REAL, T min = TLOW, T max = TMAX) ParamWithName(T* param, const string& name, T def = 0, eParamType type = eParamType::REAL, T min = TLOW, T max = TMAX)
{ {
Init(param, name, def, type, min, max); Init(param, name, def, type, min, max);
} }
@ -1586,7 +1624,7 @@ public:
/// <param name="isPrecalc">Whether the parameter is actually a precalculated value. Default: false.</param> /// <param name="isPrecalc">Whether the parameter is actually a precalculated value. Default: false.</param>
/// <param name="isState">Whether the parameter changes state between iterations. Default: false.</param> /// <param name="isState">Whether the parameter changes state between iterations. Default: false.</param>
/// <param name="size">The length of the underlying memory in bytes. Needed for array types. Default: sizeof(T).</param> /// <param name="size">The length of the underlying memory in bytes. Needed for array types. Default: sizeof(T).</param>
void Init(T* param, const string& name, T def = 0, eParamType type = REAL, T min = TLOW, T max = TMAX, bool isPrecalc = false, bool isState = false, size_t size = sizeof(T)) void Init(T* param, const string& name, T def = 0, eParamType type = eParamType::REAL, T min = TLOW, T max = TMAX, bool isPrecalc = false, bool isState = false, size_t size = sizeof(T))
{ {
m_Param = param; m_Param = param;
m_Def = def; m_Def = def;
@ -1610,13 +1648,13 @@ public:
{ {
switch (m_Type) switch (m_Type)
{ {
case REAL : case eParamType::REAL:
{ {
*m_Param = std::max(std::min(val, m_Max), m_Min); *m_Param = std::max(std::min(val, m_Max), m_Min);
break; break;
} }
case REAL_CYCLIC : case eParamType::REAL_CYCLIC :
{ {
if (val > m_Max) if (val > m_Max)
*m_Param = m_Min + fmod(val - m_Min, m_Max - m_Min); *m_Param = m_Min + fmod(val - m_Min, m_Max - m_Min);
@ -1628,7 +1666,7 @@ public:
break; break;
} }
case REAL_NONZERO : case eParamType::REAL_NONZERO :
{ {
T vd = std::max(std::min(val, m_Max), m_Min); T vd = std::max(std::min(val, m_Max), m_Min);
@ -1640,13 +1678,13 @@ public:
break; break;
} }
case INTEGER : case eParamType::INTEGER :
{ {
*m_Param = T(int(std::max(std::min<T>(T(Floor<T>(val + T(0.5))), m_Max), m_Min))); *m_Param = T(int(std::max(std::min<T>(T(Floor<T>(val + T(0.5))), m_Max), m_Min)));
break; break;
} }
case INTEGER_NONZERO : case eParamType::INTEGER_NONZERO :
default: default:
{ {
int vi = int(std::max(std::min<T>(T(Floor<T>(val + T(0.5))), m_Max), m_Min)); int vi = int(std::max(std::min<T>(T(Floor<T>(val + T(0.5))), m_Max), m_Min));
@ -2098,7 +2136,7 @@ protected:
/// Assign type defaults to set. /// Assign type defaults to set.
/// </summary> /// </summary>
#define MAKEPREPOSTVAR(varName, stringName, enumName) MAKEPREPOSTVARASSIGN(varName, stringName, enumName, ASSIGNTYPE_SET) #define MAKEPREPOSTVAR(varName, stringName, enumName) MAKEPREPOSTVARASSIGN(varName, stringName, enumName, eVariationAssignType::ASSIGNTYPE_SET)
#define MAKEPREPOSTVARASSIGN(varName, stringName, enumName, assignType) \ #define MAKEPREPOSTVARASSIGN(varName, stringName, enumName, assignType) \
template <typename T> \ template <typename T> \
class EMBER_API Pre##varName##Variation : public varName##Variation<T> \ class EMBER_API Pre##varName##Variation : public varName##Variation<T> \
@ -2107,7 +2145,7 @@ protected:
public: \ public: \
Pre##varName##Variation(T weight = 1.0) : varName##Variation<T>(weight) \ Pre##varName##Variation(T weight = 1.0) : varName##Variation<T>(weight) \
{ \ { \
m_VariationId = VAR_PRE_##enumName; \ m_VariationId = eVariationId::VAR_PRE_##enumName; \
m_Name = "pre_"#stringName; \ m_Name = "pre_"#stringName; \
m_AssignType = assignType; \ m_AssignType = assignType; \
SetType(); \ SetType(); \
@ -2123,7 +2161,7 @@ protected:
public:\ public:\
Post##varName##Variation(T weight = 1.0) : varName##Variation<T>(weight) \ Post##varName##Variation(T weight = 1.0) : varName##Variation<T>(weight) \
{ \ { \
m_VariationId = VAR_POST_##enumName; \ m_VariationId = eVariationId::VAR_POST_##enumName; \
m_Name = "post_"#stringName; \ m_Name = "post_"#stringName; \
m_AssignType = assignType; \ m_AssignType = assignType; \
SetType(); \ SetType(); \
@ -2217,7 +2255,7 @@ protected:
/// avoid having to change the constructor arguments for about 300 variations. /// avoid having to change the constructor arguments for about 300 variations.
/// </summary> /// </summary>
#define MAKEPREPOSTPARVAR(varName, stringName, enumName) MAKEPREPOSTPARVARASSIGN(varName, stringName, enumName, ASSIGNTYPE_SET) #define MAKEPREPOSTPARVAR(varName, stringName, enumName) MAKEPREPOSTPARVARASSIGN(varName, stringName, enumName, eVariationAssignType::ASSIGNTYPE_SET)
#define MAKEPREPOSTPARVARASSIGN(varName, stringName, enumName, assignType) \ #define MAKEPREPOSTPARVARASSIGN(varName, stringName, enumName, assignType) \
template <typename T> \ template <typename T> \
class EMBER_API Pre##varName##Variation : public varName##Variation <T> \ class EMBER_API Pre##varName##Variation : public varName##Variation <T> \
@ -2228,7 +2266,7 @@ protected:
public:\ public:\
Pre##varName##Variation(T weight = 1.0) : varName##Variation<T>(weight) \ Pre##varName##Variation(T weight = 1.0) : varName##Variation<T>(weight) \
{ \ { \
m_VariationId = VAR_PRE_##enumName; \ m_VariationId = eVariationId::VAR_PRE_##enumName; \
m_Name = "pre_"#stringName; \ m_Name = "pre_"#stringName; \
m_AssignType = assignType; \ m_AssignType = assignType; \
SetType(); \ SetType(); \
@ -2247,7 +2285,7 @@ protected:
public:\ public:\
Post##varName##Variation(T weight = 1.0) : varName##Variation<T>(weight) \ Post##varName##Variation(T weight = 1.0) : varName##Variation<T>(weight) \
{ \ { \
m_VariationId = VAR_POST_##enumName; \ m_VariationId = eVariationId::VAR_POST_##enumName; \
m_Name = "post_"#stringName; \ m_Name = "post_"#stringName; \
m_AssignType = assignType; \ m_AssignType = assignType; \
SetType(); \ SetType(); \

View File

@ -36,7 +36,7 @@ public:
/// </summary> /// </summary>
VariationList() VariationList()
{ {
m_Variations.reserve(eVariationId::LAST_VAR); m_Variations.reserve(size_t(eVariationId::LAST_VAR));
ADDPREPOSTREGVAR(Linear) ADDPREPOSTREGVAR(Linear)
ADDPREPOSTREGVAR(Sinusoidal) ADDPREPOSTREGVAR(Sinusoidal)
ADDPREPOSTREGVAR(Spherical) ADDPREPOSTREGVAR(Spherical)
@ -363,17 +363,19 @@ public:
m_PostVariations.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. m_ParametricVariations.reserve(size_t(m_Variations.size() * .90));//This is a rough guess at how many are parametric.
for (auto var : m_Variations) if (var->VarType() == VARTYPE_REG) m_RegVariations.push_back(var); //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.
for (auto var : m_Variations) if (var->VarType() == VARTYPE_PRE) m_PreVariations.push_back(var);
for (auto var : m_Variations) if (var->VarType() == VARTYPE_POST) m_PostVariations.push_back(var);
//Keep a list of which variations derive from ParametricVariation.
//Note that these are not new copies, rather just pointers to the original instances in m_Variations. //Note that these are not new copies, rather just pointers to the original instances in m_Variations.
for (size_t i = 0; i < m_Variations.size(); i++) for (auto var : m_Variations)
{ {
if (ParametricVariation<T>* parVar = dynamic_cast<ParametricVariation<T>*>(m_Variations[i])) 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<ParametricVariation<T>*>(var))
m_ParametricVariations.push_back(parVar); m_ParametricVariations.push_back(parVar);
} }
} }
@ -401,14 +403,24 @@ public:
/// <returns>A pointer to the variation of the specified type at the index if in range, else nullptr.</returns> /// <returns>A pointer to the variation of the specified type at the index if in range, else nullptr.</returns>
const Variation<T>* GetVariation(size_t index, eVariationType varType) const const Variation<T>* GetVariation(size_t index, eVariationType varType) const
{ {
if (varType == VARTYPE_REG) switch (varType)
return index < m_RegVariations.size() ? m_RegVariations[index] : nullptr; {
else if (varType == VARTYPE_PRE) case eVariationType::VARTYPE_REG:
return index < m_PreVariations.size() ? m_PreVariations[index] : nullptr; return index < m_RegVariations.size() ? m_RegVariations[index] : nullptr;
else if (varType == VARTYPE_POST) break;
return index < m_PostVariations.size() ? m_PostVariations[index] : nullptr;
else case eVariationType::VARTYPE_PRE:
return nullptr; 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;
}
} }
/// <summary> /// <summary>
@ -428,9 +440,9 @@ public:
/// <returns>A pointer to the variation if found, else nullptr.</returns> /// <returns>A pointer to the variation if found, else nullptr.</returns>
const Variation<T>* GetVariation(eVariationId id) const const Variation<T>* GetVariation(eVariationId id) const
{ {
for (size_t i = 0; i < m_Variations.size() && m_Variations[i]; i++) for (auto var : m_Variations)
if (id == m_Variations[i]->VariationId()) if (var && id == var->VariationId())
return m_Variations[i]; return var;
return nullptr; return nullptr;
} }
@ -451,9 +463,9 @@ public:
/// <returns>A pointer to the variation if found, else nullptr.</returns> /// <returns>A pointer to the variation if found, else nullptr.</returns>
const Variation<T>* GetVariation(const string& name) const const Variation<T>* GetVariation(const string& name) const
{ {
for (size_t i = 0; i < m_Variations.size() && m_Variations[i]; i++) for (auto var : m_Variations)
if (!_stricmp(name.c_str(), m_Variations[i]->Name().c_str())) if (var && !_stricmp(name.c_str(), var->Name().c_str()))
return m_Variations[i]; return var;
return nullptr; return nullptr;
} }
@ -482,9 +494,9 @@ public:
/// <returns>The parametric variation with a matching name, else nullptr.</returns> /// <returns>The parametric variation with a matching name, else nullptr.</returns>
const ParametricVariation<T>* GetParametricVariation(const string& name) const const ParametricVariation<T>* GetParametricVariation(const string& name) const
{ {
for (size_t i = 0; i < m_ParametricVariations.size() && m_ParametricVariations[i]; i++) for (auto var : m_ParametricVariations)
if (!_stricmp(name.c_str(), m_ParametricVariations[i]->Name().c_str())) if (var && !_stricmp(name.c_str(), var->Name().c_str()))
return m_ParametricVariations[i]; return var;
return nullptr; return nullptr;
} }
@ -524,7 +536,7 @@ private:
{ {
if (var) if (var)
{ {
Variation<T>* var2 = var->Copy(); auto var2 = var->Copy();
var2->m_Weight = weight; var2->m_Weight = weight;
return var2; return var2;
} }

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@ template <typename T>
class EMBER_API HemisphereVariation : public Variation<T> class EMBER_API HemisphereVariation : public Variation<T>
{ {
public: public:
HemisphereVariation(T weight = 1.0) : Variation<T>("hemisphere", VAR_HEMISPHERE, weight, true) { } HemisphereVariation(T weight = 1.0) : Variation<T>("hemisphere", eVariationId::VAR_HEMISPHERE, weight, true) { }
VARCOPY(HemisphereVariation) VARCOPY(HemisphereVariation)
@ -48,7 +48,7 @@ template <typename T>
class EMBER_API EpispiralVariation : public ParametricVariation<T> class EMBER_API EpispiralVariation : public ParametricVariation<T>
{ {
public: public:
EpispiralVariation(T weight = 1.0) : ParametricVariation<T>("epispiral", VAR_EPISPIRAL, weight, false, false, false, false, true) EpispiralVariation(T weight = 1.0) : ParametricVariation<T>("epispiral", eVariationId::VAR_EPISPIRAL, weight, false, false, false, false, true)
{ {
Init(); Init();
} }
@ -130,7 +130,7 @@ template <typename T>
class EMBER_API BwrapsVariation : public ParametricVariation<T> class EMBER_API BwrapsVariation : public ParametricVariation<T>
{ {
public: public:
BwrapsVariation(T weight = 1.0) : ParametricVariation<T>("bwraps", VAR_BWRAPS, weight) BwrapsVariation(T weight = 1.0) : ParametricVariation<T>("bwraps", eVariationId::VAR_BWRAPS, weight)
{ {
Init(); Init();
} }
@ -297,7 +297,7 @@ template <typename T>
class EMBER_API BlurCircleVariation : public Variation<T> class EMBER_API BlurCircleVariation : public Variation<T>
{ {
public: public:
BlurCircleVariation(T weight = 1.0) : Variation<T>("blur_circle", VAR_BLUR_CIRCLE, weight) { } BlurCircleVariation(T weight = 1.0) : Variation<T>("blur_circle", eVariationId::VAR_BLUR_CIRCLE, weight) { }
VARCOPY(BlurCircleVariation) VARCOPY(BlurCircleVariation)
@ -404,7 +404,7 @@ template <typename T>
class EMBER_API BlurZoomVariation : public ParametricVariation<T> class EMBER_API BlurZoomVariation : public ParametricVariation<T>
{ {
public: public:
BlurZoomVariation(T weight = 1.0) : ParametricVariation<T>("blur_zoom", VAR_BLUR_ZOOM, weight) BlurZoomVariation(T weight = 1.0) : ParametricVariation<T>("blur_zoom", eVariationId::VAR_BLUR_ZOOM, weight)
{ {
Init(); Init();
} }
@ -465,7 +465,7 @@ template <typename T>
class EMBER_API BlurPixelizeVariation : public ParametricVariation<T> class EMBER_API BlurPixelizeVariation : public ParametricVariation<T>
{ {
public: public:
BlurPixelizeVariation(T weight = 1.0) : ParametricVariation<T>("blur_pixelize", VAR_BLUR_PIXELIZE, weight) BlurPixelizeVariation(T weight = 1.0) : ParametricVariation<T>("blur_pixelize", eVariationId::VAR_BLUR_PIXELIZE, weight)
{ {
Init(); Init();
} }
@ -517,7 +517,7 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_BlurPixelizeSize, prefix + "blur_pixelize_size", T(0.1), REAL, EPS)); m_Params.push_back(ParamWithName<T>(&m_BlurPixelizeSize, prefix + "blur_pixelize_size", T(0.1), eParamType::REAL, EPS));
m_Params.push_back(ParamWithName<T>(&m_BlurPixelizeScale, prefix + "blur_pixelize_scale", 1)); m_Params.push_back(ParamWithName<T>(&m_BlurPixelizeScale, prefix + "blur_pixelize_scale", 1));
m_Params.push_back(ParamWithName<T>(true, &m_V, prefix + "blur_pixelize_v"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_V, prefix + "blur_pixelize_v"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_InvSize, prefix + "blur_pixelize_inv_size")); m_Params.push_back(ParamWithName<T>(true, &m_InvSize, prefix + "blur_pixelize_inv_size"));
@ -537,7 +537,7 @@ template <typename T>
class EMBER_API CropVariation : public ParametricVariation<T> class EMBER_API CropVariation : public ParametricVariation<T>
{ {
public: public:
CropVariation(T weight = 1.0) : ParametricVariation<T>("crop", VAR_CROP, weight) CropVariation(T weight = 1.0) : ParametricVariation<T>("crop", eVariationId::VAR_CROP, weight)
{ {
Init(); Init();
} }
@ -659,8 +659,8 @@ protected:
m_Params.push_back(ParamWithName<T>(&m_Y0, prefix + "crop_top", -1)); m_Params.push_back(ParamWithName<T>(&m_Y0, prefix + "crop_top", -1));
m_Params.push_back(ParamWithName<T>(&m_X1, prefix + "crop_right", 1)); m_Params.push_back(ParamWithName<T>(&m_X1, prefix + "crop_right", 1));
m_Params.push_back(ParamWithName<T>(&m_Y1, prefix + "crop_bottom", 1)); m_Params.push_back(ParamWithName<T>(&m_Y1, prefix + "crop_bottom", 1));
m_Params.push_back(ParamWithName<T>(&m_S, prefix + "crop_scatter_area", 0, REAL, -1, 1)); m_Params.push_back(ParamWithName<T>(&m_S, prefix + "crop_scatter_area", 0, eParamType::REAL, -1, 1));
m_Params.push_back(ParamWithName<T>(&m_Z, prefix + "crop_zero", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_Z, prefix + "crop_zero", 0, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(true, &m_X0_, prefix + "crop_x0_"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_X0_, prefix + "crop_x0_"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_Y0_, prefix + "crop_y0_")); m_Params.push_back(ParamWithName<T>(true, &m_Y0_, prefix + "crop_y0_"));
m_Params.push_back(ParamWithName<T>(true, &m_X1_, prefix + "crop_x1_")); m_Params.push_back(ParamWithName<T>(true, &m_X1_, prefix + "crop_x1_"));
@ -691,7 +691,7 @@ template <typename T>
class EMBER_API BCircleVariation : public ParametricVariation<T> class EMBER_API BCircleVariation : public ParametricVariation<T>
{ {
public: public:
BCircleVariation(T weight = 1.0) : ParametricVariation<T>("bcircle", VAR_BCIRCLE, weight) BCircleVariation(T weight = 1.0) : ParametricVariation<T>("bcircle", eVariationId::VAR_BCIRCLE, weight)
{ {
Init(); Init();
} }
@ -800,7 +800,7 @@ template <typename T>
class EMBER_API BlurLinearVariation : public ParametricVariation<T> class EMBER_API BlurLinearVariation : public ParametricVariation<T>
{ {
public: public:
BlurLinearVariation(T weight = 1.0) : ParametricVariation<T>("blur_linear", VAR_BLUR_LINEAR, weight) BlurLinearVariation(T weight = 1.0) : ParametricVariation<T>("blur_linear", eVariationId::VAR_BLUR_LINEAR, weight)
{ {
Init(); Init();
} }
@ -850,7 +850,7 @@ protected:
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_BlurLinearLength, prefix + "blur_linear_length")); m_Params.push_back(ParamWithName<T>(&m_BlurLinearLength, prefix + "blur_linear_length"));
m_Params.push_back(ParamWithName<T>(&m_BlurLinearAngle, prefix + "blur_linear_angle", 0, REAL_CYCLIC, 0, T(M_2PI))); m_Params.push_back(ParamWithName<T>(&m_BlurLinearAngle, prefix + "blur_linear_angle", 0, eParamType::REAL_CYCLIC, 0, T(M_2PI)));
m_Params.push_back(ParamWithName<T>(true, &m_S, prefix + "blur_linear_s"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_S, prefix + "blur_linear_s"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_C, prefix + "blur_linear_c")); m_Params.push_back(ParamWithName<T>(true, &m_C, prefix + "blur_linear_c"));
} }
@ -869,7 +869,7 @@ template <typename T>
class EMBER_API BlurSquareVariation : public ParametricVariation<T> class EMBER_API BlurSquareVariation : public ParametricVariation<T>
{ {
public: public:
BlurSquareVariation(T weight = 1.0) : ParametricVariation<T>("blur_square", VAR_BLUR_SQUARE, weight) BlurSquareVariation(T weight = 1.0) : ParametricVariation<T>("blur_square", eVariationId::VAR_BLUR_SQUARE, weight)
{ {
Init(); Init();
} }
@ -926,13 +926,13 @@ template <typename T>
class EMBER_API FlattenVariation : public Variation<T> class EMBER_API FlattenVariation : public Variation<T>
{ {
public: public:
FlattenVariation(T weight = 1.0) : Variation<T>("flatten", VAR_FLATTEN, weight) { } FlattenVariation(T weight = 1.0) : Variation<T>("flatten", eVariationId::VAR_FLATTEN, weight) { }
VARCOPY(FlattenVariation) VARCOPY(FlattenVariation)
virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
{ {
if (m_VarType == VARTYPE_REG)//Rare and different usage of in/out. if (m_VarType == eVariationType::VARTYPE_REG)//Rare and different usage of in/out.
{ {
helper.Out.x = helper.Out.y = helper.Out.z = 0; helper.Out.x = helper.Out.y = helper.Out.z = 0;
outPoint.m_Z = 0; outPoint.m_Z = 0;
@ -949,7 +949,7 @@ public:
{ {
ostringstream ss; ostringstream ss;
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
ss << "\t{\n" ss << "\t{\n"
<< "\t\tvOut.x = 0;\n" << "\t\tvOut.x = 0;\n"
@ -979,7 +979,7 @@ template <typename T>
class EMBER_API ZblurVariation : public Variation<T> class EMBER_API ZblurVariation : public Variation<T>
{ {
public: public:
ZblurVariation(T weight = 1.0) : Variation<T>("zblur", VAR_ZBLUR, weight) { } ZblurVariation(T weight = 1.0) : Variation<T>("zblur", eVariationId::VAR_ZBLUR, weight) { }
VARCOPY(ZblurVariation) VARCOPY(ZblurVariation)
@ -1011,7 +1011,7 @@ template <typename T>
class EMBER_API ZScaleVariation : public Variation<T> class EMBER_API ZScaleVariation : public Variation<T>
{ {
public: public:
ZScaleVariation(T weight = 1.0) : Variation<T>("zscale", VAR_ZSCALE, weight) { } ZScaleVariation(T weight = 1.0) : Variation<T>("zscale", eVariationId::VAR_ZSCALE, weight) { }
VARCOPY(ZScaleVariation) VARCOPY(ZScaleVariation)
@ -1043,7 +1043,7 @@ template <typename T>
class EMBER_API ZTranslateVariation : public Variation<T> class EMBER_API ZTranslateVariation : public Variation<T>
{ {
public: public:
ZTranslateVariation(T weight = 1.0) : Variation<T>("ztranslate", VAR_ZTRANSLATE, weight) { } ZTranslateVariation(T weight = 1.0) : Variation<T>("ztranslate", eVariationId::VAR_ZTRANSLATE, weight) { }
VARCOPY(ZTranslateVariation) VARCOPY(ZTranslateVariation)
@ -1075,13 +1075,13 @@ template <typename T>
class EMBER_API ZConeVariation : public Variation<T> class EMBER_API ZConeVariation : public Variation<T>
{ {
public: public:
ZConeVariation(T weight = 1.0) : Variation<T>("zcone", VAR_ZCONE, weight, true, true) { } ZConeVariation(T weight = 1.0) : Variation<T>("zcone", eVariationId::VAR_ZCONE, weight, true, true) { }
VARCOPY(ZConeVariation) VARCOPY(ZConeVariation)
virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
{ {
if (m_VarType == VARTYPE_REG)//Rare and different usage of in/out. if (m_VarType == eVariationType::VARTYPE_REG)//Rare and different usage of in/out.
{ {
helper.Out.x = helper.Out.y = 0; helper.Out.x = helper.Out.y = 0;
} }
@ -1101,7 +1101,7 @@ public:
ss << "\t{\n"; ss << "\t{\n";
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
ss << "\t\tvOut.x = vOut.y = 0;\n"; ss << "\t\tvOut.x = vOut.y = 0;\n";
} }
@ -1125,7 +1125,7 @@ template <typename T>
class EMBER_API Blur3DVariation : public Variation<T> class EMBER_API Blur3DVariation : public Variation<T>
{ {
public: public:
Blur3DVariation(T weight = 1.0) : Variation<T>("blur3D", VAR_BLUR3D, weight) { } Blur3DVariation(T weight = 1.0) : Variation<T>("blur3D", eVariationId::VAR_BLUR3D, weight) { }
VARCOPY(Blur3DVariation) VARCOPY(Blur3DVariation)
@ -1174,7 +1174,7 @@ template <typename T>
class EMBER_API Spherical3DVariation : public Variation<T> class EMBER_API Spherical3DVariation : public Variation<T>
{ {
public: public:
Spherical3DVariation(T weight = 1.0) : Variation<T>("Spherical3D", VAR_SPHERICAL3D, weight, true) { } Spherical3DVariation(T weight = 1.0) : Variation<T>("Spherical3D", eVariationId::VAR_SPHERICAL3D, weight, true) { }
VARCOPY(Spherical3DVariation) VARCOPY(Spherical3DVariation)
@ -1216,7 +1216,7 @@ template <typename T>
class EMBER_API Curl3DVariation : public ParametricVariation<T> class EMBER_API Curl3DVariation : public ParametricVariation<T>
{ {
public: public:
Curl3DVariation(T weight = 1.0) : ParametricVariation<T>("curl3D", VAR_CURL3D, weight, true) Curl3DVariation(T weight = 1.0) : ParametricVariation<T>("curl3D", eVariationId::VAR_CURL3D, weight, true)
{ {
Init(); Init();
} }
@ -1304,7 +1304,7 @@ template <typename T>
class EMBER_API Disc3DVariation : public ParametricVariation<T> class EMBER_API Disc3DVariation : public ParametricVariation<T>
{ {
public: public:
Disc3DVariation(T weight = 1.0) : ParametricVariation<T>("disc3d", VAR_DISC3D, weight, true, true, false, true, false) Disc3DVariation(T weight = 1.0) : ParametricVariation<T>("disc3d", eVariationId::VAR_DISC3D, weight, true, true, false, true, false)
{ {
Init(); Init();
} }
@ -1372,7 +1372,7 @@ template <typename T>
class EMBER_API Boarders2Variation : public ParametricVariation<T> class EMBER_API Boarders2Variation : public ParametricVariation<T>
{ {
public: public:
Boarders2Variation(T weight = 1.0) : ParametricVariation<T>("boarders2", VAR_BOARDERS2, weight) Boarders2Variation(T weight = 1.0) : ParametricVariation<T>("boarders2", eVariationId::VAR_BOARDERS2, weight)
{ {
Init(); Init();
} }
@ -1525,7 +1525,7 @@ template <typename T>
class EMBER_API CardioidVariation : public ParametricVariation<T> class EMBER_API CardioidVariation : public ParametricVariation<T>
{ {
public: public:
CardioidVariation(T weight = 1.0) : ParametricVariation<T>("cardioid", VAR_CARDIOID, weight, true, true, true, false, true) CardioidVariation(T weight = 1.0) : ParametricVariation<T>("cardioid", eVariationId::VAR_CARDIOID, weight, true, true, true, false, true)
{ {
Init(); Init();
} }
@ -1580,7 +1580,7 @@ template <typename T>
class EMBER_API ChecksVariation : public ParametricVariation<T> class EMBER_API ChecksVariation : public ParametricVariation<T>
{ {
public: public:
ChecksVariation(T weight = 1.0) : ParametricVariation<T>("checks", VAR_CHECKS, weight) ChecksVariation(T weight = 1.0) : ParametricVariation<T>("checks", eVariationId::VAR_CHECKS, weight)
{ {
Init(); Init();
} }
@ -1703,7 +1703,7 @@ template <typename T>
class EMBER_API CirclizeVariation : public ParametricVariation<T> class EMBER_API CirclizeVariation : public ParametricVariation<T>
{ {
public: public:
CirclizeVariation(T weight = 1.0) : ParametricVariation<T>("circlize", VAR_CIRCLIZE, weight) CirclizeVariation(T weight = 1.0) : ParametricVariation<T>("circlize", eVariationId::VAR_CIRCLIZE, weight)
{ {
Init(); Init();
} }
@ -1816,7 +1816,7 @@ template <typename T>
class EMBER_API Circlize2Variation : public ParametricVariation<T> class EMBER_API Circlize2Variation : public ParametricVariation<T>
{ {
public: public:
Circlize2Variation(T weight = 1.0) : ParametricVariation<T>("circlize2", VAR_CIRCLIZE2, weight) Circlize2Variation(T weight = 1.0) : ParametricVariation<T>("circlize2", eVariationId::VAR_CIRCLIZE2, weight)
{ {
Init(); Init();
} }
@ -1921,7 +1921,7 @@ template <typename T>
class EMBER_API CosWrapVariation : public ParametricVariation<T> class EMBER_API CosWrapVariation : public ParametricVariation<T>
{ {
public: public:
CosWrapVariation(T weight = 1.0) : ParametricVariation<T>("coswrap", VAR_COS_WRAP, weight) CosWrapVariation(T weight = 1.0) : ParametricVariation<T>("coswrap", eVariationId::VAR_COS_WRAP, weight)
{ {
Init(); Init();
} }
@ -1939,7 +1939,7 @@ public:
helper.Out.x = -1 + m_Vv2 * Lerp<T>(Lerp(x, Fosc(x, T(4), m_Px), oscnapx), Fosc(bx, T(4), m_Px), oscnapx);//Original did a direct assignment to outPoint, which is incompatible with Ember's design. helper.Out.x = -1 + m_Vv2 * Lerp<T>(Lerp(x, Fosc(x, T(4), m_Px), oscnapx), Fosc(bx, T(4), m_Px), oscnapx);//Original did a direct assignment to outPoint, which is incompatible with Ember's design.
helper.Out.y = -1 + m_Vv2 * Lerp<T>(Lerp(y, Fosc(y, T(4), m_Py), oscnapy), Fosc(by, T(4), m_Py), oscnapy); helper.Out.y = -1 + m_Vv2 * Lerp<T>(Lerp(y, Fosc(y, T(4), m_Py), oscnapy), Fosc(by, T(4), m_Py), oscnapy);
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -1970,7 +1970,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = -1 + " << vv2 << " * Lerp(Lerp(x, Fosc(x, 4, " << px << "), oscnapx), Fosc(bx, 4, " << px << "), oscnapx);\n" << "\t\tvOut.x = -1 + " << vv2 << " * Lerp(Lerp(x, Fosc(x, 4, " << px << "), oscnapx), Fosc(bx, 4, " << px << "), oscnapx);\n"
<< "\t\tvOut.y = -1 + " << vv2 << " * Lerp(Lerp(y, Fosc(y, 4, " << py << "), oscnapy), Fosc(by, 4, " << py << "), oscnapy);\n" << "\t\tvOut.y = -1 + " << vv2 << " * Lerp(Lerp(y, Fosc(y, 4, " << py << "), oscnapy), Fosc(by, 4, " << py << "), oscnapy);\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -1997,11 +1997,11 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Repeat, prefix + "coswrap_repeat", 1, INTEGER_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Repeat, prefix + "coswrap_repeat", 1, eParamType::INTEGER_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_AmountX, prefix + "coswrap_amount_x")); m_Params.push_back(ParamWithName<T>(&m_AmountX, prefix + "coswrap_amount_x"));
m_Params.push_back(ParamWithName<T>(&m_AmountY, prefix + "coswrap_amount_y")); m_Params.push_back(ParamWithName<T>(&m_AmountY, prefix + "coswrap_amount_y"));
m_Params.push_back(ParamWithName<T>(&m_PhaseX, prefix + "coswrap_phase_x", 0, REAL_CYCLIC, -1, 1)); m_Params.push_back(ParamWithName<T>(&m_PhaseX, prefix + "coswrap_phase_x", 0, eParamType::REAL_CYCLIC, -1, 1));
m_Params.push_back(ParamWithName<T>(&m_PhaseY, prefix + "coswrap_phase_y", 0, REAL_CYCLIC, -1, 1)); m_Params.push_back(ParamWithName<T>(&m_PhaseY, prefix + "coswrap_phase_y", 0, eParamType::REAL_CYCLIC, -1, 1));
m_Params.push_back(ParamWithName<T>(true, &m_Ax, prefix + "coswrap_ax"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_Ax, prefix + "coswrap_ax"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_Ay, prefix + "coswrap_ay")); m_Params.push_back(ParamWithName<T>(true, &m_Ay, prefix + "coswrap_ay"));
m_Params.push_back(ParamWithName<T>(true, &m_Px, prefix + "coswrap_px")); m_Params.push_back(ParamWithName<T>(true, &m_Px, prefix + "coswrap_px"));
@ -2034,7 +2034,7 @@ template <typename T>
class EMBER_API DeltaAVariation : public Variation<T> class EMBER_API DeltaAVariation : public Variation<T>
{ {
public: public:
DeltaAVariation(T weight = 1.0) : Variation<T>("deltaa", VAR_DELTA_A, weight) { } DeltaAVariation(T weight = 1.0) : Variation<T>("deltaa", eVariationId::VAR_DELTA_A, weight) { }
VARCOPY(DeltaAVariation) VARCOPY(DeltaAVariation)
@ -2077,7 +2077,7 @@ template <typename T>
class EMBER_API ExpoVariation : public ParametricVariation<T> class EMBER_API ExpoVariation : public ParametricVariation<T>
{ {
public: public:
ExpoVariation(T weight = 1.0) : ParametricVariation<T>("expo", VAR_EXPO, weight) ExpoVariation(T weight = 1.0) : ParametricVariation<T>("expo", eVariationId::VAR_EXPO, weight)
{ {
Init(); Init();
} }
@ -2153,7 +2153,7 @@ template <typename T>
class EMBER_API ExtrudeVariation : public ParametricVariation<T> class EMBER_API ExtrudeVariation : public ParametricVariation<T>
{ {
public: public:
ExtrudeVariation(T weight = 1.0) : ParametricVariation<T>("extrude", VAR_EXTRUDE, weight) ExtrudeVariation(T weight = 1.0) : ParametricVariation<T>("extrude", eVariationId::VAR_EXTRUDE, weight)
{ {
Init(); Init();
} }
@ -2162,7 +2162,7 @@ public:
virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
{ {
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
helper.Out.x = helper.Out.y = helper.Out.z = 0; helper.Out.x = helper.Out.y = helper.Out.z = 0;
@ -2191,7 +2191,7 @@ public:
string index = ss2.str(); string index = ss2.str();
string rootFace = "parVars[" + ToUpper(m_Params[i++].Name()) + index; string rootFace = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
ss << "\t{\n" ss << "\t{\n"
<< "\t\tvOut.x = vOut.y = vOut.z = 0;\n" << "\t\tvOut.x = vOut.y = vOut.z = 0;\n"
@ -2238,7 +2238,7 @@ template <typename T>
class EMBER_API FDiscVariation : public Variation<T> class EMBER_API FDiscVariation : public Variation<T>
{ {
public: public:
FDiscVariation(T weight = 1.0) : Variation<T>("fdisc", VAR_FDISC, weight, true, true, false, false, true) { } FDiscVariation(T weight = 1.0) : Variation<T>("fdisc", eVariationId::VAR_FDISC, weight, true, true, false, false, true) { }
VARCOPY(FDiscVariation) VARCOPY(FDiscVariation)
@ -2281,7 +2281,7 @@ template <typename T>
class EMBER_API FibonacciVariation : public ParametricVariation<T> class EMBER_API FibonacciVariation : public ParametricVariation<T>
{ {
public: public:
FibonacciVariation(T weight = 1.0) : ParametricVariation<T>("fibonacci", VAR_FIBONACCI, weight) FibonacciVariation(T weight = 1.0) : ParametricVariation<T>("fibonacci", eVariationId::VAR_FIBONACCI, weight)
{ {
Init(); Init();
} }
@ -2360,7 +2360,7 @@ template <typename T>
class EMBER_API Fibonacci2Variation : public ParametricVariation<T> class EMBER_API Fibonacci2Variation : public ParametricVariation<T>
{ {
public: public:
Fibonacci2Variation(T weight = 1.0) : ParametricVariation<T>("fibonacci2", VAR_FIBONACCI2, weight) Fibonacci2Variation(T weight = 1.0) : ParametricVariation<T>("fibonacci2", eVariationId::VAR_FIBONACCI2, weight)
{ {
Init(); Init();
} }
@ -2445,7 +2445,7 @@ template <typename T>
class EMBER_API GlynniaVariation : public ParametricVariation<T> class EMBER_API GlynniaVariation : public ParametricVariation<T>
{ {
public: public:
GlynniaVariation(T weight = 1.0) : ParametricVariation<T>("glynnia", VAR_GLYNNIA, weight, true, true) GlynniaVariation(T weight = 1.0) : ParametricVariation<T>("glynnia", eVariationId::VAR_GLYNNIA, weight, true, true)
{ {
Init(); Init();
} }
@ -2567,7 +2567,7 @@ template <typename T>
class EMBER_API GridOutVariation : public Variation<T> class EMBER_API GridOutVariation : public Variation<T>
{ {
public: public:
GridOutVariation(T weight = 1.0) : Variation<T>("gridout", VAR_GRIDOUT, weight) { } GridOutVariation(T weight = 1.0) : Variation<T>("gridout", eVariationId::VAR_GRIDOUT, weight) { }
VARCOPY(GridOutVariation) VARCOPY(GridOutVariation)
@ -2725,7 +2725,7 @@ template <typename T>
class EMBER_API HoleVariation : public ParametricVariation<T> class EMBER_API HoleVariation : public ParametricVariation<T>
{ {
public: public:
HoleVariation(T weight = 1.0) : ParametricVariation<T>("hole", VAR_HOLE, weight, true, true, true, false, true) HoleVariation(T weight = 1.0) : ParametricVariation<T>("hole", eVariationId::VAR_HOLE, weight, true, true, true, false, true)
{ {
Init(); Init();
} }
@ -2778,7 +2778,7 @@ protected:
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_A, prefix + "hole_a", 1)); m_Params.push_back(ParamWithName<T>(&m_A, prefix + "hole_a", 1));
m_Params.push_back(ParamWithName<T>(&m_Inside, prefix + "hole_inside", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_Inside, prefix + "hole_inside", 0, eParamType::INTEGER, 0, 1));
} }
private: private:
@ -2793,7 +2793,7 @@ template <typename T>
class EMBER_API HypertileVariation : public ParametricVariation<T> class EMBER_API HypertileVariation : public ParametricVariation<T>
{ {
public: public:
HypertileVariation(T weight = 1.0) : ParametricVariation<T>("hypertile", VAR_HYPERTILE, weight) HypertileVariation(T weight = 1.0) : ParametricVariation<T>("hypertile", eVariationId::VAR_HYPERTILE, weight)
{ {
Init(); Init();
} }
@ -2810,7 +2810,7 @@ public:
helper.Out.x = vr * (a * c + b * d); helper.Out.x = vr * (a * c + b * d);
helper.Out.y = vr * (b * c - a * d); helper.Out.y = vr * (b * c - a * d);
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -2834,7 +2834,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = vr * (a * c + b * d);\n" << "\t\tvOut.x = vr * (a * c + b * d);\n"
<< "\t\tvOut.y = vr * (b * c - a * d);\n" << "\t\tvOut.y = vr * (b * c - a * d);\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -2862,9 +2862,9 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_P, prefix + "hypertile_p", 3, INTEGER, 3, T(0x7fffffff))); m_Params.push_back(ParamWithName<T>(&m_P, prefix + "hypertile_p", 3, eParamType::INTEGER, 3, T(0x7fffffff)));
m_Params.push_back(ParamWithName<T>(&m_Q, prefix + "hypertile_q", 7, INTEGER, 3, T(0x7fffffff))); m_Params.push_back(ParamWithName<T>(&m_Q, prefix + "hypertile_q", 7, eParamType::INTEGER, 3, T(0x7fffffff)));
m_Params.push_back(ParamWithName<T>(&m_N, prefix + "hypertile_n", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_N, prefix + "hypertile_n", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(true, &m_Real, prefix + "hypertile_real"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_Real, prefix + "hypertile_real"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_Imag, prefix + "hypertile_imag")); m_Params.push_back(ParamWithName<T>(true, &m_Imag, prefix + "hypertile_imag"));
} }
@ -2884,7 +2884,7 @@ template <typename T>
class EMBER_API Hypertile1Variation : public ParametricVariation<T> class EMBER_API Hypertile1Variation : public ParametricVariation<T>
{ {
public: public:
Hypertile1Variation(T weight = 1.0) : ParametricVariation<T>("hypertile1", VAR_HYPERTILE1, weight) Hypertile1Variation(T weight = 1.0) : ParametricVariation<T>("hypertile1", eVariationId::VAR_HYPERTILE1, weight)
{ {
Init(); Init();
} }
@ -2906,7 +2906,7 @@ public:
helper.Out.x = vr * (a * c + b * d); helper.Out.x = vr * (a * c + b * d);
helper.Out.y = vr * (b * c - a * d); helper.Out.y = vr * (b * c - a * d);
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -2934,7 +2934,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = vr * (a * c + b * d);\n" << "\t\tvOut.x = vr * (a * c + b * d);\n"
<< "\t\tvOut.y = vr * (b * c - a * d);\n" << "\t\tvOut.y = vr * (b * c - a * d);\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -2959,8 +2959,8 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_P, prefix + "hypertile1_p", 3, INTEGER, 3, T(0x7fffffff))); m_Params.push_back(ParamWithName<T>(&m_P, prefix + "hypertile1_p", 3, eParamType::INTEGER, 3, T(0x7fffffff)));
m_Params.push_back(ParamWithName<T>(&m_Q, prefix + "hypertile1_q", 7, INTEGER, 3, T(0x7fffffff))); m_Params.push_back(ParamWithName<T>(&m_Q, prefix + "hypertile1_q", 7, eParamType::INTEGER, 3, T(0x7fffffff)));
m_Params.push_back(ParamWithName<T>(true, &m_Pa, prefix + "hypertile1_pa"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_Pa, prefix + "hypertile1_pa"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_R, prefix + "hypertile1_r")); m_Params.push_back(ParamWithName<T>(true, &m_R, prefix + "hypertile1_r"));
} }
@ -2979,7 +2979,7 @@ template <typename T>
class EMBER_API Hypertile2Variation : public ParametricVariation<T> class EMBER_API Hypertile2Variation : public ParametricVariation<T>
{ {
public: public:
Hypertile2Variation(T weight = 1.0) : ParametricVariation<T>("hypertile2", VAR_HYPERTILE2, weight) Hypertile2Variation(T weight = 1.0) : ParametricVariation<T>("hypertile2", eVariationId::VAR_HYPERTILE2, weight)
{ {
Init(); Init();
} }
@ -3001,7 +3001,7 @@ public:
helper.Out.x = vr * (x * cosa + y * sina); helper.Out.x = vr * (x * cosa + y * sina);
helper.Out.y = vr * (y * cosa - x * sina); helper.Out.y = vr * (y * cosa - x * sina);
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -3029,7 +3029,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = vr * (x * cosa + y * sina);\n" << "\t\tvOut.x = vr * (x * cosa + y * sina);\n"
<< "\t\tvOut.y = vr * (y * cosa - x * sina);\n" << "\t\tvOut.y = vr * (y * cosa - x * sina);\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -3054,8 +3054,8 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_P, prefix + "hypertile2_p", 3, INTEGER, 3, T(0x7fffffff))); m_Params.push_back(ParamWithName<T>(&m_P, prefix + "hypertile2_p", 3, eParamType::INTEGER, 3, T(0x7fffffff)));
m_Params.push_back(ParamWithName<T>(&m_Q, prefix + "hypertile2_q", 7, INTEGER, 3, T(0x7fffffff))); m_Params.push_back(ParamWithName<T>(&m_Q, prefix + "hypertile2_q", 7, eParamType::INTEGER, 3, T(0x7fffffff)));
m_Params.push_back(ParamWithName<T>(true, &m_Pa, prefix + "hypertile2_pa"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_Pa, prefix + "hypertile2_pa"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_R, prefix + "hypertile2_r")); m_Params.push_back(ParamWithName<T>(true, &m_R, prefix + "hypertile2_r"));
} }
@ -3074,7 +3074,7 @@ template <typename T>
class EMBER_API Hypertile3DVariation : public ParametricVariation<T> class EMBER_API Hypertile3DVariation : public ParametricVariation<T>
{ {
public: public:
Hypertile3DVariation(T weight = 1.0) : ParametricVariation<T>("hypertile3D", VAR_HYPERTILE3D, weight, true) Hypertile3DVariation(T weight = 1.0) : ParametricVariation<T>("hypertile3D", eVariationId::VAR_HYPERTILE3D, weight, true)
{ {
Init(); Init();
} }
@ -3155,9 +3155,9 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_P, prefix + "hypertile3D_p", 3, INTEGER, 3, T(0x7fffffff))); m_Params.push_back(ParamWithName<T>(&m_P, prefix + "hypertile3D_p", 3, eParamType::INTEGER, 3, T(0x7fffffff)));
m_Params.push_back(ParamWithName<T>(&m_Q, prefix + "hypertile3D_q", 7, INTEGER, 3, T(0x7fffffff))); m_Params.push_back(ParamWithName<T>(&m_Q, prefix + "hypertile3D_q", 7, eParamType::INTEGER, 3, T(0x7fffffff)));
m_Params.push_back(ParamWithName<T>(&m_N, prefix + "hypertile3D_n", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_N, prefix + "hypertile3D_n", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(true, &m_Cx, prefix + "hypertile3D_cx"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_Cx, prefix + "hypertile3D_cx"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_Cy, prefix + "hypertile3D_cy")); m_Params.push_back(ParamWithName<T>(true, &m_Cy, prefix + "hypertile3D_cy"));
m_Params.push_back(ParamWithName<T>(true, &m_Cz, prefix + "hypertile3D_cz")); m_Params.push_back(ParamWithName<T>(true, &m_Cz, prefix + "hypertile3D_cz"));
@ -3193,7 +3193,7 @@ template <typename T>
class EMBER_API Hypertile3D1Variation : public ParametricVariation<T> class EMBER_API Hypertile3D1Variation : public ParametricVariation<T>
{ {
public: public:
Hypertile3D1Variation(T weight = 1.0) : ParametricVariation<T>("hypertile3D1", VAR_HYPERTILE3D1, weight, true) Hypertile3D1Variation(T weight = 1.0) : ParametricVariation<T>("hypertile3D1", eVariationId::VAR_HYPERTILE3D1, weight, true)
{ {
Init(); Init();
} }
@ -3272,8 +3272,8 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_P, prefix + "hypertile3D1_p", 3, INTEGER, 3, T(0x7fffffff))); m_Params.push_back(ParamWithName<T>(&m_P, prefix + "hypertile3D1_p", 3, eParamType::INTEGER, 3, T(0x7fffffff)));
m_Params.push_back(ParamWithName<T>(&m_Q, prefix + "hypertile3D1_q", 7, INTEGER, 3, T(0x7fffffff))); m_Params.push_back(ParamWithName<T>(&m_Q, prefix + "hypertile3D1_q", 7, eParamType::INTEGER, 3, T(0x7fffffff)));
m_Params.push_back(ParamWithName<T>(true, &m_Pa, prefix + "hypertile3D1_pa"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_Pa, prefix + "hypertile3D1_pa"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_R, prefix + "hypertile3D1_r")); m_Params.push_back(ParamWithName<T>(true, &m_R, prefix + "hypertile3D1_r"));
m_Params.push_back(ParamWithName<T>(true, &m_C2, prefix + "hypertile3D1_c2")); m_Params.push_back(ParamWithName<T>(true, &m_C2, prefix + "hypertile3D1_c2"));
@ -3296,7 +3296,7 @@ template <typename T>
class EMBER_API Hypertile3D2Variation : public ParametricVariation<T> class EMBER_API Hypertile3D2Variation : public ParametricVariation<T>
{ {
public: public:
Hypertile3D2Variation(T weight = 1.0) : ParametricVariation<T>("hypertile3D2", VAR_HYPERTILE3D2, weight, true) Hypertile3D2Variation(T weight = 1.0) : ParametricVariation<T>("hypertile3D2", eVariationId::VAR_HYPERTILE3D2, weight, true)
{ {
Init(); Init();
} }
@ -3379,8 +3379,8 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_P, prefix + "hypertile3D2_p", 3, INTEGER, 3, T(0x7fffffff))); m_Params.push_back(ParamWithName<T>(&m_P, prefix + "hypertile3D2_p", 3, eParamType::INTEGER, 3, T(0x7fffffff)));
m_Params.push_back(ParamWithName<T>(&m_Q, prefix + "hypertile3D2_q", 7, INTEGER, 3, T(0x7fffffff))); m_Params.push_back(ParamWithName<T>(&m_Q, prefix + "hypertile3D2_q", 7, eParamType::INTEGER, 3, T(0x7fffffff)));
m_Params.push_back(ParamWithName<T>(true, &m_Pa, prefix + "hypertile3D2_pa"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_Pa, prefix + "hypertile3D2_pa"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_Cx, prefix + "hypertile3D2_cx")); m_Params.push_back(ParamWithName<T>(true, &m_Cx, prefix + "hypertile3D2_cx"));
m_Params.push_back(ParamWithName<T>(true, &m_C2, prefix + "hypertile3D2_c2")); m_Params.push_back(ParamWithName<T>(true, &m_C2, prefix + "hypertile3D2_c2"));
@ -3409,7 +3409,7 @@ template <typename T>
class EMBER_API IDiscVariation : public ParametricVariation<T> class EMBER_API IDiscVariation : public ParametricVariation<T>
{ {
public: public:
IDiscVariation(T weight = 1.0) : ParametricVariation<T>("idisc", VAR_IDISC, weight, true, true, false, false, true) IDiscVariation(T weight = 1.0) : ParametricVariation<T>("idisc", eVariationId::VAR_IDISC, weight, true, true, false, false, true)
{ {
Init(); Init();
} }
@ -3475,7 +3475,7 @@ template <typename T>
class EMBER_API Julian2Variation : public ParametricVariation<T> class EMBER_API Julian2Variation : public ParametricVariation<T>
{ {
public: public:
Julian2Variation(T weight = 1.0) : ParametricVariation<T>("julian2", VAR_JULIAN2, weight) Julian2Variation(T weight = 1.0) : ParametricVariation<T>("julian2", eVariationId::VAR_JULIAN2, weight)
{ {
Init(); Init();
} }
@ -3550,7 +3550,7 @@ protected:
m_Params.push_back(ParamWithName<T>(&m_D, prefix + "julian2_d", 1)); m_Params.push_back(ParamWithName<T>(&m_D, prefix + "julian2_d", 1));
m_Params.push_back(ParamWithName<T>(&m_E, prefix + "julian2_e")); m_Params.push_back(ParamWithName<T>(&m_E, prefix + "julian2_e"));
m_Params.push_back(ParamWithName<T>(&m_F, prefix + "julian2_f")); m_Params.push_back(ParamWithName<T>(&m_F, prefix + "julian2_f"));
m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "julian2_power", 2, INTEGER_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "julian2_power", 2, eParamType::INTEGER_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_Dist, prefix + "julian2_dist", 1)); m_Params.push_back(ParamWithName<T>(&m_Dist, prefix + "julian2_dist", 1));
m_Params.push_back(ParamWithName<T>(true, &m_AbsN, prefix + "julian2_absn"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_AbsN, prefix + "julian2_absn"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_Cn, prefix + "julian2_cn")); m_Params.push_back(ParamWithName<T>(true, &m_Cn, prefix + "julian2_cn"));
@ -3576,7 +3576,7 @@ template <typename T>
class EMBER_API JuliaQVariation : public ParametricVariation<T> class EMBER_API JuliaQVariation : public ParametricVariation<T>
{ {
public: public:
JuliaQVariation(T weight = 1.0) : ParametricVariation<T>("juliaq", VAR_JULIAQ, weight, true, false, false, false, true) JuliaQVariation(T weight = 1.0) : ParametricVariation<T>("juliaq", eVariationId::VAR_JULIAQ, weight, true, false, false, false, true)
{ {
Init(); Init();
} }
@ -3592,7 +3592,7 @@ public:
helper.Out.x = r * cosa; helper.Out.x = r * cosa;
helper.Out.y = r * sina; helper.Out.y = r * sina;
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -3615,7 +3615,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = r * cosa;\n" << "\t\tvOut.x = r * cosa;\n"
<< "\t\tvOut.y = r * sina;\n" << "\t\tvOut.y = r * sina;\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -3634,8 +3634,8 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "juliaq_power", 3, INTEGER_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "juliaq_power", 3, eParamType::INTEGER_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_Divisor, prefix + "juliaq_divisor", 2, INTEGER_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Divisor, prefix + "juliaq_divisor", 2, eParamType::INTEGER_NONZERO));
m_Params.push_back(ParamWithName<T>(true, &m_HalfInvPower, prefix + "juliaq_half_inv_power"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_HalfInvPower, prefix + "juliaq_half_inv_power"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_InvPower, prefix + "juliaq_inv_power")); m_Params.push_back(ParamWithName<T>(true, &m_InvPower, prefix + "juliaq_inv_power"));
m_Params.push_back(ParamWithName<T>(true, &m_InvPower2pi, prefix + "juliaq_inv_power_2pi")); m_Params.push_back(ParamWithName<T>(true, &m_InvPower2pi, prefix + "juliaq_inv_power_2pi"));
@ -3656,7 +3656,7 @@ template <typename T>
class EMBER_API MurlVariation : public ParametricVariation<T> class EMBER_API MurlVariation : public ParametricVariation<T>
{ {
public: public:
MurlVariation(T weight = 1.0) : ParametricVariation<T>("murl", VAR_MURL, weight, true, false, false, false, true) MurlVariation(T weight = 1.0) : ParametricVariation<T>("murl", eVariationId::VAR_MURL, weight, true, false, false, false, true)
{ {
Init(); Init();
} }
@ -3725,7 +3725,7 @@ protected:
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_C, prefix + "murl_c")); m_Params.push_back(ParamWithName<T>(&m_C, prefix + "murl_c"));
m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "murl_power", 2, INTEGER, 2, T(0x7fffffff))); m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "murl_power", 2, eParamType::INTEGER, 2, T(0x7fffffff)));
m_Params.push_back(ParamWithName<T>(true, &m_Cp, prefix + "murl_cp"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_Cp, prefix + "murl_cp"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_P2, prefix + "murl_p2")); m_Params.push_back(ParamWithName<T>(true, &m_P2, prefix + "murl_p2"));
m_Params.push_back(ParamWithName<T>(true, &m_Vp, prefix + "murl_vp")); m_Params.push_back(ParamWithName<T>(true, &m_Vp, prefix + "murl_vp"));
@ -3746,7 +3746,7 @@ template <typename T>
class EMBER_API Murl2Variation : public ParametricVariation<T> class EMBER_API Murl2Variation : public ParametricVariation<T>
{ {
public: public:
Murl2Variation(T weight = 1.0) : ParametricVariation<T>("murl2", VAR_MURL2, weight, true, false, false, false, true) Murl2Variation(T weight = 1.0) : ParametricVariation<T>("murl2", eVariationId::VAR_MURL2, weight, true, false, false, false, true)
{ {
Init(); Init();
} }
@ -3832,8 +3832,8 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_C, prefix + "murl2_c", 0, REAL, -1, 1)); m_Params.push_back(ParamWithName<T>(&m_C, prefix + "murl2_c", 0, eParamType::REAL, -1, 1));
m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "murl2_power", 1, INTEGER_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "murl2_power", 1, eParamType::INTEGER_NONZERO));
m_Params.push_back(ParamWithName<T>(true, &m_P2, prefix + "murl2_p2"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_P2, prefix + "murl2_p2"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_InvP, prefix + "murl2_invp")); m_Params.push_back(ParamWithName<T>(true, &m_InvP, prefix + "murl2_invp"));
m_Params.push_back(ParamWithName<T>(true, &m_InvP2, prefix + "murl2_invp2")); m_Params.push_back(ParamWithName<T>(true, &m_InvP2, prefix + "murl2_invp2"));
@ -3856,7 +3856,7 @@ template <typename T>
class EMBER_API NPolarVariation : public ParametricVariation<T> class EMBER_API NPolarVariation : public ParametricVariation<T>
{ {
public: public:
NPolarVariation(T weight = 1.0) : ParametricVariation<T>("npolar", VAR_NPOLAR, weight, true, false, false, true, false) NPolarVariation(T weight = 1.0) : ParametricVariation<T>("npolar", eVariationId::VAR_NPOLAR, weight, true, false, false, true, false)
{ {
Init(); Init();
} }
@ -3928,8 +3928,8 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Parity, prefix + "npolar_parity", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_Parity, prefix + "npolar_parity", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_N, prefix + "npolar_n", 1, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_N, prefix + "npolar_n", 1, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(true, &m_Nnz, prefix + "npolar_nnz"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_Nnz, prefix + "npolar_nnz"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_Vvar, prefix + "npolar_vvar")); m_Params.push_back(ParamWithName<T>(true, &m_Vvar, prefix + "npolar_vvar"));
m_Params.push_back(ParamWithName<T>(true, &m_Vvar2, prefix + "npolar_vvar_2")); m_Params.push_back(ParamWithName<T>(true, &m_Vvar2, prefix + "npolar_vvar_2"));
@ -3956,7 +3956,7 @@ template <typename T>
class EMBER_API OrthoVariation : public ParametricVariation<T> class EMBER_API OrthoVariation : public ParametricVariation<T>
{ {
public: public:
OrthoVariation(T weight = 1.0) : ParametricVariation<T>("ortho", VAR_ORTHO, weight, true, false, false, false, true) OrthoVariation(T weight = 1.0) : ParametricVariation<T>("ortho", eVariationId::VAR_ORTHO, weight, true, false, false, false, true)
{ {
Init(); Init();
} }
@ -4152,8 +4152,8 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_In, prefix + "ortho_in", 0, REAL_CYCLIC, T(-M_PI), T(M_PI))); m_Params.push_back(ParamWithName<T>(&m_In, prefix + "ortho_in", 0, eParamType::REAL_CYCLIC, T(-M_PI), T(M_PI)));
m_Params.push_back(ParamWithName<T>(&m_Out, prefix + "ortho_out", 0, REAL_CYCLIC, T(-M_PI), T(M_PI))); m_Params.push_back(ParamWithName<T>(&m_Out, prefix + "ortho_out", 0, eParamType::REAL_CYCLIC, T(-M_PI), T(M_PI)));
} }
private: private:
@ -4168,7 +4168,7 @@ template <typename T>
class EMBER_API PoincareVariation : public ParametricVariation<T> class EMBER_API PoincareVariation : public ParametricVariation<T>
{ {
public: public:
PoincareVariation(T weight = 1.0) : ParametricVariation<T>("poincare", VAR_POINCARE, weight) PoincareVariation(T weight = 1.0) : ParametricVariation<T>("poincare", eVariationId::VAR_POINCARE, weight)
{ {
Init(); Init();
} }
@ -4232,9 +4232,9 @@ protected:
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_C1r, prefix + "poincare_c1r", 1)); m_Params.push_back(ParamWithName<T>(&m_C1r, prefix + "poincare_c1r", 1));
m_Params.push_back(ParamWithName<T>(&m_C1a, prefix + "poincare_c1a", -1, REAL_CYCLIC, T(-M_PI), T(M_PI))); m_Params.push_back(ParamWithName<T>(&m_C1a, prefix + "poincare_c1a", -1, eParamType::REAL_CYCLIC, T(-M_PI), T(M_PI)));
m_Params.push_back(ParamWithName<T>(&m_C2r, prefix + "poincare_c2r", 1)); m_Params.push_back(ParamWithName<T>(&m_C2r, prefix + "poincare_c2r", 1));
m_Params.push_back(ParamWithName<T>(&m_C2a, prefix + "poincare_c2a", 1, REAL_CYCLIC, T(-M_PI), T(M_PI))); m_Params.push_back(ParamWithName<T>(&m_C2a, prefix + "poincare_c2a", 1, eParamType::REAL_CYCLIC, T(-M_PI), T(M_PI)));
m_Params.push_back(ParamWithName<T>(true, &m_C1x, prefix + "poincare_c1x"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_C1x, prefix + "poincare_c1x"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_C1y, prefix + "poincare_c1y")); m_Params.push_back(ParamWithName<T>(true, &m_C1y, prefix + "poincare_c1y"));
m_Params.push_back(ParamWithName<T>(true, &m_C2x, prefix + "poincare_c2x")); m_Params.push_back(ParamWithName<T>(true, &m_C2x, prefix + "poincare_c2x"));
@ -4263,7 +4263,7 @@ template <typename T>
class EMBER_API Poincare3DVariation : public ParametricVariation<T> class EMBER_API Poincare3DVariation : public ParametricVariation<T>
{ {
public: public:
Poincare3DVariation(T weight = 1.0) : ParametricVariation<T>("poincare3D", VAR_POINCARE3D, weight, true) Poincare3DVariation(T weight = 1.0) : ParametricVariation<T>("poincare3D", eVariationId::VAR_POINCARE3D, weight, true)
{ {
Init(); Init();
} }
@ -4386,7 +4386,7 @@ template <typename T>
class EMBER_API PolynomialVariation : public ParametricVariation<T> class EMBER_API PolynomialVariation : public ParametricVariation<T>
{ {
public: public:
PolynomialVariation(T weight = 1.0) : ParametricVariation<T>("polynomial", VAR_POLYNOMIAL, weight) PolynomialVariation(T weight = 1.0) : ParametricVariation<T>("polynomial", eVariationId::VAR_POLYNOMIAL, weight)
{ {
Init(); Init();
} }
@ -4464,7 +4464,7 @@ template <typename T>
class EMBER_API PSphereVariation : public ParametricVariation<T> class EMBER_API PSphereVariation : public ParametricVariation<T>
{ {
public: public:
PSphereVariation(T weight = 1.0) : ParametricVariation<T>("psphere", VAR_PSPHERE, weight) PSphereVariation(T weight = 1.0) : ParametricVariation<T>("psphere", eVariationId::VAR_PSPHERE, weight)
{ {
Init(); Init();
} }
@ -4538,7 +4538,7 @@ template <typename T>
class EMBER_API Rational3Variation : public ParametricVariation<T> class EMBER_API Rational3Variation : public ParametricVariation<T>
{ {
public: public:
Rational3Variation(T weight = 1.0) : ParametricVariation<T>("rational3", VAR_RATIONAL3, weight) Rational3Variation(T weight = 1.0) : ParametricVariation<T>("rational3", eVariationId::VAR_RATIONAL3, weight)
{ {
Init(); Init();
} }
@ -4636,7 +4636,7 @@ template <typename T>
class EMBER_API RippleVariation : public ParametricVariation<T> class EMBER_API RippleVariation : public ParametricVariation<T>
{ {
public: public:
RippleVariation(T weight = 1.0) : ParametricVariation<T>("ripple", VAR_RIPPLE, weight) RippleVariation(T weight = 1.0) : ParametricVariation<T>("ripple", eVariationId::VAR_RIPPLE, weight)
{ {
Init(); Init();
} }
@ -4674,7 +4674,7 @@ public:
//invert the multiplication with scale from before. //invert the multiplication with scale from before.
helper.Out.x = m_Weight * Lerp<T>(u1, u2, m_P) * m_Is;//Original did a direct assignment to outPoint, which is incompatible with Ember's design. helper.Out.x = m_Weight * Lerp<T>(u1, u2, m_P) * m_Is;//Original did a direct assignment to outPoint, which is incompatible with Ember's design.
helper.Out.y = m_Weight * Lerp<T>(v1, v2, m_P) * m_Is; helper.Out.y = m_Weight * Lerp<T>(v1, v2, m_P) * m_Is;
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -4720,7 +4720,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * Lerp(u1, u2, " << p << ") * " << is << ";\n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * Lerp(u1, u2, " << p << ") * " << is << ";\n"
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * Lerp(v1, v2, " << p << ") * " << is << ";\n" << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * Lerp(v1, v2, " << p << ") * " << is << ";\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -4793,7 +4793,7 @@ template <typename T>
class EMBER_API SigmoidVariation : public ParametricVariation<T> class EMBER_API SigmoidVariation : public ParametricVariation<T>
{ {
public: public:
SigmoidVariation(T weight = 1.0) : ParametricVariation<T>("sigmoid", VAR_SIGMOID, weight) SigmoidVariation(T weight = 1.0) : ParametricVariation<T>("sigmoid", eVariationId::VAR_SIGMOID, weight)
{ {
Init(); Init();
} }
@ -4913,7 +4913,7 @@ template <typename T>
class EMBER_API SinusGridVariation : public ParametricVariation<T> class EMBER_API SinusGridVariation : public ParametricVariation<T>
{ {
public: public:
SinusGridVariation(T weight = 1.0) : ParametricVariation<T>("sinusgrid", VAR_SINUS_GRID, weight) SinusGridVariation(T weight = 1.0) : ParametricVariation<T>("sinusgrid", eVariationId::VAR_SINUS_GRID, weight)
{ {
Init(); Init();
} }
@ -5013,7 +5013,7 @@ template <typename T>
class EMBER_API StwinVariation : public ParametricVariation<T> class EMBER_API StwinVariation : public ParametricVariation<T>
{ {
public: public:
StwinVariation(T weight = 1.0) : ParametricVariation<T>("stwin", VAR_STWIN, weight) StwinVariation(T weight = 1.0) : ParametricVariation<T>("stwin", eVariationId::VAR_STWIN, weight)
{ {
Init(); Init();
} }
@ -5095,7 +5095,7 @@ template <typename T>
class EMBER_API TwoFaceVariation : public Variation<T> class EMBER_API TwoFaceVariation : public Variation<T>
{ {
public: public:
TwoFaceVariation(T weight = 1.0) : Variation<T>("twoface", VAR_TWO_FACE, weight, true) { } TwoFaceVariation(T weight = 1.0) : Variation<T>("twoface", eVariationId::VAR_TWO_FACE, weight, true) { }
VARCOPY(TwoFaceVariation) VARCOPY(TwoFaceVariation)
@ -5138,7 +5138,7 @@ template <typename T>
class EMBER_API UnpolarVariation : public ParametricVariation<T> class EMBER_API UnpolarVariation : public ParametricVariation<T>
{ {
public: public:
UnpolarVariation(T weight = 1.0) : ParametricVariation<T>("unpolar", VAR_UNPOLAR, weight) UnpolarVariation(T weight = 1.0) : ParametricVariation<T>("unpolar", eVariationId::VAR_UNPOLAR, weight)
{ {
Init(); Init();
} }
@ -5202,7 +5202,7 @@ template <typename T>
class EMBER_API WavesNVariation : public ParametricVariation<T> class EMBER_API WavesNVariation : public ParametricVariation<T>
{ {
public: public:
WavesNVariation(T weight = 1.0) : ParametricVariation<T>("wavesn", VAR_WAVESN, weight, true, false, false, false, true) WavesNVariation(T weight = 1.0) : ParametricVariation<T>("wavesn", eVariationId::VAR_WAVESN, weight, true, false, false, false, true)
{ {
Init(); Init();
} }
@ -5285,7 +5285,7 @@ protected:
m_Params.push_back(ParamWithName<T>(&m_ScaleY, prefix + "wavesn_scaley", 1)); m_Params.push_back(ParamWithName<T>(&m_ScaleY, prefix + "wavesn_scaley", 1));
m_Params.push_back(ParamWithName<T>(&m_IncX, prefix + "wavesn_incx")); m_Params.push_back(ParamWithName<T>(&m_IncX, prefix + "wavesn_incx"));
m_Params.push_back(ParamWithName<T>(&m_IncY, prefix + "wavesn_incy")); m_Params.push_back(ParamWithName<T>(&m_IncY, prefix + "wavesn_incy"));
m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "wavesn_power", 1, INTEGER_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "wavesn_power", 1, eParamType::INTEGER_NONZERO));
m_Params.push_back(ParamWithName<T>(true, &m_AbsN, prefix + "wavesn_absn"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_AbsN, prefix + "wavesn_absn"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_Cn, prefix + "wavesn_cn")); m_Params.push_back(ParamWithName<T>(true, &m_Cn, prefix + "wavesn_cn"));
} }
@ -5309,7 +5309,7 @@ template <typename T>
class EMBER_API XHeartVariation : public ParametricVariation<T> class EMBER_API XHeartVariation : public ParametricVariation<T>
{ {
public: public:
XHeartVariation(T weight = 1.0) : ParametricVariation<T>("xheart", VAR_XHEART, weight, true) XHeartVariation(T weight = 1.0) : ParametricVariation<T>("xheart", eVariationId::VAR_XHEART, weight, true)
{ {
Init(); Init();
} }
@ -5418,7 +5418,7 @@ template <typename T>
class EMBER_API BarycentroidVariation : public ParametricVariation<T> class EMBER_API BarycentroidVariation : public ParametricVariation<T>
{ {
public: public:
BarycentroidVariation(T weight = 1.0) : ParametricVariation<T>("barycentroid", VAR_BARYCENTROID, weight) BarycentroidVariation(T weight = 1.0) : ParametricVariation<T>("barycentroid", eVariationId::VAR_BARYCENTROID, weight)
{ {
Init(); Init();
} }
@ -5513,7 +5513,7 @@ template <typename T>
class EMBER_API BiSplitVariation : public ParametricVariation<T> class EMBER_API BiSplitVariation : public ParametricVariation<T>
{ {
public: public:
BiSplitVariation(T weight = 1.0) : ParametricVariation<T>("bisplit", VAR_BISPLIT, weight) BiSplitVariation(T weight = 1.0) : ParametricVariation<T>("bisplit", eVariationId::VAR_BISPLIT, weight)
{ {
Init(); Init();
} }
@ -5569,7 +5569,7 @@ template <typename T>
class EMBER_API CrescentsVariation : public Variation<T> class EMBER_API CrescentsVariation : public Variation<T>
{ {
public: public:
CrescentsVariation(T weight = 1.0) : Variation<T>("crescents", VAR_CRESCENTS, weight) { } CrescentsVariation(T weight = 1.0) : Variation<T>("crescents", eVariationId::VAR_CRESCENTS, weight) { }
VARCOPY(CrescentsVariation) VARCOPY(CrescentsVariation)
@ -5617,7 +5617,7 @@ template <typename T>
class EMBER_API MaskVariation : public Variation<T> class EMBER_API MaskVariation : public Variation<T>
{ {
public: public:
MaskVariation(T weight = 1.0) : Variation<T>("mask", VAR_MASK, weight, true) { } MaskVariation(T weight = 1.0) : Variation<T>("mask", eVariationId::VAR_MASK, weight, true) { }
VARCOPY(MaskVariation) VARCOPY(MaskVariation)
@ -5667,7 +5667,7 @@ template <typename T>
class EMBER_API Cpow2Variation : public ParametricVariation<T> class EMBER_API Cpow2Variation : public ParametricVariation<T>
{ {
public: public:
Cpow2Variation(T weight = 1.0) : ParametricVariation<T>("cpow2", VAR_CPOW2, weight, true, false, false, false, true) Cpow2Variation(T weight = 1.0) : ParametricVariation<T>("cpow2", eVariationId::VAR_CPOW2, weight, true, false, false, false, true)
{ {
Init(); Init();
} }
@ -5757,8 +5757,8 @@ protected:
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_R, prefix + "cpow2_r", 1)); m_Params.push_back(ParamWithName<T>(&m_R, prefix + "cpow2_r", 1));
m_Params.push_back(ParamWithName<T>(&m_A, prefix + "cpow2_a")); m_Params.push_back(ParamWithName<T>(&m_A, prefix + "cpow2_a"));
m_Params.push_back(ParamWithName<T>(&m_Divisor, prefix + "cpow2_divisor", 1, INTEGER_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Divisor, prefix + "cpow2_divisor", 1, eParamType::INTEGER_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_Spread, prefix + "cpow2_spread", 1, INTEGER, 1, T(0x7FFFFFFF))); m_Params.push_back(ParamWithName<T>(&m_Spread, prefix + "cpow2_spread", 1, eParamType::INTEGER, 1, T(0x7FFFFFFF)));
m_Params.push_back(ParamWithName<T>(true, &m_C, prefix + "cpow2_c"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_C, prefix + "cpow2_c"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_HalfC, prefix + "cpow2_halfc")); m_Params.push_back(ParamWithName<T>(true, &m_HalfC, prefix + "cpow2_halfc"));
m_Params.push_back(ParamWithName<T>(true, &m_D, prefix + "cpow2_d")); m_Params.push_back(ParamWithName<T>(true, &m_D, prefix + "cpow2_d"));
@ -5785,18 +5785,18 @@ private:
MAKEPREPOSTVAR(Hemisphere, hemisphere, HEMISPHERE) MAKEPREPOSTVAR(Hemisphere, hemisphere, HEMISPHERE)
MAKEPREPOSTPARVAR(Epispiral, epispiral, EPISPIRAL) MAKEPREPOSTPARVAR(Epispiral, epispiral, EPISPIRAL)
MAKEPREPOSTPARVAR(Bwraps, bwraps, BWRAPS) MAKEPREPOSTPARVAR(Bwraps, bwraps, BWRAPS)
MAKEPREPOSTVARASSIGN(BlurCircle, blur_circle, BLUR_CIRCLE, ASSIGNTYPE_SUM) MAKEPREPOSTVARASSIGN(BlurCircle, blur_circle, BLUR_CIRCLE, eVariationAssignType::ASSIGNTYPE_SUM)
MAKEPREPOSTPARVAR(BlurZoom, blur_zoom, BLUR_ZOOM) MAKEPREPOSTPARVAR(BlurZoom, blur_zoom, BLUR_ZOOM)
MAKEPREPOSTPARVAR(BlurPixelize, blur_pixelize, BLUR_PIXELIZE) MAKEPREPOSTPARVAR(BlurPixelize, blur_pixelize, BLUR_PIXELIZE)
MAKEPREPOSTPARVAR(Crop, crop, CROP) MAKEPREPOSTPARVAR(Crop, crop, CROP)
MAKEPREPOSTPARVAR(BCircle, bcircle, BCIRCLE) MAKEPREPOSTPARVAR(BCircle, bcircle, BCIRCLE)
MAKEPREPOSTPARVAR(BlurLinear, blur_linear, BLUR_LINEAR) MAKEPREPOSTPARVAR(BlurLinear, blur_linear, BLUR_LINEAR)
MAKEPREPOSTPARVARASSIGN(BlurSquare, blur_square, BLUR_SQUARE, ASSIGNTYPE_SUM) MAKEPREPOSTPARVARASSIGN(BlurSquare, blur_square, BLUR_SQUARE, eVariationAssignType::ASSIGNTYPE_SUM)
MAKEPREPOSTVAR(Flatten, flatten, FLATTEN) MAKEPREPOSTVAR(Flatten, flatten, FLATTEN)
MAKEPREPOSTVARASSIGN(Zblur, zblur, ZBLUR, ASSIGNTYPE_SUM) MAKEPREPOSTVARASSIGN(Zblur, zblur, ZBLUR, eVariationAssignType::ASSIGNTYPE_SUM)
MAKEPREPOSTVARASSIGN(Blur3D, blur3D, BLUR3D, ASSIGNTYPE_SUM) MAKEPREPOSTVARASSIGN(Blur3D, blur3D, BLUR3D, eVariationAssignType::ASSIGNTYPE_SUM)
MAKEPREPOSTVARASSIGN(ZScale, zscale, ZSCALE, ASSIGNTYPE_SUM) MAKEPREPOSTVARASSIGN(ZScale, zscale, ZSCALE, eVariationAssignType::ASSIGNTYPE_SUM)
MAKEPREPOSTVARASSIGN(ZTranslate, ztranslate, ZTRANSLATE, ASSIGNTYPE_SUM) MAKEPREPOSTVARASSIGN(ZTranslate, ztranslate, ZTRANSLATE, eVariationAssignType::ASSIGNTYPE_SUM)
MAKEPREPOSTVAR(ZCone, zcone, ZCONE) MAKEPREPOSTVAR(ZCone, zcone, ZCONE)
MAKEPREPOSTVAR(Spherical3D, Spherical3D, SPHERICAL3D) MAKEPREPOSTVAR(Spherical3D, Spherical3D, SPHERICAL3D)
MAKEPREPOSTPARVAR(Curl3D, curl3D, CURL3D) MAKEPREPOSTPARVAR(Curl3D, curl3D, CURL3D)

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@ template <typename T>
class EMBER_API ESwirlVariation : public ParametricVariation<T> class EMBER_API ESwirlVariation : public ParametricVariation<T>
{ {
public: public:
ESwirlVariation(T weight = 1.0) : ParametricVariation<T>("eSwirl", VAR_ESWIRL, weight, true) ESwirlVariation(T weight = 1.0) : ParametricVariation<T>("eSwirl", eVariationId::VAR_ESWIRL, weight, true)
{ {
Init(); Init();
} }
@ -99,7 +99,7 @@ template <typename T>
class EMBER_API LazyTravisVariation : public ParametricVariation<T> class EMBER_API LazyTravisVariation : public ParametricVariation<T>
{ {
public: public:
LazyTravisVariation(T weight = 1.0) : ParametricVariation<T>("lazyTravis", VAR_LAZY_TRAVIS, weight) LazyTravisVariation(T weight = 1.0) : ParametricVariation<T>("lazyTravis", eVariationId::VAR_LAZY_TRAVIS, weight)
{ {
Init(); Init();
} }
@ -346,8 +346,8 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_SpinIn, prefix + "lazyTravis_spin_in", 1, REAL_CYCLIC, 0, 2)); m_Params.push_back(ParamWithName<T>(&m_SpinIn, prefix + "lazyTravis_spin_in", 1, eParamType::REAL_CYCLIC, 0, 2));
m_Params.push_back(ParamWithName<T>(&m_SpinOut, prefix + "lazyTravis_spin_out", 0, REAL_CYCLIC, 0, 2)); m_Params.push_back(ParamWithName<T>(&m_SpinOut, prefix + "lazyTravis_spin_out", 0, eParamType::REAL_CYCLIC, 0, 2));
m_Params.push_back(ParamWithName<T>(&m_Space, prefix + "lazyTravis_space")); m_Params.push_back(ParamWithName<T>(&m_Space, prefix + "lazyTravis_space"));
m_Params.push_back(ParamWithName<T>(true, &m_In4, prefix + "lazyTravis_in4"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_In4, prefix + "lazyTravis_in4"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_Out4, prefix + "lazyTravis_out4")); m_Params.push_back(ParamWithName<T>(true, &m_Out4, prefix + "lazyTravis_out4"));
@ -368,7 +368,7 @@ template <typename T>
class EMBER_API SquishVariation : public ParametricVariation<T> class EMBER_API SquishVariation : public ParametricVariation<T>
{ {
public: public:
SquishVariation(T weight = 1.0) : ParametricVariation<T>("squish", VAR_SQUISH, weight) SquishVariation(T weight = 1.0) : ParametricVariation<T>("squish", eVariationId::VAR_SQUISH, weight)
{ {
Init(); Init();
} }
@ -511,7 +511,7 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "squish_power", 2, INTEGER, 2, T(INT_MAX))); m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "squish_power", 2, eParamType::INTEGER, 2, T(INT_MAX)));
m_Params.push_back(ParamWithName<T>(true, &m_InvPower, prefix + "squish_inv_power"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_InvPower, prefix + "squish_inv_power"));//Precalc.
} }
@ -527,7 +527,7 @@ template <typename T>
class EMBER_API CircusVariation : public ParametricVariation<T> class EMBER_API CircusVariation : public ParametricVariation<T>
{ {
public: public:
CircusVariation(T weight = 1.0) : ParametricVariation<T>("circus", VAR_CIRCUS, weight, true, true, true) CircusVariation(T weight = 1.0) : ParametricVariation<T>("circus", eVariationId::VAR_CIRCUS, weight, true, true, true)
{ {
Init(); Init();
} }
@ -600,7 +600,7 @@ template <typename T>
class EMBER_API TancosVariation : public Variation<T> class EMBER_API TancosVariation : public Variation<T>
{ {
public: public:
TancosVariation(T weight = 1.0) : Variation<T>("tancos", VAR_TANCOS, weight, true) { } TancosVariation(T weight = 1.0) : Variation<T>("tancos", eVariationId::VAR_TANCOS, weight, true) { }
VARCOPY(TancosVariation) VARCOPY(TancosVariation)
@ -642,7 +642,7 @@ template <typename T>
class EMBER_API RippledVariation : public Variation<T> class EMBER_API RippledVariation : public Variation<T>
{ {
public: public:
RippledVariation(T weight = 1.0) : Variation<T>("rippled", VAR_RIPPLED, weight, true) { } RippledVariation(T weight = 1.0) : Variation<T>("rippled", eVariationId::VAR_RIPPLED, weight, true) { }
VARCOPY(RippledVariation) VARCOPY(RippledVariation)
@ -685,7 +685,7 @@ template <typename T>
class EMBER_API RotateXVariation : public ParametricVariation<T> class EMBER_API RotateXVariation : public ParametricVariation<T>
{ {
public: public:
RotateXVariation(T weight = 1.0) : ParametricVariation<T>("rotate_x", VAR_ROTATE_X, weight) RotateXVariation(T weight = 1.0) : ParametricVariation<T>("rotate_x", eVariationId::VAR_ROTATE_X, weight)
{ {
Init(); Init();
} }
@ -696,7 +696,7 @@ public:
{ {
T z = m_RxCos * helper.In.z - m_RxSin * helper.In.y; T z = m_RxCos * helper.In.z - m_RxSin * helper.In.y;
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
helper.Out.x = helper.In.x; helper.Out.x = helper.In.x;
outPoint.m_X = 0; outPoint.m_X = 0;
@ -723,7 +723,7 @@ public:
<< "\t\treal_t z = " << rxCos << " * vIn.z - " << rxSin << " * vIn.y;\n" << "\t\treal_t z = " << rxCos << " * vIn.z - " << rxSin << " * vIn.y;\n"
<< "\n"; << "\n";
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
ss << ss <<
"\t\tvOut.x = 0;\n" "\t\tvOut.x = 0;\n"
@ -771,7 +771,7 @@ template <typename T>
class EMBER_API RotateYVariation : public ParametricVariation<T> class EMBER_API RotateYVariation : public ParametricVariation<T>
{ {
public: public:
RotateYVariation(T weight = 1.0) : ParametricVariation<T>("rotate_y", VAR_ROTATE_Y, weight) RotateYVariation(T weight = 1.0) : ParametricVariation<T>("rotate_y", eVariationId::VAR_ROTATE_Y, weight)
{ {
Init(); Init();
} }
@ -782,7 +782,7 @@ public:
{ {
helper.Out.x = m_RyCos * helper.In.x - m_RySin * helper.In.z; helper.Out.x = m_RyCos * helper.In.x - m_RySin * helper.In.z;
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
helper.Out.y = 0; helper.Out.y = 0;
outPoint.m_Y = helper.In.y; outPoint.m_Y = helper.In.y;
@ -807,7 +807,7 @@ public:
ss << "\t{\n" ss << "\t{\n"
<< "\t\tvOut.x = " << ryCos << " * vIn.x - " << rySin << " * vIn.z;\n"; << "\t\tvOut.x = " << ryCos << " * vIn.x - " << rySin << " * vIn.z;\n";
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
ss << ss <<
"\t\tvOut.y = 0;\n" "\t\tvOut.y = 0;\n"
@ -854,7 +854,7 @@ template <typename T>
class EMBER_API RotateZVariation : public ParametricVariation<T> class EMBER_API RotateZVariation : public ParametricVariation<T>
{ {
public: public:
RotateZVariation(T weight = 1.0) : ParametricVariation<T>("rotate_z", VAR_ROTATE_Z, weight) RotateZVariation(T weight = 1.0) : ParametricVariation<T>("rotate_z", eVariationId::VAR_ROTATE_Z, weight)
{ {
Init(); Init();
} }
@ -866,7 +866,7 @@ public:
helper.Out.x = m_RzSin * helper.In.y + m_RzCos * helper.In.x; helper.Out.x = m_RzSin * helper.In.y + m_RzCos * helper.In.x;
helper.Out.y = m_RzCos * helper.In.y - m_RzSin * helper.In.x; helper.Out.y = m_RzCos * helper.In.y - m_RzSin * helper.In.x;
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
helper.Out.z = helper.In.z; helper.Out.z = helper.In.z;
outPoint.m_Z = 0; outPoint.m_Z = 0;
@ -890,7 +890,7 @@ public:
<< "\t\tvOut.x = " << rzSin << " * vIn.y + " << rzCos << " * vIn.x;\n" << "\t\tvOut.x = " << rzSin << " * vIn.y + " << rzCos << " * vIn.x;\n"
<< "\t\tvOut.y = " << rzCos << " * vIn.y - " << rzSin << " * vIn.x;\n"; << "\t\tvOut.y = " << rzCos << " * vIn.y - " << rzSin << " * vIn.x;\n";
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
ss << ss <<
"\t\tvOut.z = 0;\n" "\t\tvOut.z = 0;\n"
@ -936,13 +936,13 @@ template <typename T>
class EMBER_API MirrorXVariation : public Variation<T> class EMBER_API MirrorXVariation : public Variation<T>
{ {
public: public:
MirrorXVariation(T weight = 1.0) : Variation<T>("mirror_x", VAR_MIRROR_X, weight) { } MirrorXVariation(T weight = 1.0) : Variation<T>("mirror_x", eVariationId::VAR_MIRROR_X, weight) { }
VARCOPY(MirrorXVariation) VARCOPY(MirrorXVariation)
virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
{ {
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
helper.Out.x = fabs(outPoint.m_X); helper.Out.x = fabs(outPoint.m_X);
@ -971,7 +971,7 @@ public:
ss << "\t{\n"; ss << "\t{\n";
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
ss << ss <<
"\t\tvOut.x = fabs(outPoint->m_X);\n" "\t\tvOut.x = fabs(outPoint->m_X);\n"
@ -1009,13 +1009,13 @@ template <typename T>
class EMBER_API MirrorYVariation : public Variation<T> class EMBER_API MirrorYVariation : public Variation<T>
{ {
public: public:
MirrorYVariation(T weight = 1.0) : Variation<T>("mirror_y", VAR_MIRROR_Y, weight) { } MirrorYVariation(T weight = 1.0) : Variation<T>("mirror_y", eVariationId::VAR_MIRROR_Y, weight) { }
VARCOPY(MirrorYVariation) VARCOPY(MirrorYVariation)
virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
{ {
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
helper.Out.y = fabs(outPoint.m_Y); helper.Out.y = fabs(outPoint.m_Y);
@ -1044,7 +1044,7 @@ public:
ss << "\t{\n"; ss << "\t{\n";
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
ss << ss <<
"\t\tvOut.y = fabs(outPoint->m_Y);\n" "\t\tvOut.y = fabs(outPoint->m_Y);\n"
@ -1082,13 +1082,13 @@ template <typename T>
class EMBER_API MirrorZVariation : public Variation<T> class EMBER_API MirrorZVariation : public Variation<T>
{ {
public: public:
MirrorZVariation(T weight = 1.0) : Variation<T>("mirror_z", VAR_MIRROR_Z, weight) { } MirrorZVariation(T weight = 1.0) : Variation<T>("mirror_z", eVariationId::VAR_MIRROR_Z, weight) { }
VARCOPY(MirrorZVariation) VARCOPY(MirrorZVariation)
virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
{ {
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
helper.Out.z = fabs(outPoint.m_Z); helper.Out.z = fabs(outPoint.m_Z);
@ -1117,7 +1117,7 @@ public:
ss << "\t{\n"; ss << "\t{\n";
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
ss << ss <<
"\t\tvOut.z = fabs(outPoint->m_Z);\n" "\t\tvOut.z = fabs(outPoint->m_Z);\n"
@ -1154,7 +1154,7 @@ template <typename T>
class EMBER_API RBlurVariation : public ParametricVariation<T> class EMBER_API RBlurVariation : public ParametricVariation<T>
{ {
public: public:
RBlurVariation(T weight = 1.0) : ParametricVariation<T>("rblur", VAR_RBLUR, weight) RBlurVariation(T weight = 1.0) : ParametricVariation<T>("rblur", eVariationId::VAR_RBLUR, weight)
{ {
Init(); Init();
} }
@ -1235,7 +1235,7 @@ template <typename T>
class EMBER_API JuliaNabVariation : public ParametricVariation<T> class EMBER_API JuliaNabVariation : public ParametricVariation<T>
{ {
public: public:
JuliaNabVariation(T weight = 1.0) : ParametricVariation<T>("juliaNab", VAR_JULIANAB, weight, true) JuliaNabVariation(T weight = 1.0) : ParametricVariation<T>("juliaNab", eVariationId::VAR_JULIANAB, weight, true)
{ {
Init(); Init();
} }
@ -1324,7 +1324,7 @@ template <typename T>
class EMBER_API SintrangeVariation : public ParametricVariation<T> class EMBER_API SintrangeVariation : public ParametricVariation<T>
{ {
public: public:
SintrangeVariation(T weight = 1.0) : ParametricVariation<T>("sintrange", VAR_SINTRANGE, weight) SintrangeVariation(T weight = 1.0) : ParametricVariation<T>("sintrange", eVariationId::VAR_SINTRANGE, weight)
{ {
Init(); Init();
} }
@ -1339,7 +1339,7 @@ public:
helper.Out.x = m_Weight * std::sin(helper.In.x) * (sqX + m_W - v); helper.Out.x = m_Weight * std::sin(helper.In.x) * (sqX + m_W - v);
helper.Out.y = m_Weight * std::sin(helper.In.y) * (sqY + m_W - v); helper.Out.y = m_Weight * std::sin(helper.In.y) * (sqY + m_W - v);
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -1357,7 +1357,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * sin(vIn.x) * (sqX + " << w << " - v);\n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * sin(vIn.x) * (sqX + " << w << " - v);\n"
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * sin(vIn.y) * (sqY + " << w << " - v);\n" << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * sin(vIn.y) * (sqY + " << w << " - v);\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -1383,7 +1383,7 @@ template <typename T>
class EMBER_API VoronVariation : public ParametricVariation<T> class EMBER_API VoronVariation : public ParametricVariation<T>
{ {
public: public:
VoronVariation(T weight = 1.0) : ParametricVariation<T>("Voron", VAR_VORON, weight) VoronVariation(T weight = 1.0) : ParametricVariation<T>("Voron", eVariationId::VAR_VORON, weight)
{ {
Init(); Init();
} }
@ -1429,7 +1429,7 @@ public:
helper.Out.x = m_Weight * (m_K * (helper.In.x - x0) + x0); helper.Out.x = m_Weight * (m_K * (helper.In.x - x0) + x0);
helper.Out.y = m_Weight * (m_K * (helper.In.y - y0) + y0); helper.Out.y = m_Weight * (m_K * (helper.In.y - y0) + y0);
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -1481,7 +1481,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (" << m_k << " * (vIn.x - x0) + x0);\n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (" << m_k << " * (vIn.x - x0) + x0);\n"
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * (" << m_k << " * (vIn.y - y0) + y0);\n" << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * (" << m_k << " * (vIn.y - y0) + y0);\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -1509,10 +1509,10 @@ protected:
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_K, prefix + "Voron_K", T(0.99))); m_Params.push_back(ParamWithName<T>(&m_K, prefix + "Voron_K", T(0.99)));
m_Params.push_back(ParamWithName<T>(&m_Step, prefix + "Voron_Step", T(0.25), REAL_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Step, prefix + "Voron_Step", T(0.25), eParamType::REAL_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_Num, prefix + "Voron_Num", 1, INTEGER, 1, 25)); m_Params.push_back(ParamWithName<T>(&m_Num, prefix + "Voron_Num", 1, eParamType::INTEGER, 1, 25));
m_Params.push_back(ParamWithName<T>(&m_XSeed, prefix + "Voron_XSeed", 3, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_XSeed, prefix + "Voron_XSeed", 3, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_YSeed, prefix + "Voron_YSeed", 7, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_YSeed, prefix + "Voron_YSeed", 7, eParamType::INTEGER));
} }
private: private:
@ -1540,7 +1540,7 @@ template <typename T>
class EMBER_API WaffleVariation : public ParametricVariation<T> class EMBER_API WaffleVariation : public ParametricVariation<T>
{ {
public: public:
WaffleVariation(T weight = 1.0) : ParametricVariation<T>("waffle", VAR_WAFFLE, weight) WaffleVariation(T weight = 1.0) : ParametricVariation<T>("waffle", eVariationId::VAR_WAFFLE, weight)
{ {
Init(); Init();
} }
@ -1578,7 +1578,7 @@ public:
helper.Out.x = m_CosR * a + m_SinR * r; helper.Out.x = m_CosR * a + m_SinR * r;
helper.Out.y = -m_SinR * a + m_CosR * r; helper.Out.y = -m_SinR * a + m_CosR * r;
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -1623,7 +1623,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = " << cosr << " * a + " << sinr << " * r;\n" << "\t\tvOut.x = " << cosr << " * a + " << sinr << " * r;\n"
<< "\t\tvOut.y = -" << sinr << " * a + " << cosr << " * r;\n" << "\t\tvOut.y = -" << sinr << " * a + " << cosr << " * r;\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -1641,7 +1641,7 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Slices, prefix + "waffle_slices", 6, INTEGER_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Slices, prefix + "waffle_slices", 6, eParamType::INTEGER_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_XThickness, prefix + "waffle_xthickness", T(0.5))); m_Params.push_back(ParamWithName<T>(&m_XThickness, prefix + "waffle_xthickness", T(0.5)));
m_Params.push_back(ParamWithName<T>(&m_YThickness, prefix + "waffle_ythickness", T(0.5))); m_Params.push_back(ParamWithName<T>(&m_YThickness, prefix + "waffle_ythickness", T(0.5)));
m_Params.push_back(ParamWithName<T>(&m_Rotation, prefix + "waffle_rotation")); m_Params.push_back(ParamWithName<T>(&m_Rotation, prefix + "waffle_rotation"));
@ -1665,7 +1665,7 @@ template <typename T>
class EMBER_API Square3DVariation : public Variation<T> class EMBER_API Square3DVariation : public Variation<T>
{ {
public: public:
Square3DVariation(T weight = 1.0) : Variation<T>("square3D", VAR_SQUARE3D, weight) { } Square3DVariation(T weight = 1.0) : Variation<T>("square3D", eVariationId::VAR_SQUARE3D, weight) { }
VARCOPY(Square3DVariation) VARCOPY(Square3DVariation)
@ -1698,7 +1698,7 @@ template <typename T>
class EMBER_API SuperShape3DVariation : public ParametricVariation<T> class EMBER_API SuperShape3DVariation : public ParametricVariation<T>
{ {
public: public:
SuperShape3DVariation(T weight = 1.0) : ParametricVariation<T>("SuperShape3D", VAR_SUPER_SHAPE3D, weight) SuperShape3DVariation(T weight = 1.0) : ParametricVariation<T>("SuperShape3D", eVariationId::VAR_SUPER_SHAPE3D, weight)
{ {
Init(); Init();
} }
@ -1861,7 +1861,7 @@ protected:
m_Params.push_back(ParamWithName<T>(&m_N3_1, prefix + "SuperShape3D_n3_1", 1)); m_Params.push_back(ParamWithName<T>(&m_N3_1, prefix + "SuperShape3D_n3_1", 1));
m_Params.push_back(ParamWithName<T>(&m_N3_2, prefix + "SuperShape3D_n3_2", 1)); m_Params.push_back(ParamWithName<T>(&m_N3_2, prefix + "SuperShape3D_n3_2", 1));
m_Params.push_back(ParamWithName<T>(&m_Spiral, prefix + "SuperShape3D_spiral")); m_Params.push_back(ParamWithName<T>(&m_Spiral, prefix + "SuperShape3D_spiral"));
m_Params.push_back(ParamWithName<T>(&m_Toroidmap, prefix + "SuperShape3D_toroidmap", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_Toroidmap, prefix + "SuperShape3D_toroidmap", 0, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(true, &m_N1n_1, prefix + "SuperShape3D_n1n1"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_N1n_1, prefix + "SuperShape3D_n1n1"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_N1n_2, prefix + "SuperShape3D_n1n2")); m_Params.push_back(ParamWithName<T>(true, &m_N1n_2, prefix + "SuperShape3D_n1n2"));
m_Params.push_back(ParamWithName<T>(true, &m_An2_1, prefix + "SuperShape3D_an21")); m_Params.push_back(ParamWithName<T>(true, &m_An2_1, prefix + "SuperShape3D_an21"));
@ -1910,7 +1910,7 @@ template <typename T>
class EMBER_API Sphyp3DVariation : public ParametricVariation<T> class EMBER_API Sphyp3DVariation : public ParametricVariation<T>
{ {
public: public:
Sphyp3DVariation(T weight = 1.0) : ParametricVariation<T>("sphyp3D", VAR_SPHYP3D, weight, true) Sphyp3DVariation(T weight = 1.0) : ParametricVariation<T>("sphyp3D", eVariationId::VAR_SPHYP3D, weight, true)
{ {
Init(); Init();
} }
@ -1982,7 +1982,7 @@ protected:
m_Params.push_back(ParamWithName<T>(&m_StretchX, prefix + "sphyp3D_stretchX", 1)); m_Params.push_back(ParamWithName<T>(&m_StretchX, prefix + "sphyp3D_stretchX", 1));
m_Params.push_back(ParamWithName<T>(&m_StretchY, prefix + "sphyp3D_stretchY", 1)); m_Params.push_back(ParamWithName<T>(&m_StretchY, prefix + "sphyp3D_stretchY", 1));
m_Params.push_back(ParamWithName<T>(&m_StretchZ, prefix + "sphyp3D_stretchZ", 1)); m_Params.push_back(ParamWithName<T>(&m_StretchZ, prefix + "sphyp3D_stretchZ", 1));
m_Params.push_back(ParamWithName<T>(&m_ZOn, prefix + "sphyp3D_zOn", 1, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_ZOn, prefix + "sphyp3D_zOn", 1, eParamType::INTEGER, 0, 1));
} }
private: private:
@ -1999,7 +1999,7 @@ template <typename T>
class EMBER_API CirclecropVariation : public ParametricVariation<T> class EMBER_API CirclecropVariation : public ParametricVariation<T>
{ {
public: public:
CirclecropVariation(T weight = 1.0) : ParametricVariation<T>("circlecrop", VAR_CIRCLECROP, weight) CirclecropVariation(T weight = 1.0) : ParametricVariation<T>("circlecrop", eVariationId::VAR_CIRCLECROP, weight)
{ {
Init(); Init();
} }
@ -2022,7 +2022,7 @@ public:
if (cr0 && esc) if (cr0 && esc)
{ {
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
helper.m_TransX = helper.m_TransY = 0; helper.m_TransX = helper.m_TransY = 0;
else else
outPoint.m_X = outPoint.m_Y = 0; outPoint.m_X = outPoint.m_Y = 0;
@ -2079,7 +2079,7 @@ public:
<< "\t\tif (cr0 && esc)\n" << "\t\tif (cr0 && esc)\n"
<< "\t\t{\n"; << "\t\t{\n";
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
ss << "\t\t transX = transY = 0;\n"; ss << "\t\t transX = transY = 0;\n";
else else
ss << "\t\t outPoint->m_X = outPoint->m_Y = 0;\n"; ss << "\t\t outPoint->m_X = outPoint->m_Y = 0;\n";
@ -2126,7 +2126,7 @@ protected:
m_Params.push_back(ParamWithName<T>(&m_X, prefix + "circlecrop_x")); m_Params.push_back(ParamWithName<T>(&m_X, prefix + "circlecrop_x"));
m_Params.push_back(ParamWithName<T>(&m_Y, prefix + "circlecrop_y")); m_Params.push_back(ParamWithName<T>(&m_Y, prefix + "circlecrop_y"));
m_Params.push_back(ParamWithName<T>(&m_ScatterArea, prefix + "circlecrop_scatter_area")); m_Params.push_back(ParamWithName<T>(&m_ScatterArea, prefix + "circlecrop_scatter_area"));
m_Params.push_back(ParamWithName<T>(&m_Zero, prefix + "circlecrop_zero", 1, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_Zero, prefix + "circlecrop_zero", 1, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(true, &m_Ca, prefix + "circlecrop_ca")); m_Params.push_back(ParamWithName<T>(true, &m_Ca, prefix + "circlecrop_ca"));
} }
@ -2146,7 +2146,7 @@ template <typename T>
class EMBER_API Julian3DxVariation : public ParametricVariation<T> class EMBER_API Julian3DxVariation : public ParametricVariation<T>
{ {
public: public:
Julian3DxVariation(T weight = 1.0) : ParametricVariation<T>("julian3Dx", VAR_JULIAN3DX, weight, true, true) Julian3DxVariation(T weight = 1.0) : ParametricVariation<T>("julian3Dx", eVariationId::VAR_JULIAN3DX, weight, true, true)
{ {
Init(); Init();
} }
@ -2215,7 +2215,7 @@ protected:
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Dist, prefix + "julian3Dx_dist", 1)); m_Params.push_back(ParamWithName<T>(&m_Dist, prefix + "julian3Dx_dist", 1));
m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "julian3Dx_power", 2, INTEGER_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "julian3Dx_power", 2, eParamType::INTEGER_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_A, prefix + "julian3Dx_a", 1)); m_Params.push_back(ParamWithName<T>(&m_A, prefix + "julian3Dx_a", 1));
m_Params.push_back(ParamWithName<T>(&m_B, prefix + "julian3Dx_b")); m_Params.push_back(ParamWithName<T>(&m_B, prefix + "julian3Dx_b"));
m_Params.push_back(ParamWithName<T>(&m_C, prefix + "julian3Dx_c")); m_Params.push_back(ParamWithName<T>(&m_C, prefix + "julian3Dx_c"));
@ -2246,7 +2246,7 @@ template <typename T>
class EMBER_API FourthVariation : public ParametricVariation<T> class EMBER_API FourthVariation : public ParametricVariation<T>
{ {
public: public:
FourthVariation(T weight = 1.0) : ParametricVariation<T>("fourth", VAR_FOURTH, weight, true, true, false, false, true) FourthVariation(T weight = 1.0) : ParametricVariation<T>("fourth", eVariationId::VAR_FOURTH, weight, true, true, false, false, true)
{ {
Init(); Init();
} }
@ -2306,7 +2306,7 @@ public:
helper.Out.y = m_Weight * helper.In.y; helper.Out.y = m_Weight * helper.In.y;
} }
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -2374,7 +2374,7 @@ public:
<< "\t\t vOut.y = xform->m_VariationWeights[" << varIndex << "] * vIn.y;\n" << "\t\t vOut.y = xform->m_VariationWeights[" << varIndex << "] * vIn.y;\n"
<< "\t\t}\n" << "\t\t}\n"
<< "\n" << "\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -2396,7 +2396,7 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Spin, prefix + "fourth_spin", T(M_PI), REAL_CYCLIC, 0, M_2PI)); m_Params.push_back(ParamWithName<T>(&m_Spin, prefix + "fourth_spin", T(M_PI), eParamType::REAL_CYCLIC, 0, M_2PI));
m_Params.push_back(ParamWithName<T>(&m_Space, prefix + "fourth_space")); m_Params.push_back(ParamWithName<T>(&m_Space, prefix + "fourth_space"));
m_Params.push_back(ParamWithName<T>(&m_Twist, prefix + "fourth_twist")); m_Params.push_back(ParamWithName<T>(&m_Twist, prefix + "fourth_twist"));
m_Params.push_back(ParamWithName<T>(&m_X, prefix + "fourth_x")); m_Params.push_back(ParamWithName<T>(&m_X, prefix + "fourth_x"));
@ -2420,7 +2420,7 @@ template <typename T>
class EMBER_API MobiqVariation : public ParametricVariation<T> class EMBER_API MobiqVariation : public ParametricVariation<T>
{ {
public: public:
MobiqVariation(T weight = 1.0) : ParametricVariation<T>("mobiq", VAR_MOBIQ, weight) MobiqVariation(T weight = 1.0) : ParametricVariation<T>("mobiq", eVariationId::VAR_MOBIQ, weight)
{ {
Init(); Init();
} }
@ -2576,7 +2576,7 @@ template <typename T>
class EMBER_API SpherivoidVariation : public ParametricVariation<T> class EMBER_API SpherivoidVariation : public ParametricVariation<T>
{ {
public: public:
SpherivoidVariation(T weight = 1.0) : ParametricVariation<T>("spherivoid", VAR_SPHERIVOID, weight, true, true, false, false, true) SpherivoidVariation(T weight = 1.0) : ParametricVariation<T>("spherivoid", eVariationId::VAR_SPHERIVOID, weight, true, true, false, false, true)
{ {
Init(); Init();
} }
@ -2642,7 +2642,7 @@ template <typename T>
class EMBER_API FarblurVariation : public ParametricVariation<T> class EMBER_API FarblurVariation : public ParametricVariation<T>
{ {
public: public:
FarblurVariation(T weight = 1.0) : ParametricVariation<T>("farblur", VAR_FARBLUR, weight) FarblurVariation(T weight = 1.0) : ParametricVariation<T>("farblur", eVariationId::VAR_FARBLUR, weight)
{ {
Init(); Init();
} }
@ -2735,7 +2735,7 @@ template <typename T>
class EMBER_API CurlSPVariation : public ParametricVariation<T> class EMBER_API CurlSPVariation : public ParametricVariation<T>
{ {
public: public:
CurlSPVariation(T weight = 1.0) : ParametricVariation<T>("curl_sp", VAR_CURL_SP, weight) CurlSPVariation(T weight = 1.0) : ParametricVariation<T>("curl_sp", eVariationId::VAR_CURL_SP, weight)
{ {
Init(); Init();
} }
@ -2814,7 +2814,7 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "curl_sp_pow", 1, REAL_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "curl_sp_pow", 1, eParamType::REAL_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_C1, prefix + "curl_sp_c1")); m_Params.push_back(ParamWithName<T>(&m_C1, prefix + "curl_sp_c1"));
m_Params.push_back(ParamWithName<T>(&m_C2, prefix + "curl_sp_c2")); m_Params.push_back(ParamWithName<T>(&m_C2, prefix + "curl_sp_c2"));
m_Params.push_back(ParamWithName<T>(&m_Sx, prefix + "curl_sp_sx")); m_Params.push_back(ParamWithName<T>(&m_Sx, prefix + "curl_sp_sx"));
@ -2844,7 +2844,7 @@ template <typename T>
class EMBER_API HeatVariation : public ParametricVariation<T> class EMBER_API HeatVariation : public ParametricVariation<T>
{ {
public: public:
HeatVariation(T weight = 1.0) : ParametricVariation<T>("heat", VAR_HEAT, weight, true, false, false, false, true) HeatVariation(T weight = 1.0) : ParametricVariation<T>("heat", eVariationId::VAR_HEAT, weight, true, false, false, false, true)
{ {
Init(); Init();
} }
@ -2995,7 +2995,7 @@ template <typename T>
class EMBER_API Interference2Variation : public ParametricVariation<T> class EMBER_API Interference2Variation : public ParametricVariation<T>
{ {
public: public:
Interference2Variation(T weight = 1.0) : ParametricVariation<T>("interference2", VAR_INTERFERENCE2, weight) Interference2Variation(T weight = 1.0) : ParametricVariation<T>("interference2", eVariationId::VAR_INTERFERENCE2, weight)
{ {
Init(); Init();
} }
@ -3051,7 +3051,7 @@ public:
helper.Out.x = m_Weight * (fp1x + fp2x); helper.Out.x = m_Weight * (fp1x + fp2x);
helper.Out.y = m_Weight * (fp1y + fp2y); helper.Out.y = m_Weight * (fp1y + fp2y);
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -3119,7 +3119,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (fp1x + fp2x);\n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (fp1x + fp2x);\n"
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * (fp1y + fp2y);\n" << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * (fp1y + fp2y);\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -3155,12 +3155,12 @@ protected:
m_Params.push_back(ParamWithName<T>(&m_B1, prefix + "interference2_b1", 1)); m_Params.push_back(ParamWithName<T>(&m_B1, prefix + "interference2_b1", 1));
m_Params.push_back(ParamWithName<T>(&m_C1, prefix + "interference2_c1")); m_Params.push_back(ParamWithName<T>(&m_C1, prefix + "interference2_c1"));
m_Params.push_back(ParamWithName<T>(&m_P1, prefix + "interference2_p1", 1)); m_Params.push_back(ParamWithName<T>(&m_P1, prefix + "interference2_p1", 1));
m_Params.push_back(ParamWithName<T>(&m_T1, prefix + "interference2_t1", 0, INTEGER, 0, 2)); m_Params.push_back(ParamWithName<T>(&m_T1, prefix + "interference2_t1", 0, eParamType::INTEGER, 0, 2));
m_Params.push_back(ParamWithName<T>(&m_A2, prefix + "interference2_a2", 1)); m_Params.push_back(ParamWithName<T>(&m_A2, prefix + "interference2_a2", 1));
m_Params.push_back(ParamWithName<T>(&m_B2, prefix + "interference2_b2", 1)); m_Params.push_back(ParamWithName<T>(&m_B2, prefix + "interference2_b2", 1));
m_Params.push_back(ParamWithName<T>(&m_C2, prefix + "interference2_c2")); m_Params.push_back(ParamWithName<T>(&m_C2, prefix + "interference2_c2"));
m_Params.push_back(ParamWithName<T>(&m_P2, prefix + "interference2_p2", 1)); m_Params.push_back(ParamWithName<T>(&m_P2, prefix + "interference2_p2", 1));
m_Params.push_back(ParamWithName<T>(&m_T2, prefix + "interference2_t2", 0, INTEGER, 0, 2)); m_Params.push_back(ParamWithName<T>(&m_T2, prefix + "interference2_t2", 0, eParamType::INTEGER, 0, 2));
} }
private: private:
@ -3198,7 +3198,7 @@ template <typename T>
class EMBER_API SinqVariation : public Variation<T> class EMBER_API SinqVariation : public Variation<T>
{ {
public: public:
SinqVariation(T weight = 1.0) : Variation<T>("sinq", VAR_SINQ, weight) { } SinqVariation(T weight = 1.0) : Variation<T>("sinq", eVariationId::VAR_SINQ, weight) { }
VARCOPY(SinqVariation) VARCOPY(SinqVariation)
@ -3250,7 +3250,7 @@ template <typename T>
class EMBER_API SinhqVariation : public Variation<T> class EMBER_API SinhqVariation : public Variation<T>
{ {
public: public:
SinhqVariation(T weight = 1.0) : Variation<T>("sinhq", VAR_SINHQ, weight) { } SinhqVariation(T weight = 1.0) : Variation<T>("sinhq", eVariationId::VAR_SINHQ, weight) { }
VARCOPY(SinhqVariation) VARCOPY(SinhqVariation)
@ -3302,7 +3302,7 @@ template <typename T>
class EMBER_API SecqVariation : public Variation<T> class EMBER_API SecqVariation : public Variation<T>
{ {
public: public:
SecqVariation(T weight = 1.0) : Variation<T>("secq", VAR_SECQ, weight, true) { } SecqVariation(T weight = 1.0) : Variation<T>("secq", eVariationId::VAR_SECQ, weight, true) { }
VARCOPY(SecqVariation) VARCOPY(SecqVariation)
@ -3356,7 +3356,7 @@ template <typename T>
class EMBER_API SechqVariation : public Variation<T> class EMBER_API SechqVariation : public Variation<T>
{ {
public: public:
SechqVariation(T weight = 1.0) : Variation<T>("sechq", VAR_SECHQ, weight, true) { } SechqVariation(T weight = 1.0) : Variation<T>("sechq", eVariationId::VAR_SECHQ, weight, true) { }
VARCOPY(SechqVariation) VARCOPY(SechqVariation)
@ -3410,7 +3410,7 @@ template <typename T>
class EMBER_API TanqVariation : public Variation<T> class EMBER_API TanqVariation : public Variation<T>
{ {
public: public:
TanqVariation(T weight = 1.0) : Variation<T>("tanq", VAR_TANQ, weight) { } TanqVariation(T weight = 1.0) : Variation<T>("tanq", eVariationId::VAR_TANQ, weight) { }
VARCOPY(TanqVariation) VARCOPY(TanqVariation)
@ -3469,7 +3469,7 @@ template <typename T>
class EMBER_API TanhqVariation : public Variation<T> class EMBER_API TanhqVariation : public Variation<T>
{ {
public: public:
TanhqVariation(T weight = 1.0) : Variation<T>("tanhq", VAR_TANHQ, weight) { } TanhqVariation(T weight = 1.0) : Variation<T>("tanhq", eVariationId::VAR_TANHQ, weight) { }
VARCOPY(TanhqVariation) VARCOPY(TanhqVariation)
@ -3528,7 +3528,7 @@ template <typename T>
class EMBER_API CosqVariation : public Variation<T> class EMBER_API CosqVariation : public Variation<T>
{ {
public: public:
CosqVariation(T weight = 1.0) : Variation<T>("cosq", VAR_COSQ, weight) { } CosqVariation(T weight = 1.0) : Variation<T>("cosq", eVariationId::VAR_COSQ, weight) { }
VARCOPY(CosqVariation) VARCOPY(CosqVariation)
@ -3580,7 +3580,7 @@ template <typename T>
class EMBER_API CoshqVariation : public Variation<T> class EMBER_API CoshqVariation : public Variation<T>
{ {
public: public:
CoshqVariation(T weight = 1.0) : Variation<T>("coshq", VAR_COSHQ, weight) { } CoshqVariation(T weight = 1.0) : Variation<T>("coshq", eVariationId::VAR_COSHQ, weight) { }
VARCOPY(CoshqVariation) VARCOPY(CoshqVariation)
@ -3632,7 +3632,7 @@ template <typename T>
class EMBER_API CotqVariation : public Variation<T> class EMBER_API CotqVariation : public Variation<T>
{ {
public: public:
CotqVariation(T weight = 1.0) : Variation<T>("cotq", VAR_COTQ, weight) { } CotqVariation(T weight = 1.0) : Variation<T>("cotq", eVariationId::VAR_COTQ, weight) { }
VARCOPY(CotqVariation) VARCOPY(CotqVariation)
@ -3691,7 +3691,7 @@ template <typename T>
class EMBER_API CothqVariation : public Variation<T> class EMBER_API CothqVariation : public Variation<T>
{ {
public: public:
CothqVariation(T weight = 1.0) : Variation<T>("cothq", VAR_COTHQ, weight) { } CothqVariation(T weight = 1.0) : Variation<T>("cothq", eVariationId::VAR_COTHQ, weight) { }
VARCOPY(CothqVariation) VARCOPY(CothqVariation)
@ -3750,7 +3750,7 @@ template <typename T>
class EMBER_API CscqVariation : public Variation<T> class EMBER_API CscqVariation : public Variation<T>
{ {
public: public:
CscqVariation(T weight = 1.0) : Variation<T>("cscq", VAR_CSCQ, weight, true) { } CscqVariation(T weight = 1.0) : Variation<T>("cscq", eVariationId::VAR_CSCQ, weight, true) { }
VARCOPY(CscqVariation) VARCOPY(CscqVariation)
@ -3804,7 +3804,7 @@ template <typename T>
class EMBER_API CschqVariation : public Variation<T> class EMBER_API CschqVariation : public Variation<T>
{ {
public: public:
CschqVariation(T weight = 1.0) : Variation<T>("cschq", VAR_CSCHQ, weight, true) { } CschqVariation(T weight = 1.0) : Variation<T>("cschq", eVariationId::VAR_CSCHQ, weight, true) { }
VARCOPY(CschqVariation) VARCOPY(CschqVariation)
@ -3858,7 +3858,7 @@ template <typename T>
class EMBER_API EstiqVariation : public Variation<T> class EMBER_API EstiqVariation : public Variation<T>
{ {
public: public:
EstiqVariation(T weight = 1.0) : Variation<T>("estiq", VAR_ESTIQ, weight) { } EstiqVariation(T weight = 1.0) : Variation<T>("estiq", eVariationId::VAR_ESTIQ, weight) { }
VARCOPY(EstiqVariation) VARCOPY(EstiqVariation)
@ -3908,7 +3908,7 @@ template <typename T>
class EMBER_API LoqVariation : public ParametricVariation<T> class EMBER_API LoqVariation : public ParametricVariation<T>
{ {
public: public:
LoqVariation(T weight = 1.0) : ParametricVariation<T>("loq", VAR_LOQ, weight) LoqVariation(T weight = 1.0) : ParametricVariation<T>("loq", eVariationId::VAR_LOQ, weight)
{ {
Init(); Init();
} }
@ -3962,7 +3962,7 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Base, prefix + "loq_base", T(M_E), REAL, EPS, TMAX)); m_Params.push_back(ParamWithName<T>(&m_Base, prefix + "loq_base", T(M_E), eParamType::REAL, EPS, TMAX));
m_Params.push_back(ParamWithName<T>(true, &m_Denom, prefix + "loq_denom"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_Denom, prefix + "loq_denom"));//Precalc.
} }
@ -3978,7 +3978,7 @@ template <typename T>
class EMBER_API CurvatureVariation : public Variation<T> class EMBER_API CurvatureVariation : public Variation<T>
{ {
public: public:
CurvatureVariation(T weight = 1.0) : Variation<T>("curvature", VAR_CURVATURE, weight, true, true, false, false, true) { } CurvatureVariation(T weight = 1.0) : Variation<T>("curvature", eVariationId::VAR_CURVATURE, weight, true, true, false, false, true) { }
VARCOPY(CurvatureVariation) VARCOPY(CurvatureVariation)
@ -3986,7 +3986,7 @@ public:
{ {
helper.Out.x = m_Weight / Zeps(helper.m_PrecalcSqrtSumSquares); helper.Out.x = m_Weight / Zeps(helper.m_PrecalcSqrtSumSquares);
helper.Out.y = helper.m_PrecalcAtanyx; helper.Out.y = helper.m_PrecalcAtanyx;
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -3997,7 +3997,7 @@ public:
ss << "\t{\n" ss << "\t{\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] / Zeps(precalcSqrtSumSquares);\n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] / Zeps(precalcSqrtSumSquares);\n"
<< "\t\tvOut.y = precalcAtanyx;\n" << "\t\tvOut.y = precalcAtanyx;\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -4016,7 +4016,7 @@ template <typename T>
class EMBER_API QodeVariation : public ParametricVariation<T> class EMBER_API QodeVariation : public ParametricVariation<T>
{ {
public: public:
QodeVariation(T weight = 1.0) : ParametricVariation<T>("q_ode", VAR_Q_ODE, weight) QodeVariation(T weight = 1.0) : ParametricVariation<T>("q_ode", eVariationId::VAR_Q_ODE, weight)
{ {
Init(); Init();
} }
@ -4033,7 +4033,7 @@ public:
(m_Q04 * xy + m_Q05 * helper.In.y + m_Q06 * sqy); (m_Q04 * xy + m_Q05 * helper.In.y + m_Q06 * sqy);
helper.Out.y = (m_Q07 + m_Q08 * helper.In.x + m_Q09 * sqx) + helper.Out.y = (m_Q07 + m_Q08 * helper.In.x + m_Q09 * sqx) +
(m_Q10 * xy + m_Weight * m_Q11 * helper.In.y + m_Q12 * sqy); (m_Q10 * xy + m_Weight * m_Q11 * helper.In.y + m_Q12 * sqy);
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -4064,7 +4064,7 @@ public:
<< "\t\t (" << q04 << " * xy + " << q05 << " * vIn.y + " << q06 << " * sqy);\n" << "\t\t (" << q04 << " * xy + " << q05 << " * vIn.y + " << q06 << " * sqy);\n"
<< "\t\tvOut.y = (" << q07 << " + " << q08 << " * vIn.x + " << q09 << " * sqx) + \n" << "\t\tvOut.y = (" << q07 << " + " << q08 << " * vIn.x + " << q09 << " * sqx) + \n"
<< "\t\t (" << q10 << " * xy + xform->m_VariationWeights[" << varIndex << "] * " << q11 << " * vIn.y + " << q12 << " * sqy);\n" << "\t\t (" << q10 << " * xy + xform->m_VariationWeights[" << varIndex << "] * " << q11 << " * vIn.y + " << q12 << " * sqy);\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -4112,7 +4112,7 @@ template <typename T>
class EMBER_API BlurHeartVariation : public ParametricVariation<T> class EMBER_API BlurHeartVariation : public ParametricVariation<T>
{ {
public: public:
BlurHeartVariation(T weight = 1.0) : ParametricVariation<T>("blur_heart", VAR_BLUR_HEART, weight) BlurHeartVariation(T weight = 1.0) : ParametricVariation<T>("blur_heart", eVariationId::VAR_BLUR_HEART, weight)
{ {
Init(); Init();
} }
@ -4143,7 +4143,7 @@ public:
helper.Out.x = xx * m_Weight; helper.Out.x = xx * m_Weight;
helper.Out.y = yy * m_Weight; helper.Out.y = yy * m_Weight;
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -4177,7 +4177,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = xx * xform->m_VariationWeights[" << varIndex << "];\n" << "\t\tvOut.x = xx * xform->m_VariationWeights[" << varIndex << "];\n"
<< "\t\tvOut.y = yy * xform->m_VariationWeights[" << varIndex << "];\n" << "\t\tvOut.y = yy * xform->m_VariationWeights[" << varIndex << "];\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -4212,7 +4212,7 @@ template <typename T>
class EMBER_API TruchetVariation : public ParametricVariation<T> class EMBER_API TruchetVariation : public ParametricVariation<T>
{ {
public: public:
TruchetVariation(T weight = 1.0) : ParametricVariation<T>("Truchet", VAR_TRUCHET, weight) TruchetVariation(T weight = 1.0) : ParametricVariation<T>("Truchet", eVariationId::VAR_TRUCHET, weight)
{ {
Init(); Init();
} }
@ -4339,7 +4339,7 @@ public:
helper.Out.y += m_Size * (y + Floor<T>(helper.In.y)); helper.Out.y += m_Size * (y + Floor<T>(helper.In.y));
} }
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -4477,7 +4477,7 @@ public:
<< "\t\t vOut.y += " << size << " * (y + floor(vIn.y));\n" << "\t\t vOut.y += " << size << " * (y + floor(vIn.y));\n"
<< "\t\t}\n" << "\t\t}\n"
<< "\n" << "\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -4503,11 +4503,11 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Extended, prefix + "Truchet_extended", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_Extended, prefix + "Truchet_extended", 0, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_Exponent, prefix + "Truchet_exponent", 2, REAL_CYCLIC, T(0.001), 2)); m_Params.push_back(ParamWithName<T>(&m_Exponent, prefix + "Truchet_exponent", 2, eParamType::REAL_CYCLIC, T(0.001), 2));
m_Params.push_back(ParamWithName<T>(&m_ArcWidth, prefix + "Truchet_arc_width", T(0.5), REAL_CYCLIC, T(0.001), 1)); m_Params.push_back(ParamWithName<T>(&m_ArcWidth, prefix + "Truchet_arc_width", T(0.5), eParamType::REAL_CYCLIC, T(0.001), 1));
m_Params.push_back(ParamWithName<T>(&m_Rotation, prefix + "Truchet_rotation")); m_Params.push_back(ParamWithName<T>(&m_Rotation, prefix + "Truchet_rotation"));
m_Params.push_back(ParamWithName<T>(&m_Size, prefix + "Truchet_size", 1, REAL_CYCLIC, T(0.001), 10)); m_Params.push_back(ParamWithName<T>(&m_Size, prefix + "Truchet_size", 1, eParamType::REAL_CYCLIC, T(0.001), 10));
m_Params.push_back(ParamWithName<T>(&m_Seed, prefix + "Truchet_seed", 50)); m_Params.push_back(ParamWithName<T>(&m_Seed, prefix + "Truchet_seed", 50));
m_Params.push_back(ParamWithName<T>(true, &m_OneOverEx, prefix + "Truchet_one_over_ex"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_OneOverEx, prefix + "Truchet_one_over_ex"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_AbsSeed, prefix + "Truchet_abs_seed")); m_Params.push_back(ParamWithName<T>(true, &m_AbsSeed, prefix + "Truchet_abs_seed"));
@ -4537,7 +4537,7 @@ template <typename T>
class EMBER_API GdoffsVariation : public ParametricVariation<T> class EMBER_API GdoffsVariation : public ParametricVariation<T>
{ {
public: public:
GdoffsVariation(T weight = 1.0) : ParametricVariation<T>("gdoffs", VAR_GDOFFS, weight) GdoffsVariation(T weight = 1.0) : ParametricVariation<T>("gdoffs", eVariationId::VAR_GDOFFS, weight)
{ {
Init(); Init();
} }
@ -4650,14 +4650,14 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_DeltaX, prefix + "gdoffs_delta_x", 0, REAL, 0, 16)); m_Params.push_back(ParamWithName<T>(&m_DeltaX, prefix + "gdoffs_delta_x", 0, eParamType::REAL, 0, 16));
m_Params.push_back(ParamWithName<T>(&m_DeltaY, prefix + "gdoffs_delta_y", 0, REAL, 0, 16)); m_Params.push_back(ParamWithName<T>(&m_DeltaY, prefix + "gdoffs_delta_y", 0, eParamType::REAL, 0, 16));
m_Params.push_back(ParamWithName<T>(&m_AreaX, prefix + "gdoffs_area_x", 2)); m_Params.push_back(ParamWithName<T>(&m_AreaX, prefix + "gdoffs_area_x", 2));
m_Params.push_back(ParamWithName<T>(&m_AreaY, prefix + "gdoffs_area_y", 2)); m_Params.push_back(ParamWithName<T>(&m_AreaY, prefix + "gdoffs_area_y", 2));
m_Params.push_back(ParamWithName<T>(&m_CenterX, prefix + "gdoffs_center_x")); m_Params.push_back(ParamWithName<T>(&m_CenterX, prefix + "gdoffs_center_x"));
m_Params.push_back(ParamWithName<T>(&m_CenterY, prefix + "gdoffs_center_y")); m_Params.push_back(ParamWithName<T>(&m_CenterY, prefix + "gdoffs_center_y"));
m_Params.push_back(ParamWithName<T>(&m_Gamma, prefix + "gdoffs_gamma", 1, INTEGER, 1, 6)); m_Params.push_back(ParamWithName<T>(&m_Gamma, prefix + "gdoffs_gamma", 1, eParamType::INTEGER, 1, 6));
m_Params.push_back(ParamWithName<T>(&m_Square, prefix + "gdoffs_square", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_Square, prefix + "gdoffs_square", 0, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(true, &m_Dx, prefix + "gdoffs_dx")); m_Params.push_back(ParamWithName<T>(true, &m_Dx, prefix + "gdoffs_dx"));
m_Params.push_back(ParamWithName<T>(true, &m_Ax, prefix + "gdoffs_ax")); m_Params.push_back(ParamWithName<T>(true, &m_Ax, prefix + "gdoffs_ax"));
m_Params.push_back(ParamWithName<T>(true, &m_Cx, prefix + "gdoffs_cx")); m_Params.push_back(ParamWithName<T>(true, &m_Cx, prefix + "gdoffs_cx"));
@ -4698,7 +4698,7 @@ template <typename T>
class EMBER_API OctagonVariation : public ParametricVariation<T> class EMBER_API OctagonVariation : public ParametricVariation<T>
{ {
public: public:
OctagonVariation(T weight = 1.0) : ParametricVariation<T>("octagon", VAR_OCTAGON, weight) OctagonVariation(T weight = 1.0) : ParametricVariation<T>("octagon", eVariationId::VAR_OCTAGON, weight)
{ {
Init(); Init();
} }
@ -4842,7 +4842,7 @@ template <typename T>
class EMBER_API TradeVariation : public ParametricVariation<T> class EMBER_API TradeVariation : public ParametricVariation<T>
{ {
public: public:
TradeVariation(T weight = 1.0) : ParametricVariation<T>("trade", VAR_TRADE, weight) TradeVariation(T weight = 1.0) : ParametricVariation<T>("trade", eVariationId::VAR_TRADE, weight)
{ {
Init(); Init();
} }
@ -4892,7 +4892,7 @@ public:
} }
} }
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -4950,7 +4950,7 @@ public:
<< "\t\t }\n" << "\t\t }\n"
<< "\t\t}\n" << "\t\t}\n"
<< "\n" << "\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -4968,10 +4968,10 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_R1, prefix + "trade_r1", 1, REAL, EPS, TMAX)); m_Params.push_back(ParamWithName<T>(&m_R1, prefix + "trade_r1", 1, eParamType::REAL, EPS, TMAX));
m_Params.push_back(ParamWithName<T>(&m_D1, prefix + "trade_d1", 1, REAL, 0, TMAX)); m_Params.push_back(ParamWithName<T>(&m_D1, prefix + "trade_d1", 1, eParamType::REAL, 0, TMAX));
m_Params.push_back(ParamWithName<T>(&m_R2, prefix + "trade_r2", 1, REAL, EPS, TMAX)); m_Params.push_back(ParamWithName<T>(&m_R2, prefix + "trade_r2", 1, eParamType::REAL, EPS, TMAX));
m_Params.push_back(ParamWithName<T>(&m_D2, prefix + "trade_d2", 1, REAL, 0, TMAX)); m_Params.push_back(ParamWithName<T>(&m_D2, prefix + "trade_d2", 1, eParamType::REAL, 0, TMAX));
m_Params.push_back(ParamWithName<T>(true, &m_C1, prefix + "trade_c1")); m_Params.push_back(ParamWithName<T>(true, &m_C1, prefix + "trade_c1"));
m_Params.push_back(ParamWithName<T>(true, &m_C2, prefix + "trade_c2")); m_Params.push_back(ParamWithName<T>(true, &m_C2, prefix + "trade_c2"));
} }
@ -4992,7 +4992,7 @@ template <typename T>
class EMBER_API JuliacVariation : public ParametricVariation<T> class EMBER_API JuliacVariation : public ParametricVariation<T>
{ {
public: public:
JuliacVariation(T weight = 1.0) : ParametricVariation<T>("Juliac", VAR_JULIAC, weight, true, false, false, false, true) JuliacVariation(T weight = 1.0) : ParametricVariation<T>("Juliac", eVariationId::VAR_JULIAC, weight, true, false, false, false, true)
{ {
Init(); Init();
} }
@ -5008,7 +5008,7 @@ public:
helper.Out.x = m_Weight * mod2 * std::cos(temp); helper.Out.x = m_Weight * mod2 * std::cos(temp);
helper.Out.y = m_Weight * mod2 * std::sin(temp); helper.Out.y = m_Weight * mod2 * std::sin(temp);
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -5031,7 +5031,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * mod2 * cos(temp);\n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * mod2 * cos(temp);\n"
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * mod2 * sin(temp);\n" << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * mod2 * sin(temp);\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -5071,7 +5071,7 @@ template <typename T>
class EMBER_API Blade3DVariation : public Variation<T> class EMBER_API Blade3DVariation : public Variation<T>
{ {
public: public:
Blade3DVariation(T weight = 1.0) : Variation<T>("blade3D", VAR_BLADE3D, weight, true, true) { } Blade3DVariation(T weight = 1.0) : Variation<T>("blade3D", eVariationId::VAR_BLADE3D, weight, true, true) { }
VARCOPY(Blade3DVariation) VARCOPY(Blade3DVariation)
@ -5112,7 +5112,7 @@ template <typename T>
class EMBER_API Blob3DVariation : public ParametricVariation<T> class EMBER_API Blob3DVariation : public ParametricVariation<T>
{ {
public: public:
Blob3DVariation(T weight = 1.0) : ParametricVariation<T>("blob3D", VAR_BLOB3D, weight, true, true, true, true) Blob3DVariation(T weight = 1.0) : ParametricVariation<T>("blob3D", eVariationId::VAR_BLOB3D, weight, true, true, true, true)
{ {
Init(); Init();
} }
@ -5188,7 +5188,7 @@ template <typename T>
class EMBER_API BlockyVariation : public ParametricVariation<T> class EMBER_API BlockyVariation : public ParametricVariation<T>
{ {
public: public:
BlockyVariation(T weight = 1.0) : ParametricVariation<T>("blocky", VAR_BLOCKY, weight, true) BlockyVariation(T weight = 1.0) : ParametricVariation<T>("blocky", eVariationId::VAR_BLOCKY, weight, true)
{ {
Init(); Init();
} }
@ -5213,7 +5213,7 @@ public:
b = SafeSqrt(1 - SQR(a)); b = SafeSqrt(1 - SQR(a));
helper.Out.y = m_Vy * atan2(a, b) * r; helper.Out.y = m_Vy * atan2(a, b) * r;
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -5246,7 +5246,7 @@ public:
<< "\t\tb = SafeSqrt(1 - SQR(a));\n" << "\t\tb = SafeSqrt(1 - SQR(a));\n"
<< "\n" << "\n"
<< "\t\tvOut.y = " << vy << " * atan2(a, b) * r;\n" << "\t\tvOut.y = " << vy << " * atan2(a, b) * r;\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -5272,7 +5272,7 @@ protected:
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_X, prefix + "blocky_x", 1)); m_Params.push_back(ParamWithName<T>(&m_X, prefix + "blocky_x", 1));
m_Params.push_back(ParamWithName<T>(&m_Y, prefix + "blocky_y", 1)); m_Params.push_back(ParamWithName<T>(&m_Y, prefix + "blocky_y", 1));
m_Params.push_back(ParamWithName<T>(&m_Mp, prefix + "blocky_mp", 4, REAL_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Mp, prefix + "blocky_mp", 4, eParamType::REAL_NONZERO));
m_Params.push_back(ParamWithName<T>(true, &m_V, prefix + "blocky_v"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_V, prefix + "blocky_v"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_Vx, prefix + "blocky_vx")); m_Params.push_back(ParamWithName<T>(true, &m_Vx, prefix + "blocky_vx"));
m_Params.push_back(ParamWithName<T>(true, &m_Vy, prefix + "blocky_vy")); m_Params.push_back(ParamWithName<T>(true, &m_Vy, prefix + "blocky_vy"));
@ -5303,9 +5303,9 @@ MAKEPREPOSTPARVAR(RBlur, rblur, RBLUR)
MAKEPREPOSTPARVAR(JuliaNab, juliaNab, JULIANAB) MAKEPREPOSTPARVAR(JuliaNab, juliaNab, JULIANAB)
MAKEPREPOSTPARVAR(Sintrange, sintrange, SINTRANGE) MAKEPREPOSTPARVAR(Sintrange, sintrange, SINTRANGE)
MAKEPREPOSTPARVAR(Voron, Voron, VORON) MAKEPREPOSTPARVAR(Voron, Voron, VORON)
MAKEPREPOSTPARVARASSIGN(Waffle, waffle, WAFFLE, ASSIGNTYPE_SUM) MAKEPREPOSTPARVARASSIGN(Waffle, waffle, WAFFLE, eVariationAssignType::ASSIGNTYPE_SUM)
MAKEPREPOSTVARASSIGN(Square3D, square3D, SQUARE3D, ASSIGNTYPE_SUM) MAKEPREPOSTVARASSIGN(Square3D, square3D, SQUARE3D, eVariationAssignType::ASSIGNTYPE_SUM)
MAKEPREPOSTPARVARASSIGN(SuperShape3D, SuperShape3D, SUPER_SHAPE3D, ASSIGNTYPE_SUM) MAKEPREPOSTPARVARASSIGN(SuperShape3D, SuperShape3D, SUPER_SHAPE3D, eVariationAssignType::ASSIGNTYPE_SUM)
MAKEPREPOSTPARVAR(Sphyp3D, sphyp3D, SPHYP3D) MAKEPREPOSTPARVAR(Sphyp3D, sphyp3D, SPHYP3D)
MAKEPREPOSTPARVAR(Circlecrop, circlecrop, CIRCLECROP) MAKEPREPOSTPARVAR(Circlecrop, circlecrop, CIRCLECROP)
MAKEPREPOSTPARVAR(Julian3Dx, julian3Dx, JULIAN3DX) MAKEPREPOSTPARVAR(Julian3Dx, julian3Dx, JULIAN3DX)
@ -5332,7 +5332,7 @@ MAKEPREPOSTVAR(Estiq, estiq, ESTIQ)
MAKEPREPOSTPARVAR(Loq, loq, LOQ) MAKEPREPOSTPARVAR(Loq, loq, LOQ)
MAKEPREPOSTVAR(Curvature, curvature, CURVATURE) MAKEPREPOSTVAR(Curvature, curvature, CURVATURE)
MAKEPREPOSTPARVAR(Qode, q_ode, Q_ODE) MAKEPREPOSTPARVAR(Qode, q_ode, Q_ODE)
MAKEPREPOSTPARVARASSIGN(BlurHeart, blur_heart, BLUR_HEART, ASSIGNTYPE_SUM) MAKEPREPOSTPARVARASSIGN(BlurHeart, blur_heart, BLUR_HEART, eVariationAssignType::ASSIGNTYPE_SUM)
MAKEPREPOSTPARVAR(Truchet, Truchet, TRUCHET) MAKEPREPOSTPARVAR(Truchet, Truchet, TRUCHET)
MAKEPREPOSTPARVAR(Gdoffs, gdoffs, GDOFFS) MAKEPREPOSTPARVAR(Gdoffs, gdoffs, GDOFFS)
MAKEPREPOSTPARVAR(Octagon, octagon, OCTAGON) MAKEPREPOSTPARVAR(Octagon, octagon, OCTAGON)
@ -5350,7 +5350,7 @@ MAKEPREPOSTPARVAR(Blocky, blocky, BLOCKY)
//class EMBER_API LinearXZVariation : public Variation<T> //class EMBER_API LinearXZVariation : public Variation<T>
//{ //{
//public: //public:
// LinearXZVariation(T weight = 1.0) : Variation<T>("linearxz", VAR_LINEAR_XZ, weight) { } // LinearXZVariation(T weight = 1.0) : Variation<T>("linearxz", eVariationId::VAR_LINEAR_XZ, weight) { }
// //
// VARCOPY(LinearXZVariation) // VARCOPY(LinearXZVariation)
// //
@ -5381,7 +5381,7 @@ MAKEPREPOSTPARVAR(Blocky, blocky, BLOCKY)
//class EMBER_API LinearYZVariation : public Variation<T> //class EMBER_API LinearYZVariation : public Variation<T>
//{ //{
//public: //public:
// LinearYZVariation(T weight = 1.0) : Variation<T>("linearyz", VAR_LINEAR_YZ, weight) { } // LinearYZVariation(T weight = 1.0) : Variation<T>("linearyz", eVariationId::VAR_LINEAR_YZ, weight) { }
// //
// VARCOPY(LinearYZVariation) // VARCOPY(LinearYZVariation)
// //

View File

@ -11,7 +11,7 @@ template <typename T>
class EMBER_API Bubble2Variation : public ParametricVariation<T> class EMBER_API Bubble2Variation : public ParametricVariation<T>
{ {
public: public:
Bubble2Variation(T weight = 1.0) : ParametricVariation<T>("bubble2", VAR_BUBBLE2, weight, true) Bubble2Variation(T weight = 1.0) : ParametricVariation<T>("bubble2", eVariationId::VAR_BUBBLE2, weight, true)
{ {
Init(); Init();
} }
@ -86,7 +86,7 @@ template <typename T>
class EMBER_API CircleLinearVariation : public ParametricVariation<T> class EMBER_API CircleLinearVariation : public ParametricVariation<T>
{ {
public: public:
CircleLinearVariation(T weight = 1.0) : ParametricVariation<T>("CircleLinear", VAR_CIRCLELINEAR, weight) CircleLinearVariation(T weight = 1.0) : ParametricVariation<T>("CircleLinear", eVariationId::VAR_CIRCLELINEAR, weight)
{ {
Init(); Init();
} }
@ -139,7 +139,7 @@ public:
helper.Out.x = m_Weight * (x + (m * 2 + 1) * m_Sc); helper.Out.x = m_Weight * (x + (m * 2 + 1) * m_Sc);
helper.Out.y = m_Weight * (y + (n * 2 + 1) * m_Sc); helper.Out.y = m_Weight * (y + (n * 2 + 1) * m_Sc);
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -202,7 +202,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (x + (m * 2 + 1) * " << sc << ");\n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (x + (m * 2 + 1) * " << sc << ");\n"
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * (y + (n * 2 + 1) * " << sc << ");\n" << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * (y + (n * 2 + 1) * " << sc << ");\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -234,14 +234,14 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Sc, prefix + "CircleLinear_Sc", 1, REAL_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Sc, prefix + "CircleLinear_Sc", 1, eParamType::REAL_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_K, prefix + "CircleLinear_K", T(0.5))); m_Params.push_back(ParamWithName<T>(&m_K, prefix + "CircleLinear_K", T(0.5)));
m_Params.push_back(ParamWithName<T>(&m_Dens1, prefix + "CircleLinear_Dens1", T(0.5))); m_Params.push_back(ParamWithName<T>(&m_Dens1, prefix + "CircleLinear_Dens1", T(0.5)));
m_Params.push_back(ParamWithName<T>(&m_Dens2, prefix + "CircleLinear_Dens2", T(0.5))); m_Params.push_back(ParamWithName<T>(&m_Dens2, prefix + "CircleLinear_Dens2", T(0.5)));
m_Params.push_back(ParamWithName<T>(&m_Reverse, prefix + "CircleLinear_Reverse", 1)); m_Params.push_back(ParamWithName<T>(&m_Reverse, prefix + "CircleLinear_Reverse", 1));
m_Params.push_back(ParamWithName<T>(&m_X, prefix + "CircleLinear_X", 10)); m_Params.push_back(ParamWithName<T>(&m_X, prefix + "CircleLinear_X", 10));
m_Params.push_back(ParamWithName<T>(&m_Y, prefix + "CircleLinear_Y", 10)); m_Params.push_back(ParamWithName<T>(&m_Y, prefix + "CircleLinear_Y", 10));
m_Params.push_back(ParamWithName<T>(&m_Seed, prefix + "CircleLinear_Seed", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_Seed, prefix + "CircleLinear_Seed", 0, eParamType::INTEGER));
} }
private: private:
@ -273,7 +273,7 @@ template <typename T>
class EMBER_API CircleRandVariation : public ParametricVariation<T> class EMBER_API CircleRandVariation : public ParametricVariation<T>
{ {
public: public:
CircleRandVariation(T weight = 1.0) : ParametricVariation<T>("CircleRand", VAR_CIRCLERAND, weight) CircleRandVariation(T weight = 1.0) : ParametricVariation<T>("CircleRand", eVariationId::VAR_CIRCLERAND, weight)
{ {
Init(); Init();
} }
@ -302,7 +302,7 @@ public:
helper.Out.x = m_Weight * (x + (m * 2 + 1) * m_Sc); helper.Out.x = m_Weight * (x + (m * 2 + 1) * m_Sc);
helper.Out.y = m_Weight * (y + (n * 2 + 1) * m_Sc); helper.Out.y = m_Weight * (y + (n * 2 + 1) * m_Sc);
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -338,7 +338,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (x + (m * 2 + 1) * " << sc << ");\n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (x + (m * 2 + 1) * " << sc << ");\n"
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * (y + (n * 2 + 1) * " << sc << ");\n" << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * (y + (n * 2 + 1) * " << sc << ");\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -370,11 +370,11 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Sc, prefix + "CircleRand_Sc", 1, REAL_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Sc, prefix + "CircleRand_Sc", 1, eParamType::REAL_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_Dens, prefix + "CircleRand_Dens", T(0.5))); m_Params.push_back(ParamWithName<T>(&m_Dens, prefix + "CircleRand_Dens", T(0.5)));
m_Params.push_back(ParamWithName<T>(&m_X, prefix + "CircleRand_X", 10)); m_Params.push_back(ParamWithName<T>(&m_X, prefix + "CircleRand_X", 10));
m_Params.push_back(ParamWithName<T>(&m_Y, prefix + "CircleRand_Y", 10)); m_Params.push_back(ParamWithName<T>(&m_Y, prefix + "CircleRand_Y", 10));
m_Params.push_back(ParamWithName<T>(&m_Seed, prefix + "CircleRand_Seed", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_Seed, prefix + "CircleRand_Seed", 0, eParamType::INTEGER));
} }
private: private:
@ -403,7 +403,7 @@ template <typename T>
class EMBER_API CircleTrans1Variation : public ParametricVariation<T> class EMBER_API CircleTrans1Variation : public ParametricVariation<T>
{ {
public: public:
CircleTrans1Variation(T weight = 1.0) : ParametricVariation<T>("CircleTrans1", VAR_CIRCLETRANS1, weight) CircleTrans1Variation(T weight = 1.0) : ParametricVariation<T>("CircleTrans1", eVariationId::VAR_CIRCLETRANS1, weight)
{ {
Init(); Init();
} }
@ -435,7 +435,7 @@ public:
helper.Out.x = m_Weight * ux; helper.Out.x = m_Weight * ux;
helper.Out.y = m_Weight * uy; helper.Out.y = m_Weight * uy;
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -474,7 +474,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * ux;\n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * ux;\n"
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * uy;\n" << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * uy;\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -537,11 +537,11 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Sc, prefix + "CircleTrans1_Sc", 1, REAL_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Sc, prefix + "CircleTrans1_Sc", 1, eParamType::REAL_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_Dens, prefix + "CircleTrans1_Dens", T(0.5))); m_Params.push_back(ParamWithName<T>(&m_Dens, prefix + "CircleTrans1_Dens", T(0.5)));
m_Params.push_back(ParamWithName<T>(&m_X, prefix + "CircleTrans1_X", 10)); m_Params.push_back(ParamWithName<T>(&m_X, prefix + "CircleTrans1_X", 10));
m_Params.push_back(ParamWithName<T>(&m_Y, prefix + "CircleTrans1_Y", 10)); m_Params.push_back(ParamWithName<T>(&m_Y, prefix + "CircleTrans1_Y", 10));
m_Params.push_back(ParamWithName<T>(&m_Seed, prefix + "CircleTrans1_Seed", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_Seed, prefix + "CircleTrans1_Seed", 0, eParamType::INTEGER));
} }
private: private:
@ -600,7 +600,7 @@ template <typename T>
class EMBER_API Cubic3DVariation : public ParametricVariation<T> class EMBER_API Cubic3DVariation : public ParametricVariation<T>
{ {
public: public:
Cubic3DVariation(T weight = 1.0) : ParametricVariation<T>("cubic3D", VAR_CUBIC3D, weight) Cubic3DVariation(T weight = 1.0) : ParametricVariation<T>("cubic3D", eVariationId::VAR_CUBIC3D, weight)
{ {
Init(); Init();
} }
@ -622,7 +622,7 @@ public:
else else
znxy = 1 - (m_SmoothStyle * (1 - ((exnze + wynze) * T(0.5)))); znxy = 1 - (m_SmoothStyle * (1 - ((exnze + wynze) * T(0.5))));
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
px = helper.In.x; px = helper.In.x;
py = helper.In.y; py = helper.In.y;
@ -707,7 +707,7 @@ public:
<< "\t\telse\n" << "\t\telse\n"
<< "\t\t znxy = 1 - (" << smoothStyle << " * (1 - ((exnze + wynze) * (real_t)(0.5))));\n"; << "\t\t znxy = 1 - (" << smoothStyle << " * (1 - ((exnze + wynze) * (real_t)(0.5))));\n";
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
ss << ss <<
"\t\tpx = vIn.x;\n" "\t\tpx = vIn.x;\n"
@ -824,7 +824,7 @@ template <typename T>
class EMBER_API CubicLattice3DVariation : public ParametricVariation<T> class EMBER_API CubicLattice3DVariation : public ParametricVariation<T>
{ {
public: public:
CubicLattice3DVariation(T weight = 1.0) : ParametricVariation<T>("cubicLattice_3D", VAR_CUBIC_LATTICE3D, weight) CubicLattice3DVariation(T weight = 1.0) : ParametricVariation<T>("cubicLattice_3D", eVariationId::VAR_CUBIC_LATTICE3D, weight)
{ {
Init(); Init();
} }
@ -849,7 +849,7 @@ public:
znxy = 1; znxy = 1;
} }
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
px = helper.In.x; px = helper.In.x;
py = helper.In.y; py = helper.In.y;
@ -939,7 +939,7 @@ public:
<< "\t\t znxy = 1;\n" << "\t\t znxy = 1;\n"
<< "\t\t}\n"; << "\t\t}\n";
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
ss << ss <<
"\t\tpx = vIn.x;\n" "\t\tpx = vIn.x;\n"
@ -1021,7 +1021,7 @@ protected:
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Xpand, prefix + "cubicLattice_3D_xpand", T(0.2)));//Original used a prefix of cubic3D_, which is incompatible with Ember's design. m_Params.push_back(ParamWithName<T>(&m_Xpand, prefix + "cubicLattice_3D_xpand", T(0.2)));//Original used a prefix of cubic3D_, which is incompatible with Ember's design.
m_Params.push_back(ParamWithName<T>(&m_Style, prefix + "cubicLattice_3D_style", 1, INTEGER, 1, 2)); m_Params.push_back(ParamWithName<T>(&m_Style, prefix + "cubicLattice_3D_style", 1, eParamType::INTEGER, 1, 2));
m_Params.push_back(ParamWithName<T>(true, &m_Fill, prefix + "cubicLattice_3D_fill"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_Fill, prefix + "cubicLattice_3D_fill"));//Precalc.
} }
@ -1038,7 +1038,7 @@ template <typename T>
class EMBER_API Foci3DVariation : public Variation<T> class EMBER_API Foci3DVariation : public Variation<T>
{ {
public: public:
Foci3DVariation(T weight = 1.0) : Variation<T>("foci_3D", VAR_FOCI3D, weight, false, false, false, false, true) { } Foci3DVariation(T weight = 1.0) : Variation<T>("foci_3D", eVariationId::VAR_FOCI3D, weight, false, false, false, false, true) { }
VARCOPY(Foci3DVariation) VARCOPY(Foci3DVariation)
@ -1081,7 +1081,7 @@ template <typename T>
class EMBER_API HoVariation : public ParametricVariation<T> class EMBER_API HoVariation : public ParametricVariation<T>
{ {
public: public:
HoVariation(T weight = 1.0) : ParametricVariation<T>("ho", VAR_HO, weight) HoVariation(T weight = 1.0) : ParametricVariation<T>("ho", eVariationId::VAR_HO, weight)
{ {
Init(); Init();
} }
@ -1168,7 +1168,7 @@ template <typename T>
class EMBER_API Julia3DqVariation : public ParametricVariation<T> class EMBER_API Julia3DqVariation : public ParametricVariation<T>
{ {
public: public:
Julia3DqVariation(T weight = 1.0) : ParametricVariation<T>("julia3Dq", VAR_JULIA3DQ, weight, true, true, false, false, true) Julia3DqVariation(T weight = 1.0) : ParametricVariation<T>("julia3Dq", eVariationId::VAR_JULIA3DQ, weight, true, true, false, false, true)
{ {
Init(); Init();
} }
@ -1234,8 +1234,8 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "julia3Dq_power", 3, INTEGER_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "julia3Dq_power", 3, eParamType::INTEGER_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_Divisor, prefix + "julia3Dq_divisor", 2, INTEGER_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Divisor, prefix + "julia3Dq_divisor", 2, eParamType::INTEGER_NONZERO));
m_Params.push_back(ParamWithName<T>(true, &m_InvPower, prefix + "julia3Dq_inv_power"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_InvPower, prefix + "julia3Dq_inv_power"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_AbsInvPower, prefix + "julia3Dq_abs_inv_power")); m_Params.push_back(ParamWithName<T>(true, &m_AbsInvPower, prefix + "julia3Dq_abs_inv_power"));
m_Params.push_back(ParamWithName<T>(true, &m_HalfInvPower, prefix + "julia3Dq_half_inv_power")); m_Params.push_back(ParamWithName<T>(true, &m_HalfInvPower, prefix + "julia3Dq_half_inv_power"));
@ -1258,7 +1258,7 @@ template <typename T>
class EMBER_API LineVariation : public ParametricVariation<T> class EMBER_API LineVariation : public ParametricVariation<T>
{ {
public: public:
LineVariation(T weight = 1.0) : ParametricVariation<T>("line", VAR_LINE, weight) LineVariation(T weight = 1.0) : ParametricVariation<T>("line", eVariationId::VAR_LINE, weight)
{ {
Init(); Init();
} }
@ -1340,7 +1340,7 @@ template <typename T>
class EMBER_API Loonie2Variation : public ParametricVariation<T> class EMBER_API Loonie2Variation : public ParametricVariation<T>
{ {
public: public:
Loonie2Variation(T weight = 1.0) : ParametricVariation<T>("loonie2", VAR_LOONIE2, weight, true, true) Loonie2Variation(T weight = 1.0) : ParametricVariation<T>("loonie2", eVariationId::VAR_LOONIE2, weight, true, true)
{ {
Init(); Init();
} }
@ -1390,7 +1390,7 @@ public:
helper.Out.y = m_Weight * helper.In.y; helper.Out.y = m_Weight * helper.In.y;
} }
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -1452,7 +1452,7 @@ public:
<< "\t\t vOut.y = xform->m_VariationWeights[" << varIndex << "] * vIn.y;\n" << "\t\t vOut.y = xform->m_VariationWeights[" << varIndex << "] * vIn.y;\n"
<< "\t\t}\n" << "\t\t}\n"
<< "\n" << "\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -1476,9 +1476,9 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Sides, prefix + "loonie2_sides", 4, INTEGER, 1, 50)); m_Params.push_back(ParamWithName<T>(&m_Sides, prefix + "loonie2_sides", 4, eParamType::INTEGER, 1, 50));
m_Params.push_back(ParamWithName<T>(&m_Star, prefix + "loonie2_star", 0, REAL, -1, 1)); m_Params.push_back(ParamWithName<T>(&m_Star, prefix + "loonie2_star", 0, eParamType::REAL, -1, 1));
m_Params.push_back(ParamWithName<T>(&m_Circle, prefix + "loonie2_circle", 0, REAL, -1, 1)); m_Params.push_back(ParamWithName<T>(&m_Circle, prefix + "loonie2_circle", 0, eParamType::REAL, -1, 1));
m_Params.push_back(ParamWithName<T>(true, &m_W2, prefix + "loonie2_w2"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_W2, prefix + "loonie2_w2"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_Sina, prefix + "loonie2_sina")); m_Params.push_back(ParamWithName<T>(true, &m_Sina, prefix + "loonie2_sina"));
m_Params.push_back(ParamWithName<T>(true, &m_Cosa, prefix + "loonie2_cosa")); m_Params.push_back(ParamWithName<T>(true, &m_Cosa, prefix + "loonie2_cosa"));
@ -1508,7 +1508,7 @@ template <typename T>
class EMBER_API Loonie3Variation : public ParametricVariation<T> class EMBER_API Loonie3Variation : public ParametricVariation<T>
{ {
public: public:
Loonie3Variation(T weight = 1.0) : ParametricVariation<T>("loonie3", VAR_LOONIE3, weight, true) Loonie3Variation(T weight = 1.0) : ParametricVariation<T>("loonie3", eVariationId::VAR_LOONIE3, weight, true)
{ {
Init(); Init();
} }
@ -1537,7 +1537,7 @@ public:
helper.Out.y = m_Weight * helper.In.y; helper.Out.y = m_Weight * helper.In.y;
} }
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -1569,7 +1569,7 @@ public:
<< "\t\t vOut.y = xform->m_VariationWeights[" << varIndex << "] * vIn.y;\n" << "\t\t vOut.y = xform->m_VariationWeights[" << varIndex << "] * vIn.y;\n"
<< "\t\t}\n" << "\t\t}\n"
<< "\n" << "\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -1600,7 +1600,7 @@ template <typename T>
class EMBER_API Loonie3DVariation : public ParametricVariation<T> class EMBER_API Loonie3DVariation : public ParametricVariation<T>
{ {
public: public:
Loonie3DVariation(T weight = 1.0) : ParametricVariation<T>("loonie_3D", VAR_LOONIE3D, weight, true, false, false, false, true) Loonie3DVariation(T weight = 1.0) : ParametricVariation<T>("loonie_3D", eVariationId::VAR_LOONIE3D, weight, true, false, false, false, true)
{ {
Init(); Init();
} }
@ -1686,7 +1686,7 @@ template <typename T>
class EMBER_API McarpetVariation : public ParametricVariation<T> class EMBER_API McarpetVariation : public ParametricVariation<T>
{ {
public: public:
McarpetVariation(T weight = 1.0) : ParametricVariation<T>("mcarpet", VAR_MCARPET, weight, true) McarpetVariation(T weight = 1.0) : ParametricVariation<T>("mcarpet", eVariationId::VAR_MCARPET, weight, true)
{ {
Init(); Init();
} }
@ -1702,7 +1702,7 @@ public:
helper.Out.y = helper.In.y * r * m_Y; helper.Out.y = helper.In.y * r * m_Y;
helper.Out.x += (1 - (m_Twist * SQR(helper.In.x)) + helper.In.y) * m_Weight;//The += is intentional. helper.Out.x += (1 - (m_Twist * SQR(helper.In.x)) + helper.In.y) * m_Weight;//The += is intentional.
helper.Out.y += m_Tilt * helper.In.x * m_Weight; helper.Out.y += m_Tilt * helper.In.x * m_Weight;
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -1724,7 +1724,7 @@ public:
<< "\t\tvOut.y = vIn.y * r * " << y << ";\n" << "\t\tvOut.y = vIn.y * r * " << y << ";\n"
<< "\t\tvOut.x += (1 - (" << twist << " * SQR(vIn.x)) + vIn.y) * xform->m_VariationWeights[" << varIndex << "];\n" << "\t\tvOut.x += (1 - (" << twist << " * SQR(vIn.x)) + vIn.y) * xform->m_VariationWeights[" << varIndex << "];\n"
<< "\t\tvOut.y += " << tilt << " * vIn.x * xform->m_VariationWeights[" << varIndex << "];\n" << "\t\tvOut.y += " << tilt << " * vIn.x * xform->m_VariationWeights[" << varIndex << "];\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -1759,7 +1759,7 @@ template <typename T>
class EMBER_API Waves23DVariation : public ParametricVariation<T> class EMBER_API Waves23DVariation : public ParametricVariation<T>
{ {
public: public:
Waves23DVariation(T weight = 1.0) : ParametricVariation<T>("waves2_3D", VAR_WAVES23D, weight) Waves23DVariation(T weight = 1.0) : ParametricVariation<T>("waves2_3D", eVariationId::VAR_WAVES23D, weight)
{ {
Init(); Init();
} }
@ -1817,7 +1817,7 @@ template <typename T>
class EMBER_API Pie3DVariation : public ParametricVariation<T> class EMBER_API Pie3DVariation : public ParametricVariation<T>
{ {
public: public:
Pie3DVariation(T weight = 1.0) : ParametricVariation<T>("pie3D", VAR_PIE3D, weight) Pie3DVariation(T weight = 1.0) : ParametricVariation<T>("pie3D", eVariationId::VAR_PIE3D, weight)
{ {
Init(); Init();
} }
@ -1871,9 +1871,9 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Slices, prefix + "pie3D_slices", 6, INTEGER_NONZERO, 1)); m_Params.push_back(ParamWithName<T>(&m_Slices, prefix + "pie3D_slices", 6, eParamType::INTEGER_NONZERO, 1));
m_Params.push_back(ParamWithName<T>(&m_Rotation, prefix + "pie3D_rotation", T(0.5), REAL_CYCLIC, 0, M_2PI)); m_Params.push_back(ParamWithName<T>(&m_Rotation, prefix + "pie3D_rotation", T(0.5), eParamType::REAL_CYCLIC, 0, M_2PI));
m_Params.push_back(ParamWithName<T>(&m_Thickness, prefix + "pie3D_thickness", T(0.5), REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_Thickness, prefix + "pie3D_thickness", T(0.5), eParamType::REAL, 0, 1));
} }
private: private:
@ -1889,7 +1889,7 @@ template <typename T>
class EMBER_API Popcorn23DVariation : public ParametricVariation<T> class EMBER_API Popcorn23DVariation : public ParametricVariation<T>
{ {
public: public:
Popcorn23DVariation(T weight = 1.0) : ParametricVariation<T>("popcorn2_3D", VAR_POPCORN23D, weight, false, false, false, false, true) Popcorn23DVariation(T weight = 1.0) : ParametricVariation<T>("popcorn2_3D", eVariationId::VAR_POPCORN23D, weight, false, false, false, false, true)
{ {
Init(); Init();
} }
@ -1901,7 +1901,7 @@ public:
T otherZ, tempPZ = 0; T otherZ, tempPZ = 0;
T tempTZ = helper.In.z == 0 ? m_Vv * m_SinTanC * helper.m_PrecalcAtanyx : helper.In.z; T tempTZ = helper.In.z == 0 ? m_Vv * m_SinTanC * helper.m_PrecalcAtanyx : helper.In.z;
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
otherZ = helper.In.z; otherZ = helper.In.z;
else else
otherZ = outPoint.m_Z; otherZ = outPoint.m_Z;
@ -1932,7 +1932,7 @@ public:
<< "\t\treal_t otherZ, tempPZ = 0;\n" << "\t\treal_t otherZ, tempPZ = 0;\n"
<< "\t\treal_t tempTZ = vIn.z == 0 ? " << vv << " * " << stc << " * precalcAtanyx : vIn.z;\n"; << "\t\treal_t tempTZ = vIn.z == 0 ? " << vv << " * " << stc << " * precalcAtanyx : vIn.z;\n";
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
ss << "\t\totherZ = vIn.z;\n"; ss << "\t\totherZ = vIn.z;\n";
else else
ss << "\t\totherZ = outPoint->m_Z;\n"; ss << "\t\totherZ = outPoint->m_Z;\n";
@ -2004,7 +2004,7 @@ template <typename T>
class EMBER_API Sinusoidal3DVariation : public Variation<T> class EMBER_API Sinusoidal3DVariation : public Variation<T>
{ {
public: public:
Sinusoidal3DVariation(T weight = 1.0) : Variation<T>("sinusoidal3D", VAR_SINUSOIDAL3D, weight) { } Sinusoidal3DVariation(T weight = 1.0) : Variation<T>("sinusoidal3D", eVariationId::VAR_SINUSOIDAL3D, weight) { }
VARCOPY(Sinusoidal3DVariation) VARCOPY(Sinusoidal3DVariation)
@ -2037,7 +2037,7 @@ template <typename T>
class EMBER_API Scry3DVariation : public ParametricVariation<T> class EMBER_API Scry3DVariation : public ParametricVariation<T>
{ {
public: public:
Scry3DVariation(T weight = 1.0) : ParametricVariation<T>("scry_3D", VAR_SCRY3D, weight, true, false, false, false, true) Scry3DVariation(T weight = 1.0) : ParametricVariation<T>("scry_3D", eVariationId::VAR_SCRY3D, weight, true, false, false, false, true)
{ {
Init(); Init();
} }
@ -2101,7 +2101,7 @@ template <typename T>
class EMBER_API ShredlinVariation : public ParametricVariation<T> class EMBER_API ShredlinVariation : public ParametricVariation<T>
{ {
public: public:
ShredlinVariation(T weight = 1.0) : ParametricVariation<T>("shredlin", VAR_SHRED_LIN, weight) ShredlinVariation(T weight = 1.0) : ParametricVariation<T>("shredlin", eVariationId::VAR_SHRED_LIN, weight)
{ {
Init(); Init();
} }
@ -2163,10 +2163,10 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_XDistance, prefix + "shredlin_xdistance", 1, REAL_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_XDistance, prefix + "shredlin_xdistance", 1, eParamType::REAL_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_XWidth, prefix + "shredlin_xwidth", T(0.5), REAL, -1, 1)); m_Params.push_back(ParamWithName<T>(&m_XWidth, prefix + "shredlin_xwidth", T(0.5), eParamType::REAL, -1, 1));
m_Params.push_back(ParamWithName<T>(&m_YDistance, prefix + "shredlin_ydistance", 1, REAL_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_YDistance, prefix + "shredlin_ydistance", 1, eParamType::REAL_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_YWidth, prefix + "shredlin_ywidth", T(0.5), REAL, -1, 1)); m_Params.push_back(ParamWithName<T>(&m_YWidth, prefix + "shredlin_ywidth", T(0.5), eParamType::REAL, -1, 1));
m_Params.push_back(ParamWithName<T>(true, &m_Xw, prefix + "shredlin_xw")); m_Params.push_back(ParamWithName<T>(true, &m_Xw, prefix + "shredlin_xw"));
m_Params.push_back(ParamWithName<T>(true, &m_Yw, prefix + "shredlin_yw")); m_Params.push_back(ParamWithName<T>(true, &m_Yw, prefix + "shredlin_yw"));
m_Params.push_back(ParamWithName<T>(true, &m_1mX, prefix + "shredlin_1mx")); m_Params.push_back(ParamWithName<T>(true, &m_1mX, prefix + "shredlin_1mx"));
@ -2191,7 +2191,7 @@ template <typename T>
class EMBER_API SplitBrdrVariation : public ParametricVariation<T> class EMBER_API SplitBrdrVariation : public ParametricVariation<T>
{ {
public: public:
SplitBrdrVariation(T weight = 1.0) : ParametricVariation<T>("SplitBrdr", VAR_SPLIT_BRDR, weight, true) SplitBrdrVariation(T weight = 1.0) : ParametricVariation<T>("SplitBrdr", eVariationId::VAR_SPLIT_BRDR, weight, true)
{ {
Init(); Init();
} }
@ -2246,7 +2246,7 @@ public:
helper.Out.x += helper.In.x * m_Px; helper.Out.x += helper.In.x * m_Px;
helper.Out.y += helper.In.y * m_Py; helper.Out.y += helper.In.y * m_Py;
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -2307,7 +2307,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x += vIn.x * " << px << ";\n" << "\t\tvOut.x += vIn.x * " << px << ";\n"
<< "\t\tvOut.y += vIn.y * " << py << ";\n" << "\t\tvOut.y += vIn.y * " << py << ";\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -2339,7 +2339,7 @@ template <typename T>
class EMBER_API WdiscVariation : public Variation<T> class EMBER_API WdiscVariation : public Variation<T>
{ {
public: public:
WdiscVariation(T weight = 1.0) : Variation<T>("wdisc", VAR_WDISC, weight, true, true, false, false, true) { } WdiscVariation(T weight = 1.0) : Variation<T>("wdisc", eVariationId::VAR_WDISC, weight, true, true, false, false, true) { }
VARCOPY(WdiscVariation) VARCOPY(WdiscVariation)
@ -2353,7 +2353,7 @@ public:
helper.Out.x = m_Weight * r * std::cos(a); helper.Out.x = m_Weight * r * std::cos(a);
helper.Out.y = m_Weight * r * std::sin(a); helper.Out.y = m_Weight * r * std::sin(a);
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -2370,7 +2370,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * r * cos(a);\n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * r * cos(a);\n"
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * r * sin(a);\n" << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * r * sin(a);\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -2384,7 +2384,7 @@ template <typename T>
class EMBER_API FalloffVariation : public ParametricVariation<T> class EMBER_API FalloffVariation : public ParametricVariation<T>
{ {
public: public:
FalloffVariation(T weight = 1.0) : ParametricVariation<T>("falloff", VAR_FALLOFF, weight, false, false, false, false, true) FalloffVariation(T weight = 1.0) : ParametricVariation<T>("falloff", eVariationId::VAR_FALLOFF, weight, false, false, false, false, true)
{ {
Init(); Init();
} }
@ -2515,17 +2515,17 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Scatter, prefix + "falloff_scatter", 1, REAL, EPS, TMAX)); m_Params.push_back(ParamWithName<T>(&m_Scatter, prefix + "falloff_scatter", 1, eParamType::REAL, EPS, TMAX));
m_Params.push_back(ParamWithName<T>(&m_MinDist, prefix + "falloff_mindist", T(0.5), REAL, 0, TMAX)); m_Params.push_back(ParamWithName<T>(&m_MinDist, prefix + "falloff_mindist", T(0.5), eParamType::REAL, 0, TMAX));
m_Params.push_back(ParamWithName<T>(&m_MulX, prefix + "falloff_mul_x", 1, REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_MulX, prefix + "falloff_mul_x", 1, eParamType::REAL, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_MulY, prefix + "falloff_mul_y", 1, REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_MulY, prefix + "falloff_mul_y", 1, eParamType::REAL, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_MulZ, prefix + "falloff_mul_z", 0, REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_MulZ, prefix + "falloff_mul_z", 0, eParamType::REAL, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_X0, prefix + "falloff_x0")); m_Params.push_back(ParamWithName<T>(&m_X0, prefix + "falloff_x0"));
m_Params.push_back(ParamWithName<T>(&m_Y0, prefix + "falloff_y0")); m_Params.push_back(ParamWithName<T>(&m_Y0, prefix + "falloff_y0"));
m_Params.push_back(ParamWithName<T>(&m_Z0, prefix + "falloff_z0")); m_Params.push_back(ParamWithName<T>(&m_Z0, prefix + "falloff_z0"));
m_Params.push_back(ParamWithName<T>(&m_Invert, prefix + "falloff_invert", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_Invert, prefix + "falloff_invert", 0, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_Type, prefix + "falloff_type", 0, INTEGER, 0, 2)); m_Params.push_back(ParamWithName<T>(&m_Type, prefix + "falloff_type", 0, eParamType::INTEGER, 0, 2));
m_Params.push_back(ParamWithName<T>(&m_BoxPow, prefix + "falloff_boxpow", 2, INTEGER, 2, 32));//Original defaulted this to 0 which directly contradicts the specified range of 2-32. m_Params.push_back(ParamWithName<T>(&m_BoxPow, prefix + "falloff_boxpow", 2, eParamType::INTEGER, 2, 32));//Original defaulted this to 0 which directly contradicts the specified range of 2-32.
m_Params.push_back(ParamWithName<T>(true, &m_InternalScatter, prefix + "falloff_internal_scatter")); m_Params.push_back(ParamWithName<T>(true, &m_InternalScatter, prefix + "falloff_internal_scatter"));
} }
@ -2551,7 +2551,7 @@ template <typename T>
class EMBER_API Falloff2Variation : public ParametricVariation<T> class EMBER_API Falloff2Variation : public ParametricVariation<T>
{ {
public: public:
Falloff2Variation(T weight = 1.0) : ParametricVariation<T>("falloff2", VAR_FALLOFF2, weight, true, false, false, false, true) Falloff2Variation(T weight = 1.0) : ParametricVariation<T>("falloff2", eVariationId::VAR_FALLOFF2, weight, true, false, false, false, true)
{ {
Init(); Init();
} }
@ -2717,17 +2717,17 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Scatter, prefix + "falloff2_scatter", 1, REAL, EPS, TMAX)); m_Params.push_back(ParamWithName<T>(&m_Scatter, prefix + "falloff2_scatter", 1, eParamType::REAL, EPS, TMAX));
m_Params.push_back(ParamWithName<T>(&m_MinDist, prefix + "falloff2_mindist", T(0.5), REAL, 0, TMAX)); m_Params.push_back(ParamWithName<T>(&m_MinDist, prefix + "falloff2_mindist", T(0.5), eParamType::REAL, 0, TMAX));
m_Params.push_back(ParamWithName<T>(&m_MulX, prefix + "falloff2_mul_x", 1, REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_MulX, prefix + "falloff2_mul_x", 1, eParamType::REAL, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_MulY, prefix + "falloff2_mul_y", 1, REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_MulY, prefix + "falloff2_mul_y", 1, eParamType::REAL, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_MulZ, prefix + "falloff2_mul_z", 0, REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_MulZ, prefix + "falloff2_mul_z", 0, eParamType::REAL, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_MulC, prefix + "falloff2_mul_c", 0, REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_MulC, prefix + "falloff2_mul_c", 0, eParamType::REAL, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_X0, prefix + "falloff2_x0")); m_Params.push_back(ParamWithName<T>(&m_X0, prefix + "falloff2_x0"));
m_Params.push_back(ParamWithName<T>(&m_Y0, prefix + "falloff2_y0")); m_Params.push_back(ParamWithName<T>(&m_Y0, prefix + "falloff2_y0"));
m_Params.push_back(ParamWithName<T>(&m_Z0, prefix + "falloff2_z0")); m_Params.push_back(ParamWithName<T>(&m_Z0, prefix + "falloff2_z0"));
m_Params.push_back(ParamWithName<T>(&m_Invert, prefix + "falloff2_invert", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_Invert, prefix + "falloff2_invert", 0, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_Type, prefix + "falloff2_type", 0, INTEGER, 0, 2)); m_Params.push_back(ParamWithName<T>(&m_Type, prefix + "falloff2_type", 0, eParamType::INTEGER, 0, 2));
m_Params.push_back(ParamWithName<T>(true, &m_RMax, prefix + "falloff2_rmax")); m_Params.push_back(ParamWithName<T>(true, &m_RMax, prefix + "falloff2_rmax"));
} }
@ -2753,7 +2753,7 @@ template <typename T>
class EMBER_API Falloff3Variation : public ParametricVariation<T> class EMBER_API Falloff3Variation : public ParametricVariation<T>
{ {
public: public:
Falloff3Variation(T weight = 1.0) : ParametricVariation<T>("falloff3", VAR_FALLOFF3, weight, true, false, false, false, true) Falloff3Variation(T weight = 1.0) : ParametricVariation<T>("falloff3", eVariationId::VAR_FALLOFF3, weight, true, false, false, false, true)
{ {
Init(); Init();
} }
@ -2948,15 +2948,15 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_BlurType, prefix + "falloff3_blur_type", 0, INTEGER, 0, 3)); m_Params.push_back(ParamWithName<T>(&m_BlurType, prefix + "falloff3_blur_type", 0, eParamType::INTEGER, 0, 3));
m_Params.push_back(ParamWithName<T>(&m_BlurShape, prefix + "falloff3_blur_shape", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_BlurShape, prefix + "falloff3_blur_shape", 0, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_BlurStrength, prefix + "falloff3_blur_strength", 1, REAL, EPS, TMAX)); m_Params.push_back(ParamWithName<T>(&m_BlurStrength, prefix + "falloff3_blur_strength", 1, eParamType::REAL, EPS, TMAX));
m_Params.push_back(ParamWithName<T>(&m_MinDistance, prefix + "falloff3_min_distance", T(0.5), REAL, 0, TMAX)); m_Params.push_back(ParamWithName<T>(&m_MinDistance, prefix + "falloff3_min_distance", T(0.5), eParamType::REAL, 0, TMAX));
m_Params.push_back(ParamWithName<T>(&m_InvertDistance, prefix + "falloff3_invert_distance", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_InvertDistance, prefix + "falloff3_invert_distance", 0, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_MulX, prefix + "falloff3_mul_x", 1, REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_MulX, prefix + "falloff3_mul_x", 1, eParamType::REAL, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_MulY, prefix + "falloff3_mul_y", 1, REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_MulY, prefix + "falloff3_mul_y", 1, eParamType::REAL, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_MulZ, prefix + "falloff3_mul_z", 0, REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_MulZ, prefix + "falloff3_mul_z", 0, eParamType::REAL, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_MulC, prefix + "falloff3_mul_c", 0, REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_MulC, prefix + "falloff3_mul_c", 0, eParamType::REAL, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_CenterX, prefix + "falloff3_center_x")); m_Params.push_back(ParamWithName<T>(&m_CenterX, prefix + "falloff3_center_x"));
m_Params.push_back(ParamWithName<T>(&m_CenterY, prefix + "falloff3_center_y")); m_Params.push_back(ParamWithName<T>(&m_CenterY, prefix + "falloff3_center_y"));
m_Params.push_back(ParamWithName<T>(&m_CenterZ, prefix + "falloff3_center_z")); m_Params.push_back(ParamWithName<T>(&m_CenterZ, prefix + "falloff3_center_z"));
@ -2988,7 +2988,7 @@ template <typename T>
class EMBER_API XtrbVariation : public ParametricVariation<T> class EMBER_API XtrbVariation : public ParametricVariation<T>
{ {
public: public:
XtrbVariation(T weight = 1.0) : ParametricVariation<T>("xtrb", VAR_XTRB, weight) XtrbVariation(T weight = 1.0) : ParametricVariation<T>("xtrb", eVariationId::VAR_XTRB, weight)
{ {
Init(); Init();
} }
@ -3029,7 +3029,7 @@ public:
InverseTrilinear(alpha, beta, x, y, rand); InverseTrilinear(alpha, beta, x, y, rand);
helper.Out.x = m_Weight * x; helper.Out.x = m_Weight * x;
helper.Out.y = m_Weight * y; helper.Out.y = m_Weight * y;
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -3151,7 +3151,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * x;\n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * x;\n"
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * y;\n" << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * y;\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -3344,7 +3344,7 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "xtrb_power", 2, INTEGER_NONZERO)); m_Params.push_back(ParamWithName<T>(&m_Power, prefix + "xtrb_power", 2, eParamType::INTEGER_NONZERO));
m_Params.push_back(ParamWithName<T>(&m_Radius, prefix + "xtrb_radius", 1)); m_Params.push_back(ParamWithName<T>(&m_Radius, prefix + "xtrb_radius", 1));
m_Params.push_back(ParamWithName<T>(&m_Width, prefix + "xtrb_width", T(0.5))); m_Params.push_back(ParamWithName<T>(&m_Width, prefix + "xtrb_width", T(0.5)));
m_Params.push_back(ParamWithName<T>(&m_Dist, prefix + "xtrb_dist", 1)); m_Params.push_back(ParamWithName<T>(&m_Dist, prefix + "xtrb_dist", 1));
@ -3538,7 +3538,7 @@ template <typename T>
class EMBER_API Hexaplay3DVariation : public ParametricVariation<T> class EMBER_API Hexaplay3DVariation : public ParametricVariation<T>
{ {
public: public:
Hexaplay3DVariation(T weight = 1.0) : ParametricVariation<T>("hexaplay3D", VAR_HEXAPLAY3D, weight) Hexaplay3DVariation(T weight = 1.0) : ParametricVariation<T>("hexaplay3D", eVariationId::VAR_HEXAPLAY3D, weight)
{ {
Init(); Init();
} }
@ -3566,7 +3566,7 @@ public:
T boost;//Boost is the separation distance between the two planes. T boost;//Boost is the separation distance between the two planes.
T sumX, sumY; T sumX, sumY;
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
sumX = helper.In.x; sumX = helper.In.x;
sumY = helper.In.y; sumY = helper.In.y;
@ -3661,7 +3661,7 @@ public:
<< "\t\treal_t boost;\n" << "\t\treal_t boost;\n"
<< "\t\treal_t sumX, sumY;\n\n"; << "\t\treal_t sumX, sumY;\n\n";
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
ss ss
<< "\t\tsumX = vIn.x;\n" << "\t\tsumX = vIn.x;\n"
@ -3775,9 +3775,9 @@ protected:
m_Params.clear(); m_Params.clear();
m_Params.reserve(25); m_Params.reserve(25);
m_Params.push_back(ParamWithName<T>(&m_MajP, prefix + "hexaplay3D_majp", 1, REAL)); m_Params.push_back(ParamWithName<T>(&m_MajP, prefix + "hexaplay3D_majp", 1, eParamType::REAL));
m_Params.push_back(ParamWithName<T>(&m_Scale, prefix + "hexaplay3D_scale", T(0.25), REAL)); m_Params.push_back(ParamWithName<T>(&m_Scale, prefix + "hexaplay3D_scale", T(0.25), eParamType::REAL));
m_Params.push_back(ParamWithName<T>(&m_ZLift, prefix + "hexaplay3D_zlift", T(0.25), REAL)); m_Params.push_back(ParamWithName<T>(&m_ZLift, prefix + "hexaplay3D_zlift", T(0.25), eParamType::REAL));
m_Params.push_back(ParamWithName<T>(true, &m_Seg60[0].x, prefix + "hexaplay3D_seg60x0"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_Seg60[0].x, prefix + "hexaplay3D_seg60x0"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_Seg60[1].x, prefix + "hexaplay3D_seg60x1")); m_Params.push_back(ParamWithName<T>(true, &m_Seg60[1].x, prefix + "hexaplay3D_seg60x1"));
m_Params.push_back(ParamWithName<T>(true, &m_Seg60[2].x, prefix + "hexaplay3D_seg60x2")); m_Params.push_back(ParamWithName<T>(true, &m_Seg60[2].x, prefix + "hexaplay3D_seg60x2"));
@ -3825,7 +3825,7 @@ template <typename T>
class EMBER_API Hexnix3DVariation : public ParametricVariation<T> class EMBER_API Hexnix3DVariation : public ParametricVariation<T>
{ {
public: public:
Hexnix3DVariation(T weight = 1.0) : ParametricVariation<T>("hexnix3D", VAR_HEXNIX3D, weight) Hexnix3DVariation(T weight = 1.0) : ParametricVariation<T>("hexnix3D", eVariationId::VAR_HEXNIX3D, weight)
{ {
Init(); Init();
} }
@ -3855,7 +3855,7 @@ public:
T gentleZ = 0; T gentleZ = 0;
T sumX, sumY, sumZ; T sumX, sumY, sumZ;
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
sumX = helper.In.x; sumX = helper.In.x;
sumY = helper.In.y; sumY = helper.In.y;
@ -3941,7 +3941,7 @@ public:
{ {
helper.Out.z = (sumZ - (2 * smooth * sumZ)) + (smooth * posNeg * (helper.In.z * scale * m_ZLift + boost)); helper.Out.z = (sumZ - (2 * smooth * sumZ)) + (smooth * posNeg * (helper.In.z * scale * m_ZLift + boost));
if (m_VarType != VARTYPE_PRE) if (m_VarType != eVariationType::VARTYPE_PRE)
outPoint.m_Z = 0; outPoint.m_Z = 0;
} }
} }
@ -4018,7 +4018,7 @@ public:
<< "\t\treal_t gentleZ = 0;\n" << "\t\treal_t gentleZ = 0;\n"
<< "\t\treal_t sumX, sumY, sumZ;\n\n"; << "\t\treal_t sumX, sumY, sumZ;\n\n";
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
ss ss
<< "\t\tsumX = vIn.x;\n" << "\t\tsumX = vIn.x;\n"
@ -4108,7 +4108,7 @@ public:
<< "\t\t {\n" << "\t\t {\n"
<< "\t\t vOut.z = (sumZ - (2 * smooth * sumZ)) + (smooth * posNeg * (vIn.z * scale * " << zlift << " + boost));\n"; << "\t\t vOut.z = (sumZ - (2 * smooth * sumZ)) + (smooth * posNeg * (vIn.z * scale * " << zlift << " + boost));\n";
if (m_VarType != VARTYPE_PRE) if (m_VarType != eVariationType::VARTYPE_PRE)
ss << "\t\t outPoint->m_Z = 0;\n"; ss << "\t\t outPoint->m_Z = 0;\n";
ss ss
@ -4200,10 +4200,10 @@ protected:
m_Params.clear(); m_Params.clear();
m_Params.reserve(25); m_Params.reserve(25);
m_Params.push_back(ParamWithName<T>(&m_MajP, prefix + "hexnix3D_majp", 1, REAL)); m_Params.push_back(ParamWithName<T>(&m_MajP, prefix + "hexnix3D_majp", 1, eParamType::REAL));
m_Params.push_back(ParamWithName<T>(&m_Scale, prefix + "hexnix3D_scale", T(0.25), REAL)); m_Params.push_back(ParamWithName<T>(&m_Scale, prefix + "hexnix3D_scale", T(0.25), eParamType::REAL));
m_Params.push_back(ParamWithName<T>(&m_ZLift, prefix + "hexnix3D_zlift")); m_Params.push_back(ParamWithName<T>(&m_ZLift, prefix + "hexnix3D_zlift"));
m_Params.push_back(ParamWithName<T>(&m_3side, prefix + "hexnix3D_3side", T(0.667), REAL)); m_Params.push_back(ParamWithName<T>(&m_3side, prefix + "hexnix3D_3side", T(0.667), eParamType::REAL));
m_Params.push_back(ParamWithName<T>(true, &m_Seg60[0].x, prefix + "hexnix3D_seg60x0"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_Seg60[0].x, prefix + "hexnix3D_seg60x0"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_Seg60[1].x, prefix + "hexnix3D_seg60x1")); m_Params.push_back(ParamWithName<T>(true, &m_Seg60[1].x, prefix + "hexnix3D_seg60x1"));
m_Params.push_back(ParamWithName<T>(true, &m_Seg60[2].x, prefix + "hexnix3D_seg60x2")); m_Params.push_back(ParamWithName<T>(true, &m_Seg60[2].x, prefix + "hexnix3D_seg60x2"));
@ -4246,7 +4246,7 @@ template <typename T>
class EMBER_API HexcropVariation : public ParametricVariation<T> class EMBER_API HexcropVariation : public ParametricVariation<T>
{ {
public: public:
HexcropVariation(T weight = 1.0) : ParametricVariation<T>("hexcrop", VAR_HEXCROP, weight) HexcropVariation(T weight = 1.0) : ParametricVariation<T>("hexcrop", eVariationId::VAR_HEXCROP, weight)
{ {
Init(); Init();
} }
@ -4270,7 +4270,7 @@ public:
j = n; j = n;
} }
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
helper.Out.x = c != 0 ? outPoint.m_X + i.x * m_Weight : m_Dropoff; helper.Out.x = c != 0 ? outPoint.m_X + i.x * m_Weight : m_Dropoff;
helper.Out.y = c != 0 ? outPoint.m_Y + i.y * m_Weight : m_Dropoff; helper.Out.y = c != 0 ? outPoint.m_Y + i.y * m_Weight : m_Dropoff;
@ -4324,7 +4324,7 @@ public:
<< "\t\t}\n" << "\t\t}\n"
<< "\n"; << "\n";
if (m_VarType == VARTYPE_REG) if (m_VarType == eVariationType::VARTYPE_REG)
{ {
ss ss
<< "\t\tvOut.x = c != 0 ? outPoint->m_X + i.x * xform->m_VariationWeights[" << varIndex << "] : " << dropoff << ";\n" << "\t\tvOut.x = c != 0 ? outPoint->m_X + i.x * xform->m_VariationWeights[" << varIndex << "] : " << dropoff << ";\n"
@ -4399,20 +4399,20 @@ private:
MAKEPREPOSTPARVAR(Bubble2, bubble2, BUBBLE2) MAKEPREPOSTPARVAR(Bubble2, bubble2, BUBBLE2)
MAKEPREPOSTPARVAR(CircleLinear, CircleLinear, CIRCLELINEAR) MAKEPREPOSTPARVAR(CircleLinear, CircleLinear, CIRCLELINEAR)
MAKEPREPOSTPARVARASSIGN(CircleRand, CircleRand, CIRCLERAND, ASSIGNTYPE_SUM) MAKEPREPOSTPARVARASSIGN(CircleRand, CircleRand, CIRCLERAND, eVariationAssignType::ASSIGNTYPE_SUM)
MAKEPREPOSTPARVAR(CircleTrans1, CircleTrans1, CIRCLETRANS1) MAKEPREPOSTPARVAR(CircleTrans1, CircleTrans1, CIRCLETRANS1)
MAKEPREPOSTPARVAR(Cubic3D, cubic3D, CUBIC3D) MAKEPREPOSTPARVAR(Cubic3D, cubic3D, CUBIC3D)
MAKEPREPOSTPARVAR(CubicLattice3D, cubicLattice_3D, CUBIC_LATTICE3D) MAKEPREPOSTPARVAR(CubicLattice3D, cubicLattice_3D, CUBIC_LATTICE3D)
MAKEPREPOSTVAR(Foci3D, foci_3D, FOCI3D) MAKEPREPOSTVAR(Foci3D, foci_3D, FOCI3D)
MAKEPREPOSTPARVAR(Ho, ho, HO) MAKEPREPOSTPARVAR(Ho, ho, HO)
MAKEPREPOSTPARVAR(Julia3Dq, julia3Dq, JULIA3DQ) MAKEPREPOSTPARVAR(Julia3Dq, julia3Dq, JULIA3DQ)
MAKEPREPOSTPARVARASSIGN(Line, line, LINE, ASSIGNTYPE_SUM) MAKEPREPOSTPARVARASSIGN(Line, line, LINE, eVariationAssignType::ASSIGNTYPE_SUM)
MAKEPREPOSTPARVAR(Loonie2, loonie2, LOONIE2) MAKEPREPOSTPARVAR(Loonie2, loonie2, LOONIE2)
MAKEPREPOSTPARVAR(Loonie3, loonie3, LOONIE3) MAKEPREPOSTPARVAR(Loonie3, loonie3, LOONIE3)
MAKEPREPOSTPARVAR(Loonie3D, loonie_3D, LOONIE3D) MAKEPREPOSTPARVAR(Loonie3D, loonie_3D, LOONIE3D)
MAKEPREPOSTPARVAR(Mcarpet, mcarpet, MCARPET) MAKEPREPOSTPARVAR(Mcarpet, mcarpet, MCARPET)
MAKEPREPOSTPARVAR(Waves23D, waves2_3D, WAVES23D) MAKEPREPOSTPARVAR(Waves23D, waves2_3D, WAVES23D)
MAKEPREPOSTPARVARASSIGN(Pie3D, pie3D, PIE3D, ASSIGNTYPE_SUM) MAKEPREPOSTPARVARASSIGN(Pie3D, pie3D, PIE3D, eVariationAssignType::ASSIGNTYPE_SUM)
MAKEPREPOSTPARVAR(Popcorn23D, popcorn2_3D, POPCORN23D) MAKEPREPOSTPARVAR(Popcorn23D, popcorn2_3D, POPCORN23D)
MAKEPREPOSTVAR(Sinusoidal3D, sinusoidal3D, SINUSOIDAL3D) MAKEPREPOSTVAR(Sinusoidal3D, sinusoidal3D, SINUSOIDAL3D)
MAKEPREPOSTPARVAR(Scry3D, scry_3D, SCRY3D) MAKEPREPOSTPARVAR(Scry3D, scry_3D, SCRY3D)

View File

@ -11,7 +11,7 @@ template <typename T>
class EMBER_API HexesVariation : public ParametricVariation<T> class EMBER_API HexesVariation : public ParametricVariation<T>
{ {
public: public:
HexesVariation(T weight = 1.0) : ParametricVariation<T>("hexes", VAR_HEXES, weight) HexesVariation(T weight = 1.0) : ParametricVariation<T>("hexes", eVariationId::VAR_HEXES, weight)
{ {
Init(); Init();
} }
@ -130,7 +130,7 @@ public:
//Finally add values in. //Finally add values in.
helper.Out.x = m_Weight * v.x; helper.Out.x = m_Weight * v.x;
helper.Out.y = m_Weight * v.y; helper.Out.y = m_Weight * v.y;
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -232,7 +232,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * Vx;\n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * Vx;\n"
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * Vy;\n" << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * Vy;\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
} }
@ -321,7 +321,7 @@ class EMBER_API NblurVariation : public ParametricVariation<T>
}; };
public: public:
NblurVariation(T weight = 1.0) : ParametricVariation<T>("nBlur", VAR_NBLUR, weight) NblurVariation(T weight = 1.0) : ParametricVariation<T>("nBlur", eVariationId::VAR_NBLUR, weight)
{ {
Init(); Init();
} }
@ -366,7 +366,7 @@ public:
params.Y = m_Sina * xTmp + m_Cosa * yTmp; params.Y = m_Sina * xTmp + m_Cosa * yTmp;
helper.Out.x = m_AdjustedWeight * params.X; helper.Out.x = m_AdjustedWeight * params.X;
helper.Out.y = m_AdjustedWeight * params.Y; helper.Out.y = m_AdjustedWeight * params.Y;
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -441,7 +441,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = " << adjustedWeight << " * params.X;\n" << "\t\tvOut.x = " << adjustedWeight << " * params.X;\n"
<< "\t\tvOut.y = " << adjustedWeight << " * params.Y;\n" << "\t\tvOut.y = " << adjustedWeight << " * params.Y;\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
} }
@ -821,14 +821,14 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.reserve(25); m_Params.reserve(25);
m_Params.push_back(ParamWithName<T>(&m_NumEdges, prefix + "nBlur_numEdges", 3, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_NumEdges, prefix + "nBlur_numEdges", 3, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_NumStripes, prefix + "nBlur_numStripes", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_NumStripes, prefix + "nBlur_numStripes", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_RatioStripes, prefix + "nBlur_ratioStripes", 1, REAL, 0, 2)); m_Params.push_back(ParamWithName<T>(&m_RatioStripes, prefix + "nBlur_ratioStripes", 1, eParamType::REAL, 0, 2));
m_Params.push_back(ParamWithName<T>(&m_RatioHole, prefix + "nBlur_ratioHole", 0, REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_RatioHole, prefix + "nBlur_ratioHole", 0, eParamType::REAL, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_CircumCircle, prefix + "nBlur_circumCircle", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_CircumCircle, prefix + "nBlur_circumCircle", 0, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_AdjustToLinear, prefix + "nBlur_adjustToLinear", 1, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_AdjustToLinear, prefix + "nBlur_adjustToLinear", 1, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_EqualBlur, prefix + "nBlur_equalBlur", 1, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_EqualBlur, prefix + "nBlur_equalBlur", 1, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_ExactCalc, prefix + "nBlur_exactCalc", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_ExactCalc, prefix + "nBlur_exactCalc", 0, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_HighlightEdges, prefix + "nBlur_highlightEdges", 1)); m_Params.push_back(ParamWithName<T>(&m_HighlightEdges, prefix + "nBlur_highlightEdges", 1));
m_Params.push_back(ParamWithName<T>(true, &m_RatioComplement, prefix + "nBlur_ratioComplement"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_RatioComplement, prefix + "nBlur_ratioComplement"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_MidAngle, prefix + "nBlur_midAngle")); m_Params.push_back(ParamWithName<T>(true, &m_MidAngle, prefix + "nBlur_midAngle"));
@ -1135,7 +1135,7 @@ template <typename T>
class EMBER_API OctapolVariation : public ParametricVariation<T> class EMBER_API OctapolVariation : public ParametricVariation<T>
{ {
public: public:
OctapolVariation(T weight = 1.0) : ParametricVariation<T>("octapol", VAR_OCTAPOL, weight) OctapolVariation(T weight = 1.0) : ParametricVariation<T>("octapol", eVariationId::VAR_OCTAPOL, weight)
{ {
Init(); Init();
} }
@ -1176,7 +1176,7 @@ public:
if (clear) if (clear)
{ {
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
helper.m_TransX = 0; helper.m_TransX = 0;
helper.m_TransY = 0; helper.m_TransY = 0;
@ -1267,7 +1267,7 @@ public:
<< "\t\tif (clear)\n" << "\t\tif (clear)\n"
<< "\t\t{\n"; << "\t\t{\n";
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
ss ss
<< "\t\t transX = 0;\n" << "\t\t transX = 0;\n"
@ -1474,7 +1474,7 @@ template <typename T>
class EMBER_API CrobVariation : public ParametricVariation<T> class EMBER_API CrobVariation : public ParametricVariation<T>
{ {
public: public:
CrobVariation(T weight = 1.0) : ParametricVariation<T>("crob", VAR_CROB, weight) CrobVariation(T weight = 1.0) : ParametricVariation<T>("crob", eVariationId::VAR_CROB, weight)
{ {
Init(); Init();
} }
@ -1489,12 +1489,12 @@ public:
{ {
if (m_Blur == 0) if (m_Blur == 0)
{ {
if (m_VarType == VARTYPE_PRE)//Setting input point. if (m_VarType == eVariationType::VARTYPE_PRE)//Setting input point.
{ {
helper.m_TransX = 0; helper.m_TransX = 0;
helper.m_TransY = 0; helper.m_TransY = 0;
} }
else if (m_VarType == VARTYPE_REG) else if (m_VarType == eVariationType::VARTYPE_REG)
{ {
helper.In.x = 0; helper.In.x = 0;
helper.In.y = 0; helper.In.y = 0;
@ -1541,12 +1541,12 @@ public:
xTmp = m_Left + m_Right - xTmp; xTmp = m_Left + m_Right - xTmp;
} }
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
helper.m_TransX = xTmp; helper.m_TransX = xTmp;
helper.m_TransY = yTmp; helper.m_TransY = yTmp;
} }
else if (m_VarType == VARTYPE_REG) else if (m_VarType == eVariationType::VARTYPE_REG)
{ {
helper.In.x = xTmp; helper.In.x = xTmp;
helper.In.y = yTmp; helper.In.y = yTmp;
@ -1559,12 +1559,12 @@ public:
} }
} }
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
helper.Out.x = helper.m_TransX; helper.Out.x = helper.m_TransX;
helper.Out.y = helper.m_TransY; helper.Out.y = helper.m_TransY;
} }
else if (m_VarType == VARTYPE_REG) else if (m_VarType == eVariationType::VARTYPE_REG)
{ {
helper.Out.x = helper.In.x; helper.Out.x = helper.In.x;
helper.Out.y = helper.In.y; helper.Out.y = helper.In.y;
@ -1575,7 +1575,7 @@ public:
helper.Out.y = outPoint.m_Y; helper.Out.y = outPoint.m_Y;
} }
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -1620,13 +1620,13 @@ public:
<< "\t\t if (" << blur << " == 0)\n" << "\t\t if (" << blur << " == 0)\n"
<< "\t\t {\n"; << "\t\t {\n";
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
ss ss
<< "\t\t transX = 0;\n" << "\t\t transX = 0;\n"
<< "\t\t transY = 0;\n"; << "\t\t transY = 0;\n";
} }
else if (m_VarType == VARTYPE_REG) else if (m_VarType == eVariationType::VARTYPE_REG)
{ {
ss ss
<< "\t\t vIn.x = 0;\n" << "\t\t vIn.x = 0;\n"
@ -1676,13 +1676,13 @@ public:
<< "\t\t }\n" << "\t\t }\n"
<< "\n"; << "\n";
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
ss ss
<< "\t\t transX = xTmp;\n" << "\t\t transX = xTmp;\n"
<< "\t\t transY = yTmp;\n"; << "\t\t transY = yTmp;\n";
} }
else if (m_VarType == VARTYPE_REG) else if (m_VarType == eVariationType::VARTYPE_REG)
{ {
ss ss
<< "\t\t vIn.x = xTmp;\n" << "\t\t vIn.x = xTmp;\n"
@ -1700,13 +1700,13 @@ public:
<< "\t\t}\n" << "\t\t}\n"
<< "\n"; << "\n";
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
ss ss
<< "\t\tvOut.x = transX;\n" << "\t\tvOut.x = transX;\n"
<< "\t\tvOut.y = transY;\n"; << "\t\tvOut.y = transY;\n";
} }
else if (m_VarType == VARTYPE_REG) else if (m_VarType == eVariationType::VARTYPE_REG)
{ {
ss ss
<< "\t\tvOut.x = vIn.x;\n" << "\t\tvOut.x = vIn.x;\n"
@ -1720,7 +1720,7 @@ public:
} }
ss ss
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
} }
@ -1814,8 +1814,8 @@ protected:
m_Params.push_back(ParamWithName<T>(&m_Bottom, prefix + "crob_bottom", 1)); m_Params.push_back(ParamWithName<T>(&m_Bottom, prefix + "crob_bottom", 1));
m_Params.push_back(ParamWithName<T>(&m_Left, prefix + "crob_left", -1)); m_Params.push_back(ParamWithName<T>(&m_Left, prefix + "crob_left", -1));
m_Params.push_back(ParamWithName<T>(&m_Right, prefix + "crob_right", 1)); m_Params.push_back(ParamWithName<T>(&m_Right, prefix + "crob_right", 1));
m_Params.push_back(ParamWithName<T>(&m_Blur, prefix + "crob_blur", 1, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_Blur, prefix + "crob_blur", 1, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_RatioBlur, prefix + "crob_ratioBlur", T(0.5), REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_RatioBlur, prefix + "crob_ratioBlur", T(0.5), eParamType::REAL, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_DirectBlur, prefix + "crob_directBlur", 2)); m_Params.push_back(ParamWithName<T>(&m_DirectBlur, prefix + "crob_directBlur", 2));
m_Params.push_back(ParamWithName<T>(true, &m_XInterval, prefix + "crob_xinterval")); m_Params.push_back(ParamWithName<T>(true, &m_XInterval, prefix + "crob_xinterval"));
m_Params.push_back(ParamWithName<T>(true, &m_YInterval, prefix + "crob_yinterval")); m_Params.push_back(ParamWithName<T>(true, &m_YInterval, prefix + "crob_yinterval"));
@ -1878,7 +1878,7 @@ template <typename T>
class EMBER_API BubbleT3DVariation : public ParametricVariation<T> class EMBER_API BubbleT3DVariation : public ParametricVariation<T>
{ {
public: public:
BubbleT3DVariation(T weight = 1.0) : ParametricVariation<T>("bubbleT3D", VAR_BUBBLET3D, weight, true) BubbleT3DVariation(T weight = 1.0) : ParametricVariation<T>("bubbleT3D", eVariationId::VAR_BUBBLET3D, weight, true)
{ {
Init(); Init();
} }
@ -2331,12 +2331,12 @@ protected:
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.reserve(14); m_Params.reserve(14);
m_Params.push_back(ParamWithName<T>(&m_NumberStripes, prefix + "bubbleT3D_number_of_stripes", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_NumberStripes, prefix + "bubbleT3D_number_of_stripes", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_RatioStripes, prefix + "bubbleT3D_ratio_of_stripes", 1, REAL, 0, 2)); m_Params.push_back(ParamWithName<T>(&m_RatioStripes, prefix + "bubbleT3D_ratio_of_stripes", 1, eParamType::REAL, 0, 2));
m_Params.push_back(ParamWithName<T>(&m_AngleHole, prefix + "bubbleT3D_angle_of_hole", 0, REAL, -360, 360)); m_Params.push_back(ParamWithName<T>(&m_AngleHole, prefix + "bubbleT3D_angle_of_hole", 0, eParamType::REAL, -360, 360));
m_Params.push_back(ParamWithName<T>(&m_ExponentZ, prefix + "bubbleT3D_exponentZ", 1)); m_Params.push_back(ParamWithName<T>(&m_ExponentZ, prefix + "bubbleT3D_exponentZ", 1));
m_Params.push_back(ParamWithName<T>(&m_SymmetryZ, prefix + "bubbleT3D_symmetryZ", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_SymmetryZ, prefix + "bubbleT3D_symmetryZ", 0, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_ModusBlur, prefix + "bubbleT3D_modusBlur", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_ModusBlur, prefix + "bubbleT3D_modusBlur", 0, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(true, &m_AbsNumberStripes, prefix + "bubbleT3D_abs_number_of_stripes"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_AbsNumberStripes, prefix + "bubbleT3D_abs_number_of_stripes"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_AngleHoleTemp, prefix + "bubbleT3D_ang_hole_temp")); m_Params.push_back(ParamWithName<T>(true, &m_AngleHoleTemp, prefix + "bubbleT3D_ang_hole_temp"));
m_Params.push_back(ParamWithName<T>(true, &m_AngStrip, prefix + "bubbleT3D_ang_strip")); m_Params.push_back(ParamWithName<T>(true, &m_AngStrip, prefix + "bubbleT3D_ang_strip"));
@ -2432,7 +2432,7 @@ template <typename T>
class EMBER_API SynthVariation : public ParametricVariation<T> class EMBER_API SynthVariation : public ParametricVariation<T>
{ {
public: public:
SynthVariation(T weight = 1.0) : ParametricVariation<T>("synth", VAR_SYNTH, weight, true, true, false, true) SynthVariation(T weight = 1.0) : ParametricVariation<T>("synth", eVariationId::VAR_SYNTH, weight, true, true, false, true)
{ {
Init(); Init();
} }
@ -2749,7 +2749,7 @@ public:
break; break;
} }
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -3048,7 +3048,7 @@ public:
<< "\t\t break;\n" << "\t\t break;\n"
<< "\t\t}\n" << "\t\t}\n"
<< "\n" << "\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
} }
@ -3314,40 +3314,40 @@ protected:
m_Params.clear(); m_Params.clear();
m_Params.reserve(34); m_Params.reserve(34);
m_Params.push_back(ParamWithName<T>(&m_SynthA, prefix + "synth_a")); m_Params.push_back(ParamWithName<T>(&m_SynthA, prefix + "synth_a"));
m_Params.push_back(ParamWithName<T>(&m_SynthMode, prefix + "synth_mode", 3, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_SynthMode, prefix + "synth_mode", 3, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_SynthPower, prefix + "synth_power", -2)); m_Params.push_back(ParamWithName<T>(&m_SynthPower, prefix + "synth_power", -2));
m_Params.push_back(ParamWithName<T>(&m_SynthMix, prefix + "synth_mix")); m_Params.push_back(ParamWithName<T>(&m_SynthMix, prefix + "synth_mix"));
m_Params.push_back(ParamWithName<T>(&m_SynthSmooth, prefix + "synth_smooth", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_SynthSmooth, prefix + "synth_smooth", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_SynthB, prefix + "synth_b")); m_Params.push_back(ParamWithName<T>(&m_SynthB, prefix + "synth_b"));
m_Params.push_back(ParamWithName<T>(&m_SynthBType, prefix + "synth_b_type", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_SynthBType, prefix + "synth_b_type", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_SynthBSkew, prefix + "synth_b_skew")); m_Params.push_back(ParamWithName<T>(&m_SynthBSkew, prefix + "synth_b_skew"));
m_Params.push_back(ParamWithName<T>(&m_SynthBFrq, prefix + "synth_b_frq", 1, REAL)); m_Params.push_back(ParamWithName<T>(&m_SynthBFrq, prefix + "synth_b_frq", 1, eParamType::REAL));
m_Params.push_back(ParamWithName<T>(&m_SynthBPhs, prefix + "synth_b_phs")); m_Params.push_back(ParamWithName<T>(&m_SynthBPhs, prefix + "synth_b_phs"));
m_Params.push_back(ParamWithName<T>(&m_SynthBLayer, prefix + "synth_b_layer", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_SynthBLayer, prefix + "synth_b_layer", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_SynthC, prefix + "synth_c")); m_Params.push_back(ParamWithName<T>(&m_SynthC, prefix + "synth_c"));
m_Params.push_back(ParamWithName<T>(&m_SynthCType, prefix + "synth_c_type", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_SynthCType, prefix + "synth_c_type", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_SynthCSkew, prefix + "synth_c_skew")); m_Params.push_back(ParamWithName<T>(&m_SynthCSkew, prefix + "synth_c_skew"));
m_Params.push_back(ParamWithName<T>(&m_SynthCFrq, prefix + "synth_c_frq", 1, REAL)); m_Params.push_back(ParamWithName<T>(&m_SynthCFrq, prefix + "synth_c_frq", 1, eParamType::REAL));
m_Params.push_back(ParamWithName<T>(&m_SynthCPhs, prefix + "synth_c_phs")); m_Params.push_back(ParamWithName<T>(&m_SynthCPhs, prefix + "synth_c_phs"));
m_Params.push_back(ParamWithName<T>(&m_SynthCLayer, prefix + "synth_c_layer", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_SynthCLayer, prefix + "synth_c_layer", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_SynthD, prefix + "synth_d")); m_Params.push_back(ParamWithName<T>(&m_SynthD, prefix + "synth_d"));
m_Params.push_back(ParamWithName<T>(&m_SynthDType, prefix + "synth_d_type", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_SynthDType, prefix + "synth_d_type", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_SynthDSkew, prefix + "synth_d_skew")); m_Params.push_back(ParamWithName<T>(&m_SynthDSkew, prefix + "synth_d_skew"));
m_Params.push_back(ParamWithName<T>(&m_SynthDFrq, prefix + "synth_d_frq", 1, REAL)); m_Params.push_back(ParamWithName<T>(&m_SynthDFrq, prefix + "synth_d_frq", 1, eParamType::REAL));
m_Params.push_back(ParamWithName<T>(&m_SynthDPhs, prefix + "synth_d_phs")); m_Params.push_back(ParamWithName<T>(&m_SynthDPhs, prefix + "synth_d_phs"));
m_Params.push_back(ParamWithName<T>(&m_SynthDLayer, prefix + "synth_d_layer", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_SynthDLayer, prefix + "synth_d_layer", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_SynthE, prefix + "synth_e")); m_Params.push_back(ParamWithName<T>(&m_SynthE, prefix + "synth_e"));
m_Params.push_back(ParamWithName<T>(&m_SynthEType, prefix + "synth_e_type", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_SynthEType, prefix + "synth_e_type", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_SynthESkew, prefix + "synth_e_skew")); m_Params.push_back(ParamWithName<T>(&m_SynthESkew, prefix + "synth_e_skew"));
m_Params.push_back(ParamWithName<T>(&m_SynthEFrq, prefix + "synth_e_frq", 1, REAL)); m_Params.push_back(ParamWithName<T>(&m_SynthEFrq, prefix + "synth_e_frq", 1, eParamType::REAL));
m_Params.push_back(ParamWithName<T>(&m_SynthEPhs, prefix + "synth_e_phs")); m_Params.push_back(ParamWithName<T>(&m_SynthEPhs, prefix + "synth_e_phs"));
m_Params.push_back(ParamWithName<T>(&m_SynthELayer, prefix + "synth_e_layer", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_SynthELayer, prefix + "synth_e_layer", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_SynthF, prefix + "synth_f")); m_Params.push_back(ParamWithName<T>(&m_SynthF, prefix + "synth_f"));
m_Params.push_back(ParamWithName<T>(&m_SynthFType, prefix + "synth_f_type", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_SynthFType, prefix + "synth_f_type", 0, eParamType::INTEGER));
m_Params.push_back(ParamWithName<T>(&m_SynthFSkew, prefix + "synth_f_skew")); m_Params.push_back(ParamWithName<T>(&m_SynthFSkew, prefix + "synth_f_skew"));
m_Params.push_back(ParamWithName<T>(&m_SynthFFrq, prefix + "synth_f_frq", 1, REAL)); m_Params.push_back(ParamWithName<T>(&m_SynthFFrq, prefix + "synth_f_frq", 1, eParamType::REAL));
m_Params.push_back(ParamWithName<T>(&m_SynthFPhs, prefix + "synth_f_phs")); m_Params.push_back(ParamWithName<T>(&m_SynthFPhs, prefix + "synth_f_phs"));
m_Params.push_back(ParamWithName<T>(&m_SynthFLayer, prefix + "synth_f_layer", 0, INTEGER)); m_Params.push_back(ParamWithName<T>(&m_SynthFLayer, prefix + "synth_f_layer", 0, eParamType::INTEGER));
} }
private: private:
@ -3641,7 +3641,7 @@ template <typename T>
class EMBER_API CrackleVariation : public ParametricVariation<T> class EMBER_API CrackleVariation : public ParametricVariation<T>
{ {
public: public:
CrackleVariation(T weight = 1.0) : ParametricVariation<T>("crackle", VAR_CRACKLE, weight) CrackleVariation(T weight = 1.0) : ParametricVariation<T>("crackle", eVariationId::VAR_CRACKLE, weight)
{ {
Init(); Init();
} }
@ -3701,7 +3701,7 @@ public:
dO += p[4]; dO += p[4];
helper.Out.x = m_Weight * dO.x; helper.Out.x = m_Weight * dO.x;
helper.Out.y = m_Weight * dO.y; helper.Out.y = m_Weight * dO.y;
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
virtual vector<string> OpenCLGlobalFuncNames() const override virtual vector<string> OpenCLGlobalFuncNames() const override
@ -3799,7 +3799,7 @@ public:
<< "\t\tdO += p[4];\n" << "\t\tdO += p[4];\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * dO.x;\n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * dO.x;\n"
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * dO.y;\n" << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * dO.y;\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
} }

View File

@ -12,7 +12,7 @@ template <typename T>
class EMBER_API DCBubbleVariation : public ParametricVariation<T> class EMBER_API DCBubbleVariation : public ParametricVariation<T>
{ {
public: public:
DCBubbleVariation(T weight = 1.0) : ParametricVariation<T>("dc_bubble", VAR_DC_BUBBLE, weight, true) DCBubbleVariation(T weight = 1.0) : ParametricVariation<T>("dc_bubble", eVariationId::VAR_DC_BUBBLE, weight, true)
{ {
Init(); Init();
} }
@ -29,7 +29,7 @@ public:
helper.Out.z = m_Weight * (2 / r4_1 - 1); helper.Out.z = m_Weight * (2 / r4_1 - 1);
T sumX, sumY; T sumX, sumY;
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
sumX = helper.In.x; sumX = helper.In.x;
sumY = helper.In.y; sumY = helper.In.y;
@ -66,7 +66,7 @@ public:
<< "\n" << "\n"
<< "\t\treal_t sumX, sumY;\n\n"; << "\t\treal_t sumX, sumY;\n\n";
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
ss ss
<< "\t\tsumX = vIn.x;\n" << "\t\tsumX = vIn.x;\n"
@ -123,7 +123,7 @@ template <typename T>
class EMBER_API DCCarpetVariation : public ParametricVariation<T> class EMBER_API DCCarpetVariation : public ParametricVariation<T>
{ {
public: public:
DCCarpetVariation(T weight = 1.0) : ParametricVariation<T>("dc_carpet", VAR_DC_CARPET, weight) DCCarpetVariation(T weight = 1.0) : ParametricVariation<T>("dc_carpet", eVariationId::VAR_DC_CARPET, weight)
{ {
Init(); Init();
} }
@ -140,7 +140,7 @@ public:
T h = -m_H + (1 - x0_xor_y0) * m_H; T h = -m_H + (1 - x0_xor_y0) * m_H;
helper.Out.x = m_Weight * (m_Xform->m_Affine.A() * x + m_Xform->m_Affine.B() * y + m_Xform->m_Affine.E()); helper.Out.x = m_Weight * (m_Xform->m_Affine.A() * x + m_Xform->m_Affine.B() * y + m_Xform->m_Affine.E());
helper.Out.y = m_Weight * (m_Xform->m_Affine.C() * x + m_Xform->m_Affine.D() * y + m_Xform->m_Affine.F()); helper.Out.y = m_Weight * (m_Xform->m_Affine.C() * x + m_Xform->m_Affine.D() * y + m_Xform->m_Affine.F());
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
outPoint.m_ColorX = fmod(fabs(outPoint.m_ColorX * T(0.5) * (1 + h) + x0_xor_y0 * (1 - h) * T(0.5)), T(1.0)); outPoint.m_ColorX = fmod(fabs(outPoint.m_ColorX * T(0.5) * (1 + h) + x0_xor_y0 * (1 - h) * T(0.5)), T(1.0));
} }
@ -162,7 +162,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (xform->m_A * x + xform->m_B * y + xform->m_E);\n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (xform->m_A * x + xform->m_B * y + xform->m_E);\n"
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * (xform->m_C * x + xform->m_D * y + xform->m_F);\n" << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * (xform->m_C * x + xform->m_D * y + xform->m_F);\n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t\toutPoint->m_ColorX = fmod(fabs(outPoint->m_ColorX * (real_t)(0.5) * (1 + h) + x0_xor_y0 * (1 - h) * (real_t)(0.5)), (real_t)(1.0));\n" << "\t\toutPoint->m_ColorX = fmod(fabs(outPoint->m_ColorX * (real_t)(0.5) * (1 + h) + x0_xor_y0 * (1 - h) * (real_t)(0.5)), (real_t)(1.0));\n"
<< "\t}\n"; << "\t}\n";
return ss.str(); return ss.str();
@ -194,7 +194,7 @@ template <typename T>
class EMBER_API DCCubeVariation : public ParametricVariation<T> class EMBER_API DCCubeVariation : public ParametricVariation<T>
{ {
public: public:
DCCubeVariation(T weight = 1.0) : ParametricVariation<T>("dc_cube", VAR_DC_CUBE, weight) DCCubeVariation(T weight = 1.0) : ParametricVariation<T>("dc_cube", eVariationId::VAR_DC_CUBE, weight)
{ {
Init(); Init();
} }
@ -384,7 +384,7 @@ template <typename T>
class EMBER_API DCCylinderVariation : public ParametricVariation<T> class EMBER_API DCCylinderVariation : public ParametricVariation<T>
{ {
public: public:
DCCylinderVariation(T weight = 1.0) : ParametricVariation<T>("dc_cylinder", VAR_DC_CYLINDER, weight) DCCylinderVariation(T weight = 1.0) : ParametricVariation<T>("dc_cylinder", eVariationId::VAR_DC_CYLINDER, weight)
{ {
Init(); Init();
} }
@ -402,7 +402,7 @@ public:
helper.Out.z = m_Weight * std::cos(helper.In.x + r * cr); helper.Out.z = m_Weight * std::cos(helper.In.x + r * cr);
T sumX, sumY; T sumX, sumY;
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
sumX = helper.In.x; sumX = helper.In.x;
sumY = helper.In.y; sumY = helper.In.y;
@ -445,7 +445,7 @@ public:
<< "\n" << "\n"
<< "\t\treal_t sumX, sumY;\n\n"; << "\t\treal_t sumX, sumY;\n\n";
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
ss ss
<< "\t\tsumX = vIn.x;\n" << "\t\tsumX = vIn.x;\n"
@ -511,7 +511,7 @@ template <typename T>
class EMBER_API DCGridOutVariation : public Variation<T> class EMBER_API DCGridOutVariation : public Variation<T>
{ {
public: public:
DCGridOutVariation(T weight = 1.0) : Variation<T>("dc_gridout", VAR_DC_GRIDOUT, weight) { } DCGridOutVariation(T weight = 1.0) : Variation<T>("dc_gridout", eVariationId::VAR_DC_GRIDOUT, weight) { }
VARCOPY(DCGridOutVariation) VARCOPY(DCGridOutVariation)
@ -688,7 +688,7 @@ template <typename T>
class EMBER_API DCLinearVariation : public ParametricVariation<T> class EMBER_API DCLinearVariation : public ParametricVariation<T>
{ {
public: public:
DCLinearVariation(T weight = 1.0) : ParametricVariation<T>("dc_linear", VAR_DC_LINEAR, weight) DCLinearVariation(T weight = 1.0) : ParametricVariation<T>("dc_linear", eVariationId::VAR_DC_LINEAR, weight)
{ {
Init(); Init();
} }
@ -702,7 +702,7 @@ public:
helper.Out.z = m_Weight * helper.In.z; helper.Out.z = m_Weight * helper.In.z;
T sumX, sumY; T sumX, sumY;
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
sumX = helper.In.x; sumX = helper.In.x;
sumY = helper.In.y; sumY = helper.In.y;
@ -738,7 +738,7 @@ public:
<< "\n" << "\n"
<< "\t\treal_t sumX, sumY;\n\n"; << "\t\treal_t sumX, sumY;\n\n";
if (m_VarType == VARTYPE_PRE) if (m_VarType == eVariationType::VARTYPE_PRE)
{ {
ss ss
<< "\t\tsumX = vIn.x;\n" << "\t\tsumX = vIn.x;\n"
@ -798,7 +798,7 @@ template <typename T>
class EMBER_API DCTriangleVariation : public ParametricVariation<T> class EMBER_API DCTriangleVariation : public ParametricVariation<T>
{ {
public: public:
DCTriangleVariation(T weight = 1.0) : ParametricVariation<T>("dc_triangle", VAR_DC_TRIANGLE, weight) DCTriangleVariation(T weight = 1.0) : ParametricVariation<T>("dc_triangle", eVariationId::VAR_DC_TRIANGLE, weight)
{ {
Init(); Init();
} }
@ -987,8 +987,8 @@ protected:
{ {
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_ScatterArea, prefix + "dc_triangle_scatter_area", 0, REAL, -1, 1));//Params. m_Params.push_back(ParamWithName<T>(&m_ScatterArea, prefix + "dc_triangle_scatter_area", 0, eParamType::REAL, -1, 1));//Params.
m_Params.push_back(ParamWithName<T>(&m_ZeroEdges, prefix + "dc_triangle_zero_edges", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_ZeroEdges, prefix + "dc_triangle_zero_edges", 0, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(true, &m_A, prefix + "dc_triangle_a"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_A, prefix + "dc_triangle_a"));//Precalc.
} }
@ -1007,7 +1007,7 @@ template <typename T>
class EMBER_API DCZTranslVariation : public ParametricVariation<T> class EMBER_API DCZTranslVariation : public ParametricVariation<T>
{ {
public: public:
DCZTranslVariation(T weight = 1.0) : ParametricVariation<T>("dc_ztransl", VAR_DC_ZTRANSL, weight) DCZTranslVariation(T weight = 1.0) : ParametricVariation<T>("dc_ztransl", eVariationId::VAR_DC_ZTRANSL, weight)
{ {
Init(); Init();
} }
@ -1073,11 +1073,11 @@ protected:
{ {
string prefix = Prefix(); string prefix = Prefix();
m_Params.clear(); m_Params.clear();
m_Params.push_back(ParamWithName<T>(&m_X0, prefix + "dc_ztransl_x0", 0, REAL, 0, 1));//Params. m_Params.push_back(ParamWithName<T>(&m_X0, prefix + "dc_ztransl_x0", 0, eParamType::REAL, 0, 1));//Params.
m_Params.push_back(ParamWithName<T>(&m_X1, prefix + "dc_ztransl_x1", 1, REAL, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_X1, prefix + "dc_ztransl_x1", 1, eParamType::REAL, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_Factor, prefix + "dc_ztransl_factor", 1)); m_Params.push_back(ParamWithName<T>(&m_Factor, prefix + "dc_ztransl_factor", 1));
m_Params.push_back(ParamWithName<T>(&m_Overwrite, prefix + "dc_ztransl_overwrite", 1, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_Overwrite, prefix + "dc_ztransl_overwrite", 1, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(&m_Clamp, prefix + "dc_ztransl_clamp", 0, INTEGER, 0, 1)); m_Params.push_back(ParamWithName<T>(&m_Clamp, prefix + "dc_ztransl_clamp", 0, eParamType::INTEGER, 0, 1));
m_Params.push_back(ParamWithName<T>(true, &m_X0_, prefix + "dc_ztransl_x0_"));//Precalc. m_Params.push_back(ParamWithName<T>(true, &m_X0_, prefix + "dc_ztransl_x0_"));//Precalc.
m_Params.push_back(ParamWithName<T>(true, &m_X1_, prefix + "dc_ztransl_x1_")); m_Params.push_back(ParamWithName<T>(true, &m_X1_, prefix + "dc_ztransl_x1_"));
m_Params.push_back(ParamWithName<T>(true, &m_X1_m_x0, prefix + "dc_ztransl_x1_m_x0")); m_Params.push_back(ParamWithName<T>(true, &m_X1_m_x0, prefix + "dc_ztransl_x1_m_x0"));
@ -1112,7 +1112,7 @@ template <typename T>
class EMBER_API DCPerlinVariation : public ParametricVariation <T> class EMBER_API DCPerlinVariation : public ParametricVariation <T>
{ {
public: public:
DCPerlinVariation(T weight = 1.0) : ParametricVariation<T>("dc_perlin", VAR_DC_PERLIN, weight) DCPerlinVariation(T weight = 1.0) : ParametricVariation<T>("dc_perlin", eVariationId::VAR_DC_PERLIN, weight)
{ {
Init(); Init();
} }
@ -1158,7 +1158,7 @@ public:
break; break;
case SHAPE_BLUR: case SHAPE_BLUR:
default: default:
r = (1 + m_Edge) * rand.Frand01<T>(); r = (1 + m_Edge) * rand.Frand01<T>();
if (r > 1 - m_Edge) if (r > 1 - m_Edge)
@ -1215,7 +1215,7 @@ public:
break; break;
case MAP_BUBBLE2: case MAP_BUBBLE2:
default: default:
r = T(0.25) - (SQR(vx) + SQR(vy)); r = T(0.25) - (SQR(vx) + SQR(vy));
if (r < 0) if (r < 0)
@ -1242,7 +1242,7 @@ public:
// Add blur effect to transform // Add blur effect to transform
helper.Out.x = m_Weight * vx; helper.Out.x = m_Weight * vx;
helper.Out.y = m_Weight * vy; helper.Out.y = m_Weight * vy;
helper.Out.z = (m_VarType == VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
col = m_Centre + m_Range * p; col = m_Centre + m_Range * p;
outPoint.m_ColorX = col - Floor<T>(col); outPoint.m_ColorX = col - Floor<T>(col);
} }
@ -1393,7 +1393,7 @@ public:
<< "\n" << "\n"
<< "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * vx; \n" << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * vx; \n"
<< "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * vy; \n" << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * vy; \n"
<< "\t\tvOut.z = " << ((m_VarType == VARTYPE_REG) ? "0" : "vIn.z") << ";\n" << "\t\tvOut.z = " << ((m_VarType == eVariationType::VARTYPE_REG) ? "0" : "vIn.z") << ";\n"
<< "\t\tcol = " << centre << " + " << range << " * p; \n" << "\t\tcol = " << centre << " + " << range << " * p; \n"
<< "\t\toutPoint->m_ColorX = col - floor(col); \n" << "\t\toutPoint->m_ColorX = col - floor(col); \n"
<< "\t}\n"; << "\t}\n";
@ -1416,19 +1416,19 @@ protected:
m_VarFuncs = VarFuncs<T>::Instance(); m_VarFuncs = VarFuncs<T>::Instance();
m_Params.clear(); m_Params.clear();
m_Params.reserve(15); m_Params.reserve(15);
m_Params.push_back(ParamWithName<T>(&m_Shape, prefix + "dc_perlin_shape", 0, INTEGER, 0, 2));//Params. m_Params.push_back(ParamWithName<T>(&m_Shape, prefix + "dc_perlin_shape", 0, eParamType::INTEGER, 0, 2));//Params.
m_Params.push_back(ParamWithName<T>(&m_Map, prefix + "dc_perlin_map", 0, INTEGER, 0, 5)); m_Params.push_back(ParamWithName<T>(&m_Map, prefix + "dc_perlin_map", 0, eParamType::INTEGER, 0, 5));
m_Params.push_back(ParamWithName<T>(&m_SelectCentre, prefix + "dc_perlin_select_centre", 0, REAL, -1, 1)); m_Params.push_back(ParamWithName<T>(&m_SelectCentre, prefix + "dc_perlin_select_centre", 0, eParamType::REAL, -1, 1));
m_Params.push_back(ParamWithName<T>(&m_SelectRange, prefix + "dc_perlin_select_range", 1, REAL, T(0.1), 2)); m_Params.push_back(ParamWithName<T>(&m_SelectRange, prefix + "dc_perlin_select_range", 1, eParamType::REAL, T(0.1), 2));
m_Params.push_back(ParamWithName<T>(&m_Centre, prefix + "dc_perlin_centre", T(0.25))); m_Params.push_back(ParamWithName<T>(&m_Centre, prefix + "dc_perlin_centre", T(0.25)));
m_Params.push_back(ParamWithName<T>(&m_Range, prefix + "dc_perlin_range", T(0.25))); m_Params.push_back(ParamWithName<T>(&m_Range, prefix + "dc_perlin_range", T(0.25)));
m_Params.push_back(ParamWithName<T>(&m_Edge, prefix + "dc_perlin_edge")); m_Params.push_back(ParamWithName<T>(&m_Edge, prefix + "dc_perlin_edge"));
m_Params.push_back(ParamWithName<T>(&m_Scale, prefix + "dc_perlin_scale", 1)); m_Params.push_back(ParamWithName<T>(&m_Scale, prefix + "dc_perlin_scale", 1));
m_Params.push_back(ParamWithName<T>(&m_Octaves, prefix + "dc_perlin_octaves", 2, INTEGER, 1, 5)); m_Params.push_back(ParamWithName<T>(&m_Octaves, prefix + "dc_perlin_octaves", 2, eParamType::INTEGER, 1, 5));
m_Params.push_back(ParamWithName<T>(&m_Amps, prefix + "dc_perlin_amps", 2)); m_Params.push_back(ParamWithName<T>(&m_Amps, prefix + "dc_perlin_amps", 2));
m_Params.push_back(ParamWithName<T>(&m_Freqs, prefix + "dc_perlin_freqs", 2)); m_Params.push_back(ParamWithName<T>(&m_Freqs, prefix + "dc_perlin_freqs", 2));
m_Params.push_back(ParamWithName<T>(&m_Z, prefix + "dc_perlin_z")); m_Params.push_back(ParamWithName<T>(&m_Z, prefix + "dc_perlin_z"));
m_Params.push_back(ParamWithName<T>(&m_SelectBailout, prefix + "dc_perlin_select_bailout", 10, INTEGER, 2, 1000)); m_Params.push_back(ParamWithName<T>(&m_SelectBailout, prefix + "dc_perlin_select_bailout", 10, eParamType::INTEGER, 2, 1000));
m_Params.push_back(ParamWithName<T>(true, &m_NotchBottom, prefix + "dc_perlin_notch_bottom")); m_Params.push_back(ParamWithName<T>(true, &m_NotchBottom, prefix + "dc_perlin_notch_bottom"));
m_Params.push_back(ParamWithName<T>(true, &m_NotchTop, prefix + "dc_perlin_notch_top")); m_Params.push_back(ParamWithName<T>(true, &m_NotchTop, prefix + "dc_perlin_notch_top"));
} }
@ -1453,7 +1453,7 @@ private:
MAKEPREPOSTPARVAR(DCBubble, dc_bubble, DC_BUBBLE) MAKEPREPOSTPARVAR(DCBubble, dc_bubble, DC_BUBBLE)
MAKEPREPOSTPARVAR(DCCarpet, dc_carpet, DC_CARPET) MAKEPREPOSTPARVAR(DCCarpet, dc_carpet, DC_CARPET)
MAKEPREPOSTPARVARASSIGN(DCCube, dc_cube, DC_CUBE, ASSIGNTYPE_SUM) MAKEPREPOSTPARVARASSIGN(DCCube, dc_cube, DC_CUBE, eVariationAssignType::ASSIGNTYPE_SUM)
MAKEPREPOSTPARVAR(DCCylinder, dc_cylinder, DC_CYLINDER) MAKEPREPOSTPARVAR(DCCylinder, dc_cylinder, DC_CYLINDER)
MAKEPREPOSTVAR(DCGridOut, dc_gridout, DC_GRIDOUT) MAKEPREPOSTVAR(DCGridOut, dc_gridout, DC_GRIDOUT)
MAKEPREPOSTPARVAR(DCLinear, dc_linear, DC_LINEAR) MAKEPREPOSTPARVAR(DCLinear, dc_linear, DC_LINEAR)

View File

@ -880,7 +880,7 @@ public:
{ {
bool shouldFlatten = true; bool shouldFlatten = true;
if (GetVariationById(VAR_FLATTEN) == nullptr) if (GetVariationById(eVariationId::VAR_FLATTEN) == nullptr)
{ {
AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing) AllVarsFunc([&] (vector<Variation<T>*>& variations, bool & keepGoing)
{ {
@ -943,15 +943,15 @@ public:
switch (varType) switch (varType)
{ {
case VARTYPE_REG: case eVariationType::VARTYPE_REG:
case VARTYPE_PRE: case eVariationType::VARTYPE_PRE:
s = s =
"\tvIn.x = transX;\n" "\tvIn.x = transX;\n"
"\tvIn.y = transY;\n" "\tvIn.y = transY;\n"
"\tvIn.z = transZ;\n"; "\tvIn.z = transZ;\n";
break; break;
case VARTYPE_POST: case eVariationType::VARTYPE_POST:
default: default:
s = s =
"\tvIn.x = outPoint->m_X;\n" "\tvIn.x = outPoint->m_X;\n"
@ -972,7 +972,7 @@ public:
{ {
switch (assignType) switch (assignType)
{ {
case ASSIGNTYPE_SET: case eVariationAssignType::ASSIGNTYPE_SET:
{ {
helper.m_TransX = helper.Out.x; helper.m_TransX = helper.Out.x;
helper.m_TransY = helper.Out.y; helper.m_TransY = helper.Out.y;
@ -980,7 +980,7 @@ public:
break; break;
} }
case ASSIGNTYPE_SUM: case eVariationAssignType::ASSIGNTYPE_SUM:
default: default:
{ {
helper.m_TransX += helper.Out.x; helper.m_TransX += helper.Out.x;
@ -1000,7 +1000,7 @@ public:
{ {
switch (assignType) switch (assignType)
{ {
case ASSIGNTYPE_SET: case eVariationAssignType::ASSIGNTYPE_SET:
{ {
outPoint.m_X = helper.Out.x; outPoint.m_X = helper.Out.x;
outPoint.m_Y = helper.Out.y; outPoint.m_Y = helper.Out.y;
@ -1008,7 +1008,7 @@ public:
break; break;
} }
case ASSIGNTYPE_SUM: case eVariationAssignType::ASSIGNTYPE_SUM:
default: default:
{ {
outPoint.m_X += helper.Out.x; outPoint.m_X += helper.Out.x;
@ -1031,7 +1031,7 @@ public:
switch (varType) switch (varType)
{ {
case VARTYPE_REG: case eVariationType::VARTYPE_REG:
{ {
s = s =
"\toutPoint->m_X += vOut.x;\n" "\toutPoint->m_X += vOut.x;\n"
@ -1040,11 +1040,11 @@ public:
break; break;
} }
case VARTYPE_PRE: case eVariationType::VARTYPE_PRE:
{ {
switch (assignType) switch (assignType)
{ {
case ASSIGNTYPE_SET: case eVariationAssignType::ASSIGNTYPE_SET:
{ {
s = s =
"\ttransX = vOut.x;\n" "\ttransX = vOut.x;\n"
@ -1053,7 +1053,7 @@ public:
break; break;
} }
case ASSIGNTYPE_SUM: case eVariationAssignType::ASSIGNTYPE_SUM:
default: default:
{ {
s = s =
@ -1067,12 +1067,12 @@ public:
break; break;
} }
case VARTYPE_POST: case eVariationType::VARTYPE_POST:
default: default:
{ {
switch (assignType) switch (assignType)
{ {
case ASSIGNTYPE_SET: case eVariationAssignType::ASSIGNTYPE_SET:
{ {
s = s =
"\toutPoint->m_X = vOut.x;\n" "\toutPoint->m_X = vOut.x;\n"
@ -1081,7 +1081,7 @@ public:
break; break;
} }
case ASSIGNTYPE_SUM: case eVariationAssignType::ASSIGNTYPE_SUM:
default: default:
{ {
s = s =

View File

@ -15,7 +15,7 @@ bool EmberAnimate(EmberOptions& opt)
std::cout.imbue(std::locale("")); std::cout.imbue(std::locale(""));
if (opt.DumpArgs()) if (opt.DumpArgs())
cout << opt.GetValues(OPT_USE_ANIMATE) << endl; cout << opt.GetValues(eOptionUse::OPT_USE_ANIMATE) << endl;
if (opt.OpenCLInfo()) if (opt.OpenCLInfo())
{ {
@ -44,7 +44,7 @@ bool EmberAnimate(EmberOptions& opt)
if (opt.EmberCL()) if (opt.EmberCL())
{ {
renderers = CreateRenderers<T>(OPENCL_RENDERER, devices, false, 0, emberReport); renderers = CreateRenderers<T>(eRendererType::OPENCL_RENDERER, devices, false, 0, emberReport);
errorReport = emberReport.ErrorReport(); errorReport = emberReport.ErrorReport();
if (!errorReport.empty()) if (!errorReport.empty())
@ -89,7 +89,7 @@ bool EmberAnimate(EmberOptions& opt)
} }
else else
{ {
unique_ptr<Renderer<T, float>> tempRenderer(CreateRenderer<T>(CPU_RENDERER, devices, false, 0, emberReport)); unique_ptr<Renderer<T, float>> tempRenderer(CreateRenderer<T>(eRendererType::CPU_RENDERER, devices, false, 0, emberReport));
errorReport = emberReport.ErrorReport(); errorReport = emberReport.ErrorReport();
if (!errorReport.empty()) if (!errorReport.empty())
@ -457,7 +457,7 @@ int _tmain(int argc, _TCHAR* argv[])
putenv(const_cast<char*>("GPU_MAX_ALLOC_PERCENT=100")); putenv(const_cast<char*>("GPU_MAX_ALLOC_PERCENT=100"));
#endif #endif
if (!opt.Populate(argc, argv, OPT_USE_ANIMATE)) if (!opt.Populate(argc, argv, eOptionUse::OPT_USE_ANIMATE))
{ {
#ifdef DO_DOUBLE #ifdef DO_DOUBLE

View File

@ -123,9 +123,9 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
{ {
xformFuncs << "\n\t//" << var->Name() << ".\n"; xformFuncs << "\n\t//" << var->Name() << ".\n";
xformFuncs << var->PrecalcOpenCLString(); xformFuncs << var->PrecalcOpenCLString();
xformFuncs << xform->ReadOpenCLString(VARTYPE_PRE) << "\n"; xformFuncs << xform->ReadOpenCLString(eVariationType::VARTYPE_PRE) << "\n";
xformFuncs << var->OpenCLString() << "\n"; xformFuncs << var->OpenCLString() << "\n";
xformFuncs << xform->WriteOpenCLString(VARTYPE_PRE, var->AssignType()) << "\n"; xformFuncs << xform->WriteOpenCLString(eVariationType::VARTYPE_PRE, var->AssignType()) << "\n";
} }
} }
} }
@ -154,7 +154,7 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
xformFuncs << "\n\toutPoint->m_Y = 0;"; xformFuncs << "\n\toutPoint->m_Y = 0;";
xformFuncs << "\n\toutPoint->m_Z = 0;\n"; xformFuncs << "\n\toutPoint->m_Z = 0;\n";
xformFuncs << "\n\t//Apply each of the " << xform->VariationCount() << " regular variations in this xform.\n\n"; xformFuncs << "\n\t//Apply each of the " << xform->VariationCount() << " regular variations in this xform.\n\n";
xformFuncs << xform->ReadOpenCLString(VARTYPE_REG); xformFuncs << xform->ReadOpenCLString(eVariationType::VARTYPE_REG);
varCount += xform->VariationCount(); varCount += xform->VariationCount();
//Output the code for each regular variation in this xform. //Output the code for each regular variation in this xform.
@ -164,7 +164,7 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
{ {
xformFuncs << "\n\t//" << var->Name() << ".\n" xformFuncs << "\n\t//" << var->Name() << ".\n"
<< var->OpenCLString() << (varIndex == varCount - 1 ? "\n" : "\n\n") << var->OpenCLString() << (varIndex == varCount - 1 ? "\n" : "\n\n")
<< xform->WriteOpenCLString(VARTYPE_REG, ASSIGNTYPE_SUM); << xform->WriteOpenCLString(eVariationType::VARTYPE_REG, eVariationAssignType::ASSIGNTYPE_SUM);
} }
} }
} }
@ -189,9 +189,9 @@ string IterOpenCLKernelCreator<T>::CreateIterKernelString(const Ember<T>& ember,
{ {
xformFuncs << "\n\t//" << var->Name() << ".\n"; xformFuncs << "\n\t//" << var->Name() << ".\n";
xformFuncs << var->PrecalcOpenCLString(); xformFuncs << var->PrecalcOpenCLString();
xformFuncs << xform->ReadOpenCLString(VARTYPE_POST) << "\n"; xformFuncs << xform->ReadOpenCLString(eVariationType::VARTYPE_POST) << "\n";
xformFuncs << var->OpenCLString() << "\n"; xformFuncs << var->OpenCLString() << "\n";
xformFuncs << xform->WriteOpenCLString(VARTYPE_POST, var->AssignType()) << (varIndex == varCount - 1 ? "\n" : "\n\n"); xformFuncs << xform->WriteOpenCLString(eVariationType::VARTYPE_POST, var->AssignType()) << (varIndex == varCount - 1 ? "\n" : "\n\n");
} }
} }
} }

View File

@ -571,11 +571,11 @@ bool RendererCL<T, bucketT>::CreateSpatialFilter(bool& newAlloc)
/// <summary> /// <summary>
/// Get the renderer type enum. /// Get the renderer type enum.
/// </summary> /// </summary>
/// <returns>OPENCL_RENDERER</returns> /// <returns>eRendererType::OPENCL_RENDERER</returns>
template <typename T, typename bucketT> template <typename T, typename bucketT>
eRendererType RendererCL<T, bucketT>::RendererType() const eRendererType RendererCL<T, bucketT>::RendererType() const
{ {
return OPENCL_RENDERER; return eRendererType::OPENCL_RENDERER;
} }
/// <summary> /// <summary>

View File

@ -269,7 +269,7 @@ static Renderer<T, float>* CreateRenderer(eRendererType renderType, const vector
try try
{ {
if (renderType == OPENCL_RENDERER && !devices.empty()) if (renderType == eRendererType::OPENCL_RENDERER && !devices.empty())
{ {
s = "OpenCL"; s = "OpenCL";
renderer = unique_ptr<Renderer<T, float>>(new RendererCL<T, float>(devices, shared, texId)); renderer = unique_ptr<Renderer<T, float>>(new RendererCL<T, float>(devices, shared, texId));
@ -321,7 +321,7 @@ static vector<unique_ptr<Renderer<T, float>>> CreateRenderers(eRendererType rend
try try
{ {
if (renderType == OPENCL_RENDERER && !devices.empty()) if (renderType == eRendererType::OPENCL_RENDERER && !devices.empty())
{ {
s = "OpenCL"; s = "OpenCL";
v.reserve(devices.size()); v.reserve(devices.size());
@ -348,7 +348,7 @@ static vector<unique_ptr<Renderer<T, float>>> CreateRenderers(eRendererType rend
else else
{ {
s = "CPU"; s = "CPU";
v.push_back(std::move(unique_ptr<Renderer<T, float>>(::CreateRenderer<T>(CPU_RENDERER, devices, shared, texId, errorReport)))); v.push_back(std::move(unique_ptr<Renderer<T, float>>(::CreateRenderer<T>(eRendererType::CPU_RENDERER, devices, shared, texId, errorReport))));
} }
} }
catch (const std::exception& e) catch (const std::exception& e)
@ -365,7 +365,7 @@ static vector<unique_ptr<Renderer<T, float>>> CreateRenderers(eRendererType rend
try try
{ {
s = "CPU"; s = "CPU";
v.push_back(std::move(unique_ptr<Renderer<T, float>>(::CreateRenderer<T>(CPU_RENDERER, devices, shared, texId, errorReport)))); v.push_back(std::move(unique_ptr<Renderer<T, float>>(::CreateRenderer<T>(eRendererType::CPU_RENDERER, devices, shared, texId, errorReport))));
} }
catch (const std::exception& e) catch (const std::exception& e)
{ {

View File

@ -12,20 +12,20 @@ static const char* DescriptionString = "Ember - Fractal flames C++ port and enha
/// Enum for specifying which command line programs an option is meant to be used with. /// Enum for specifying which command line programs an option is meant to be used with.
/// If an option is used with multiple programs, their values are ORed together. /// If an option is used with multiple programs, their values are ORed together.
/// </summary> /// </summary>
enum eOptionUse enum class eOptionUse : et
{ {
OPT_USE_RENDER = 1, OPT_USE_RENDER = 1,
OPT_USE_ANIMATE = 1 << 1, OPT_USE_ANIMATE = 1 << 1,
OPT_USE_GENOME = 1 << 2, OPT_USE_GENOME = 1 << 2,
OPT_RENDER_ANIM = OPT_USE_RENDER | OPT_USE_ANIMATE, OPT_RENDER_ANIM = et(eOptionUse::OPT_USE_RENDER) | et(eOptionUse::OPT_USE_ANIMATE),
OPT_ANIM_GENOME = OPT_USE_ANIMATE | OPT_USE_GENOME, OPT_ANIM_GENOME = et(eOptionUse::OPT_USE_ANIMATE) | et(eOptionUse::OPT_USE_GENOME),
OPT_USE_ALL = OPT_USE_RENDER | OPT_USE_ANIMATE | OPT_USE_GENOME OPT_USE_ALL = et(eOptionUse::OPT_USE_RENDER) | et(eOptionUse::OPT_USE_ANIMATE) | et(eOptionUse::OPT_USE_GENOME)
}; };
/// <summary> /// <summary>
/// Unique identifiers for every available option across all programs. /// Unique identifiers for every available option across all programs.
/// </summary> /// </summary>
enum eOptionIDs enum class eOptionIDs : et
{ {
//Diagnostic args. //Diagnostic args.
OPT_HELP, OPT_HELP,
@ -132,7 +132,7 @@ class EmberOptions;
template <typename T> template <typename T>
class EmberOptionEntry class EmberOptionEntry
{ {
friend class EmberOptions; friend class EmberOptions;
private: private:
/// <summary> /// <summary>
@ -140,7 +140,7 @@ private:
/// </summary> /// </summary>
EmberOptionEntry() EmberOptionEntry()
{ {
m_OptionUse = OPT_USE_ALL; m_OptionUse = eOptionUse::OPT_USE_ALL;
m_Option.nArgType = SO_NONE; m_Option.nArgType = SO_NONE;
m_Option.nId = 0; m_Option.nId = 0;
m_Option.pszArg = _T("--fillmein"); m_Option.pszArg = _T("--fillmein");
@ -216,66 +216,66 @@ private:
//Bool. //Bool.
#define Eob EmberOptionEntry<bool> #define Eob EmberOptionEntry<bool>
#define INITBOOLOPTION(member, option) \ #define INITBOOLOPTION(member, option) \
member = option; \ member = option; \
m_BoolArgs.push_back(&member) m_BoolArgs.push_back(&member)
#define PARSEBOOLOPTION(opt, member) \ #define PARSEBOOLOPTION(e, member) \
case (opt): \ case (e): \
{ \
if (member.m_Option.nArgType == SO_OPT) \
{ \ { \
if (member.m_Option.nArgType == SO_OPT) \ member(!strcmp(args.OptionArg(), "true")); \
{ \
member(!strcmp(args.OptionArg(), "true")); \
} \
else \
{ \
member(true); \
} \
} \ } \
break else \
{ \
member(true); \
} \
} \
break
//Int. //Int.
#define Eoi EmberOptionEntry<intmax_t> #define Eoi EmberOptionEntry<intmax_t>
#define INITINTOPTION(member, option) \ #define INITINTOPTION(member, option) \
member = option; \ member = option; \
m_IntArgs.push_back(&member) m_IntArgs.push_back(&member)
#define PARSEINTOPTION(opt, member) \ #define PARSEINTOPTION(e, member) \
case (opt): \ case (e): \
sscanf_s(args.OptionArg(), "%ld", &member.m_Val); \ sscanf_s(args.OptionArg(), "%ld", &member.m_Val); \
break break
//Uint. //Uint.
#define Eou EmberOptionEntry<size_t> #define Eou EmberOptionEntry<size_t>
#define INITUINTOPTION(member, option) \ #define INITUINTOPTION(member, option) \
member = option; \ member = option; \
m_UintArgs.push_back(&member) m_UintArgs.push_back(&member)
#define PARSEUINTOPTION(opt, member) \ #define PARSEUINTOPTION(e, member) \
case (opt): \ case (e): \
sscanf_s(args.OptionArg(), "%lu", &member.m_Val); \ sscanf_s(args.OptionArg(), "%lu", &member.m_Val); \
break break
//Double. //Double.
#define Eod EmberOptionEntry<double> #define Eod EmberOptionEntry<double>
#define INITDOUBLEOPTION(member, option) \ #define INITDOUBLEOPTION(member, option) \
member = option; \ member = option; \
m_DoubleArgs.push_back(&member) m_DoubleArgs.push_back(&member)
#define PARSEDOUBLEOPTION(opt, member) \ #define PARSEDOUBLEOPTION(e, member) \
case (opt): \ case (e): \
sscanf_s(args.OptionArg(), "%lf", &member.m_Val); \ sscanf_s(args.OptionArg(), "%lf", &member.m_Val); \
break break
//String. //String.
#define Eos EmberOptionEntry<string> #define Eos EmberOptionEntry<string>
#define INITSTRINGOPTION(member, option) \ #define INITSTRINGOPTION(member, option) \
member = option; \ member = option; \
m_StringArgs.push_back(&member) m_StringArgs.push_back(&member)
#define PARSESTRINGOPTION(opt, member) \ #define PARSESTRINGOPTION(e, member) \
case (opt): \ case (e): \
member.m_Val = args.OptionArg(); \ member.m_Val = args.OptionArg(); \
break break
/// <summary> /// <summary>
/// Class for holding all available options across all command line programs. /// Class for holding all available options across all command line programs.
@ -295,116 +295,108 @@ public:
m_UintArgs.reserve(25); m_UintArgs.reserve(25);
m_DoubleArgs.reserve(25); m_DoubleArgs.reserve(25);
m_StringArgs.reserve(35); m_StringArgs.reserve(35);
//Diagnostic bools. //Diagnostic bools.
INITBOOLOPTION(Help, Eob(OPT_USE_ALL, OPT_HELP, _T("--help"), false, SO_NONE, "\t--help Show this screen.\n")); INITBOOLOPTION(Help, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_HELP, _T("--help"), false, SO_NONE, "\t--help Show this screen.\n"));
INITBOOLOPTION(Version, Eob(OPT_USE_ALL, OPT_VERSION, _T("--version"), false, SO_NONE, "\t--version Show version.\n")); INITBOOLOPTION(Version, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_VERSION, _T("--version"), false, SO_NONE, "\t--version Show version.\n"));
INITBOOLOPTION(Verbose, Eob(OPT_USE_ALL, OPT_VERBOSE, _T("--verbose"), false, SO_NONE, "\t--verbose Verbose output.\n")); INITBOOLOPTION(Verbose, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_VERBOSE, _T("--verbose"), false, SO_NONE, "\t--verbose Verbose output.\n"));
INITBOOLOPTION(Debug, Eob(OPT_USE_ALL, OPT_DEBUG, _T("--debug"), false, SO_NONE, "\t--debug Debug output.\n")); INITBOOLOPTION(Debug, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_DEBUG, _T("--debug"), false, SO_NONE, "\t--debug Debug output.\n"));
INITBOOLOPTION(DumpArgs, Eob(OPT_USE_ALL, OPT_DUMP_ARGS, _T("--dumpargs"), false, SO_NONE, "\t--dumpargs Print all arguments entered from either the command line or environment variables.\n")); INITBOOLOPTION(DumpArgs, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_DUMP_ARGS, _T("--dumpargs"), false, SO_NONE, "\t--dumpargs Print all arguments entered from either the command line or environment variables.\n"));
INITBOOLOPTION(DoProgress, Eob(OPT_USE_ALL, OPT_PROGRESS, _T("--progress"), false, SO_NONE, "\t--progress Display progress. This will slow down processing by about 10%%.\n")); INITBOOLOPTION(DoProgress, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_PROGRESS, _T("--progress"), false, SO_NONE, "\t--progress Display progress. This will slow down processing by about 10%%.\n"));
INITBOOLOPTION(OpenCLInfo, Eob(OPT_USE_ALL, OPT_DUMP_OPENCL_INFO, _T("--openclinfo"), false, SO_NONE, "\t--openclinfo Display platforms and devices for OpenCL.\n")); INITBOOLOPTION(OpenCLInfo, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_DUMP_OPENCL_INFO, _T("--openclinfo"), false, SO_NONE, "\t--openclinfo Display platforms and devices for OpenCL.\n"));
//Execution bools. //Execution bools.
INITBOOLOPTION(EmberCL, Eob(OPT_USE_ALL, OPT_OPENCL, _T("--opencl"), false, SO_NONE, "\t--opencl Use OpenCL renderer (EmberCL) for rendering [default: false].\n")); INITBOOLOPTION(EmberCL, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_OPENCL, _T("--opencl"), false, SO_NONE, "\t--opencl Use OpenCL renderer (EmberCL) for rendering [default: false].\n"));
INITBOOLOPTION(EarlyClip, Eob(OPT_USE_ALL, OPT_EARLYCLIP, _T("--earlyclip"), false, SO_NONE, "\t--earlyclip Perform clipping of RGB values before spatial filtering for better antialiasing and resizing [default: false].\n")); INITBOOLOPTION(EarlyClip, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_EARLYCLIP, _T("--earlyclip"), false, SO_NONE, "\t--earlyclip Perform clipping of RGB values before spatial filtering for better antialiasing and resizing [default: false].\n"));
INITBOOLOPTION(YAxisUp, Eob(OPT_USE_ALL, OPT_POS_Y_UP, _T("--yaxisup"), false, SO_NONE, "\t--yaxisup Orient the image with the positive y axis pointing up [default: false].\n")); INITBOOLOPTION(YAxisUp, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_POS_Y_UP, _T("--yaxisup"), false, SO_NONE, "\t--yaxisup Orient the image with the positive y axis pointing up [default: false].\n"));
INITBOOLOPTION(Transparency, Eob(OPT_USE_ALL, OPT_TRANSPARENCY, _T("--transparency"), false, SO_NONE, "\t--transparency Include alpha channel in final output [default: false except for PNG].\n")); INITBOOLOPTION(Transparency, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_TRANSPARENCY, _T("--transparency"), false, SO_NONE, "\t--transparency Include alpha channel in final output [default: false except for PNG].\n"));
INITBOOLOPTION(NameEnable, Eob(OPT_USE_RENDER, OPT_NAME_ENABLE, _T("--name_enable"), false, SO_NONE, "\t--name_enable Use the name attribute contained in the xml as the output filename [default: false].\n")); INITBOOLOPTION(NameEnable, Eob(eOptionUse::OPT_USE_RENDER, eOptionIDs::OPT_NAME_ENABLE, _T("--name_enable"), false, SO_NONE, "\t--name_enable Use the name attribute contained in the xml as the output filename [default: false].\n"));
INITBOOLOPTION(IntPalette, Eob(OPT_RENDER_ANIM, OPT_INT_PALETTE, _T("--intpalette"), false, SO_NONE, "\t--intpalette Force palette RGB values to be integers [default: false (float)].\n")); INITBOOLOPTION(IntPalette, Eob(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_INT_PALETTE, _T("--intpalette"), false, SO_NONE, "\t--intpalette Force palette RGB values to be integers [default: false (float)].\n"));
INITBOOLOPTION(HexPalette, Eob(OPT_USE_ALL, OPT_HEX_PALETTE, _T("--hex_palette"), true, SO_OPT, "\t--hex_palette Force palette RGB values to be hex [default: true].\n")); INITBOOLOPTION(HexPalette, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_HEX_PALETTE, _T("--hex_palette"), true, SO_OPT, "\t--hex_palette Force palette RGB values to be hex [default: true].\n"));
INITBOOLOPTION(InsertPalette, Eob(OPT_RENDER_ANIM, OPT_INSERT_PALETTE, _T("--insert_palette"), false, SO_NONE, "\t--insert_palette Insert the palette into the image for debugging purposes [default: false].\n")); INITBOOLOPTION(InsertPalette, Eob(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_INSERT_PALETTE, _T("--insert_palette"), false, SO_NONE, "\t--insert_palette Insert the palette into the image for debugging purposes [default: false].\n"));
INITBOOLOPTION(JpegComments, Eob(OPT_RENDER_ANIM, OPT_JPEG_COMMENTS, _T("--enable_jpeg_comments"), true, SO_OPT, "\t--enable_jpeg_comments Enables comments in the jpeg header [default: true].\n")); INITBOOLOPTION(JpegComments, Eob(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_JPEG_COMMENTS, _T("--enable_jpeg_comments"), true, SO_OPT, "\t--enable_jpeg_comments Enables comments in the jpeg header [default: true].\n"));
INITBOOLOPTION(PngComments, Eob(OPT_RENDER_ANIM, OPT_PNG_COMMENTS, _T("--enable_png_comments"), true, SO_OPT, "\t--enable_png_comments Enables comments in the png header [default: true].\n")); INITBOOLOPTION(PngComments, Eob(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_PNG_COMMENTS, _T("--enable_png_comments"), true, SO_OPT, "\t--enable_png_comments Enables comments in the png header [default: true].\n"));
INITBOOLOPTION(WriteGenome, Eob(OPT_USE_ANIMATE, OPT_WRITE_GENOME, _T("--write_genome"), false, SO_NONE, "\t--write_genome Write out flame associated with center of motion blur window [default: false].\n")); INITBOOLOPTION(WriteGenome, Eob(eOptionUse::OPT_USE_ANIMATE, eOptionIDs::OPT_WRITE_GENOME, _T("--write_genome"), false, SO_NONE, "\t--write_genome Write out flame associated with center of motion blur window [default: false].\n"));
INITBOOLOPTION(ThreadedWrite, Eob(OPT_RENDER_ANIM, OPT_THREADED_WRITE, _T("--threaded_write"), true, SO_OPT, "\t--threaded_write Use a separate thread to write images to disk. This gives better performance, but doubles the memory required for the final output buffer. [default: true].\n")); INITBOOLOPTION(ThreadedWrite, Eob(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_THREADED_WRITE, _T("--threaded_write"), true, SO_OPT, "\t--threaded_write Use a separate thread to write images to disk. This gives better performance, but doubles the memory required for the final output buffer. [default: true].\n"));
INITBOOLOPTION(Enclosed, Eob(OPT_USE_GENOME, OPT_ENCLOSED, _T("--enclosed"), true, SO_OPT, "\t--enclosed Use enclosing XML tags [default: true].\n")); INITBOOLOPTION(Enclosed, Eob(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_ENCLOSED, _T("--enclosed"), true, SO_OPT, "\t--enclosed Use enclosing XML tags [default: true].\n"));
INITBOOLOPTION(NoEdits, Eob(OPT_USE_GENOME, OPT_NO_EDITS, _T("--noedits"), false, SO_NONE, "\t--noedits Exclude edit tags when writing Xml [default: false].\n")); INITBOOLOPTION(NoEdits, Eob(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_NO_EDITS, _T("--noedits"), false, SO_NONE, "\t--noedits Exclude edit tags when writing Xml [default: false].\n"));
INITBOOLOPTION(UnsmoothEdge, Eob(OPT_USE_GENOME, OPT_UNSMOOTH_EDGE, _T("--unsmoother"), false, SO_NONE, "\t--unsmoother Do not use smooth blending for sheep edges [default: false].\n")); INITBOOLOPTION(UnsmoothEdge, Eob(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_UNSMOOTH_EDGE, _T("--unsmoother"), false, SO_NONE, "\t--unsmoother Do not use smooth blending for sheep edges [default: false].\n"));
INITBOOLOPTION(LockAccum, Eob(OPT_USE_ALL, OPT_LOCK_ACCUM, _T("--lock_accum"), false, SO_NONE, "\t--lock_accum Lock threads when accumulating to the histogram using the CPU. This will drop performance to that of single threading [default: false].\n")); INITBOOLOPTION(LockAccum, Eob(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_LOCK_ACCUM, _T("--lock_accum"), false, SO_NONE, "\t--lock_accum Lock threads when accumulating to the histogram using the CPU. This will drop performance to that of single threading [default: false].\n"));
INITBOOLOPTION(DumpKernel, Eob(OPT_USE_RENDER, OPT_DUMP_KERNEL, _T("--dump_kernel"), false, SO_NONE, "\t--dump_kernel Print the iteration kernel string when using OpenCL (ignored for CPU) [default: false].\n")); INITBOOLOPTION(DumpKernel, Eob(eOptionUse::OPT_USE_RENDER, eOptionIDs::OPT_DUMP_KERNEL, _T("--dump_kernel"), false, SO_NONE, "\t--dump_kernel Print the iteration kernel string when using OpenCL (ignored for CPU) [default: false].\n"));
//Int. //Int.
INITINTOPTION(Symmetry, Eoi(OPT_USE_GENOME, OPT_SYMMETRY, _T("--symmetry"), 0, SO_REQ_SEP, "\t--symmetry=<val> Set symmetry of result [default: 0].\n")); INITINTOPTION(Symmetry, Eoi(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_SYMMETRY, _T("--symmetry"), 0, SO_REQ_SEP, "\t--symmetry=<val> Set symmetry of result [default: 0].\n"));
INITINTOPTION(SheepGen, Eoi(OPT_USE_GENOME, OPT_SHEEP_GEN, _T("--sheep_gen"), -1, SO_REQ_SEP, "\t--sheep_gen=<val> Sheep generation of this flame [default: -1].\n")); INITINTOPTION(SheepGen, Eoi(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_SHEEP_GEN, _T("--sheep_gen"), -1, SO_REQ_SEP, "\t--sheep_gen=<val> Sheep generation of this flame [default: -1].\n"));
INITINTOPTION(SheepId, Eoi(OPT_USE_GENOME, OPT_SHEEP_ID, _T("--sheep_id"), -1, SO_REQ_SEP, "\t--sheep_id=<val> Sheep ID of this flame [default: -1].\n")); INITINTOPTION(SheepId, Eoi(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_SHEEP_ID, _T("--sheep_id"), -1, SO_REQ_SEP, "\t--sheep_id=<val> Sheep ID of this flame [default: -1].\n"));
#ifdef _WIN32 #ifdef _WIN32
INITINTOPTION(Priority, Eoi(OPT_RENDER_ANIM, OPT_PRIORITY, _T("--priority"), eThreadPriority::NORMAL, SO_REQ_SEP, "\t--priority=<val> The priority of the CPU rendering threads from -2 - 2. This does not apply to OpenCL rendering.\n")); INITINTOPTION(Priority, Eoi(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_PRIORITY, _T("--priority"), int(eThreadPriority::NORMAL), SO_REQ_SEP, "\t--priority=<val> The priority of the CPU rendering threads from -2 - 2. This does not apply to OpenCL rendering.\n"));
#else #else
INITINTOPTION(Priority, Eoi(OPT_RENDER_ANIM, OPT_PRIORITY, _T("--priority"), eThreadPriority::NORMAL, SO_REQ_SEP, "\t--priority=<val> The priority of the CPU rendering threads, 1, 25, 50, 75, 99. This does not apply to OpenCL rendering.\n")); INITINTOPTION(Priority, Eoi(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_PRIORITY, _T("--priority"), int(eThreadPriority::NORMAL), SO_REQ_SEP, "\t--priority=<val> The priority of the CPU rendering threads, 1, 25, 50, 75, 99. This does not apply to OpenCL rendering.\n"));
#endif #endif
//Uint. //Uint.
INITUINTOPTION(Seed, Eou(OPT_USE_ALL, OPT_SEED, _T("--seed"), 0, SO_REQ_SEP, "\t--seed=<val> Integer seed to use for the random number generator [default: random].\n")); INITUINTOPTION(Seed, Eou(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_SEED, _T("--seed"), 0, SO_REQ_SEP, "\t--seed=<val> Integer seed to use for the random number generator [default: random].\n"));
INITUINTOPTION(ThreadCount, Eou(OPT_USE_ALL, OPT_NTHREADS, _T("--nthreads"), 0, SO_REQ_SEP, "\t--nthreads=<val> The number of threads to use [default: use all available cores].\n")); INITUINTOPTION(ThreadCount, Eou(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_NTHREADS, _T("--nthreads"), 0, SO_REQ_SEP, "\t--nthreads=<val> The number of threads to use [default: use all available cores].\n"));
INITUINTOPTION(Strips, Eou(OPT_USE_RENDER, OPT_STRIPS, _T("--nstrips"), 1, SO_REQ_SEP, "\t--nstrips=<val> The number of fractions to split a single render frame into. Useful for print size renders or low memory systems [default: 1].\n")); INITUINTOPTION(Strips, Eou(eOptionUse::OPT_USE_RENDER, eOptionIDs::OPT_STRIPS, _T("--nstrips"), 1, SO_REQ_SEP, "\t--nstrips=<val> The number of fractions to split a single render frame into. Useful for print size renders or low memory systems [default: 1].\n"));
INITUINTOPTION(Supersample, Eou(OPT_RENDER_ANIM, OPT_SUPERSAMPLE, _T("--supersample"), 0, SO_REQ_SEP, "\t--supersample=<val> The supersample value used to override the one specified in the file [default: 0 (use value from file)].\n")); INITUINTOPTION(Supersample, Eou(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_SUPERSAMPLE, _T("--supersample"), 0, SO_REQ_SEP, "\t--supersample=<val> The supersample value used to override the one specified in the file [default: 0 (use value from file)].\n"));
INITUINTOPTION(BitsPerChannel, Eou(OPT_RENDER_ANIM, OPT_BPC, _T("--bpc"), 8, SO_REQ_SEP, "\t--bpc=<val> Bits per channel. 8 or 16 for PNG, 8 for all others [default: 8].\n")); INITUINTOPTION(BitsPerChannel, Eou(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_BPC, _T("--bpc"), 8, SO_REQ_SEP, "\t--bpc=<val> Bits per channel. 8 or 16 for PNG, 8 for all others [default: 8].\n"));
INITUINTOPTION(SubBatchSize, Eou(OPT_USE_ALL, OPT_SBS, _T("--sub_batch_size"), DEFAULT_SBS, SO_REQ_SEP, "\t--sub_batch_size=<val> The chunk size that iterating will be broken into [default: 10k].\n")); INITUINTOPTION(SubBatchSize, Eou(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_SBS, _T("--sub_batch_size"), DEFAULT_SBS, SO_REQ_SEP, "\t--sub_batch_size=<val> The chunk size that iterating will be broken into [default: 10k].\n"));
INITUINTOPTION(Bits, Eou(OPT_USE_ALL, OPT_BITS, _T("--bits"), 33, SO_REQ_SEP, "\t--bits=<val> Determines the types used for the histogram and accumulator [default: 33].\n" INITUINTOPTION(Bits, Eou(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_BITS, _T("--bits"), 33, SO_REQ_SEP, "\t--bits=<val> Determines the types used for the histogram and accumulator [default: 33].\n"
"\t\t\t\t\t32: Histogram: float, Accumulator: float.\n" "\t\t\t\t\t32: Histogram: float, Accumulator: float.\n"
"\t\t\t\t\t33: Histogram: float, Accumulator: float.\n"//This differs from the original which used an int hist for bits 33. "\t\t\t\t\t33: Histogram: float, Accumulator: float.\n"//This differs from the original which used an int hist for bits 33.
"\t\t\t\t\t64: Histogram: double, Accumulator: double.\n")); "\t\t\t\t\t64: Histogram: double, Accumulator: double.\n"));
INITUINTOPTION(PrintEditDepth, Eou(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_PRINT_EDIT_DEPTH, _T("--print_edit_depth"), 0, SO_REQ_SEP, "\t--print_edit_depth=<val> Depth to truncate <edit> tag structure when converting a flame to xml. 0 prints all <edit> tags [default: 0].\n"));
INITUINTOPTION(PrintEditDepth, Eou(OPT_USE_ALL, OPT_PRINT_EDIT_DEPTH, _T("--print_edit_depth"), 0, SO_REQ_SEP, "\t--print_edit_depth=<val> Depth to truncate <edit> tag structure when converting a flame to xml. 0 prints all <edit> tags [default: 0].\n")); INITUINTOPTION(JpegQuality, Eou(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_JPEG, _T("--jpeg"), 95, SO_REQ_SEP, "\t--jpeg=<val> Jpeg quality 0-100 for compression [default: 95].\n"));
INITUINTOPTION(JpegQuality, Eou(OPT_RENDER_ANIM, OPT_JPEG, _T("--jpeg"), 95, SO_REQ_SEP, "\t--jpeg=<val> Jpeg quality 0-100 for compression [default: 95].\n")); INITUINTOPTION(FirstFrame, Eou(eOptionUse::OPT_USE_ANIMATE, eOptionIDs::OPT_BEGIN, _T("--begin"), UINT_MAX, SO_REQ_SEP, "\t--begin=<val> Time of first frame to render [default: first time specified in file].\n"));
INITUINTOPTION(FirstFrame, Eou(OPT_USE_ANIMATE, OPT_BEGIN, _T("--begin"), UINT_MAX, SO_REQ_SEP, "\t--begin=<val> Time of first frame to render [default: first time specified in file].\n")); INITUINTOPTION(LastFrame, Eou(eOptionUse::OPT_USE_ANIMATE, eOptionIDs::OPT_END, _T("--end"), UINT_MAX, SO_REQ_SEP, "\t--end=<val> Time of last frame to render [default: last time specified in the input file].\n"));
INITUINTOPTION(LastFrame, Eou(OPT_USE_ANIMATE, OPT_END, _T("--end"), UINT_MAX, SO_REQ_SEP, "\t--end=<val> Time of last frame to render [default: last time specified in the input file].\n")); INITUINTOPTION(Time, Eou(eOptionUse::OPT_ANIM_GENOME, eOptionIDs::OPT_TIME, _T("--time"), 0, SO_REQ_SEP, "\t--time=<val> Time of first and last frame (ie do one frame).\n"));
INITUINTOPTION(Time, Eou(OPT_ANIM_GENOME, OPT_TIME, _T("--time"), 0, SO_REQ_SEP, "\t--time=<val> Time of first and last frame (ie do one frame).\n")); INITUINTOPTION(Frame, Eou(eOptionUse::OPT_ANIM_GENOME, eOptionIDs::OPT_FRAME, _T("--frame"), 0, SO_REQ_SEP, "\t--frame=<val> Synonym for \"time\".\n"));
INITUINTOPTION(Frame, Eou(OPT_ANIM_GENOME, OPT_FRAME, _T("--frame"), 0, SO_REQ_SEP, "\t--frame=<val> Synonym for \"time\".\n")); INITUINTOPTION(Dtime, Eou(eOptionUse::OPT_USE_ANIMATE, eOptionIDs::OPT_DTIME, _T("--dtime"), 1, SO_REQ_SEP, "\t--dtime=<val> Time between frames [default: 1].\n"));
INITUINTOPTION(Dtime, Eou(OPT_USE_ANIMATE, OPT_DTIME, _T("--dtime"), 1, SO_REQ_SEP, "\t--dtime=<val> Time between frames [default: 1].\n")); INITUINTOPTION(Frames, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_NFRAMES, _T("--nframes"), 20, SO_REQ_SEP, "\t--nframes=<val> Number of frames for each stage of the animation [default: 20].\n"));
INITUINTOPTION(Frames, Eou(OPT_USE_GENOME, OPT_NFRAMES, _T("--nframes"), 20, SO_REQ_SEP, "\t--nframes=<val> Number of frames for each stage of the animation [default: 20].\n")); INITUINTOPTION(Repeat, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_REPEAT, _T("--repeat"), 1, SO_REQ_SEP, "\t--repeat=<val> Number of new flames to create. Ignored if sequence, inter or rotate were specified [default: 1].\n"));
INITUINTOPTION(Repeat, Eou(OPT_USE_GENOME, OPT_REPEAT, _T("--repeat"), 1, SO_REQ_SEP, "\t--repeat=<val> Number of new flames to create. Ignored if sequence, inter or rotate were specified [default: 1].\n")); INITUINTOPTION(Tries, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_TRIES, _T("--tries"), 10, SO_REQ_SEP, "\t--tries=<val> Number times to try creating a flame that meets the specified constraints. Ignored if sequence, inter or rotate were specified [default: 10].\n"));
INITUINTOPTION(Tries, Eou(OPT_USE_GENOME, OPT_TRIES, _T("--tries"), 10, SO_REQ_SEP, "\t--tries=<val> Number times to try creating a flame that meets the specified constraints. Ignored if sequence, inter or rotate were specified [default: 10].\n")); INITUINTOPTION(MaxXforms, Eou(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_MAX_XFORMS, _T("--maxxforms"), UINT_MAX, SO_REQ_SEP, "\t--maxxforms=<val> The maximum number of xforms allowed in the final output.\n"));
INITUINTOPTION(MaxXforms, Eou(OPT_USE_GENOME, OPT_MAX_XFORMS, _T("--maxxforms"), UINT_MAX, SO_REQ_SEP, "\t--maxxforms=<val> The maximum number of xforms allowed in the final output.\n"));
//Double. //Double.
INITDOUBLEOPTION(SizeScale, Eod(OPT_RENDER_ANIM, OPT_SS, _T("--ss"), 1, SO_REQ_SEP, "\t--ss=<val> Size scale. All dimensions are scaled by this amount [default: 1.0].\n")); INITDOUBLEOPTION(SizeScale, Eod(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_SS, _T("--ss"), 1, SO_REQ_SEP, "\t--ss=<val> Size scale. All dimensions are scaled by this amount [default: 1.0].\n"));
INITDOUBLEOPTION(QualityScale, Eod(OPT_RENDER_ANIM, OPT_QS, _T("--qs"), 1, SO_REQ_SEP, "\t--qs=<val> Quality scale. All quality values are scaled by this amount [default: 1.0].\n")); INITDOUBLEOPTION(QualityScale, Eod(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_QS, _T("--qs"), 1, SO_REQ_SEP, "\t--qs=<val> Quality scale. All quality values are scaled by this amount [default: 1.0].\n"));
INITDOUBLEOPTION(AspectRatio, Eod(OPT_USE_ALL, OPT_PIXEL_ASPECT, _T("--pixel_aspect"), 1, SO_REQ_SEP, "\t--pixel_aspect=<val> Aspect ratio of pixels (width over height), eg. 0.90909 for NTSC [default: 1.0].\n")); INITDOUBLEOPTION(AspectRatio, Eod(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_PIXEL_ASPECT, _T("--pixel_aspect"), 1, SO_REQ_SEP, "\t--pixel_aspect=<val> Aspect ratio of pixels (width over height), eg. 0.90909 for NTSC [default: 1.0].\n"));
INITDOUBLEOPTION(Stagger, Eod(OPT_USE_GENOME, OPT_STAGGER, _T("--stagger"), 0, SO_REQ_SEP, "\t--stagger=<val> Affects simultaneity of xform interpolation during flame interpolation.\n" INITDOUBLEOPTION(Stagger, Eod(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_STAGGER, _T("--stagger"), 0, SO_REQ_SEP, "\t--stagger=<val> Affects simultaneity of xform interpolation during flame interpolation.\n"
"\t Represents how 'separate' the xforms are interpolated. Set to 1 for each\n" "\t Represents how 'separate' the xforms are interpolated. Set to 1 for each\n"
"\t xform to be interpolated individually, fractions control interpolation overlap [default: 0].\n")); "\t xform to be interpolated individually, fractions control interpolation overlap [default: 0].\n"));
INITDOUBLEOPTION(AvgThresh, Eod(OPT_USE_GENOME, OPT_AVG_THRESH, _T("--avg"), 20.0, SO_REQ_SEP, "\t--avg=<val> Minimum average pixel channel sum (r + g + b) threshold from 0 - 765. Ignored if sequence, inter or rotate were specified [default: 20].\n")); INITDOUBLEOPTION(AvgThresh, Eod(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_AVG_THRESH, _T("--avg"), 20.0, SO_REQ_SEP, "\t--avg=<val> Minimum average pixel channel sum (r + g + b) threshold from 0 - 765. Ignored if sequence, inter or rotate were specified [default: 20].\n"));
INITDOUBLEOPTION(BlackThresh, Eod(OPT_USE_GENOME, OPT_BLACK_THRESH, _T("--black"), 0.01, SO_REQ_SEP, "\t--black=<val> Minimum number of allowed black pixels as a percentage from 0 - 1. Ignored if sequence, inter or rotate were specified [default: 0.01].\n")); INITDOUBLEOPTION(BlackThresh, Eod(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_BLACK_THRESH, _T("--black"), 0.01, SO_REQ_SEP, "\t--black=<val> Minimum number of allowed black pixels as a percentage from 0 - 1. Ignored if sequence, inter or rotate were specified [default: 0.01].\n"));
INITDOUBLEOPTION(WhiteLimit, Eod(OPT_USE_GENOME, OPT_WHITE_LIMIT, _T("--white"), 0.05, SO_REQ_SEP, "\t--white=<val> Maximum number of allowed white pixels as a percentage from 0 - 1. Ignored if sequence, inter or rotate were specified [default: 0.05].\n")); INITDOUBLEOPTION(WhiteLimit, Eod(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_WHITE_LIMIT, _T("--white"), 0.05, SO_REQ_SEP, "\t--white=<val> Maximum number of allowed white pixels as a percentage from 0 - 1. Ignored if sequence, inter or rotate were specified [default: 0.05].\n"));
INITDOUBLEOPTION(Speed, Eod(OPT_USE_GENOME, OPT_SPEED, _T("--speed"), 0.1, SO_REQ_SEP, "\t--speed=<val> Speed as a percentage from 0 - 1 that the affine transform of an existing flame mutates with the new flame. Ignored if sequence, inter or rotate were specified [default: 0.1].\n")); INITDOUBLEOPTION(Speed, Eod(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_SPEED, _T("--speed"), 0.1, SO_REQ_SEP, "\t--speed=<val> Speed as a percentage from 0 - 1 that the affine transform of an existing flame mutates with the new flame. Ignored if sequence, inter or rotate were specified [default: 0.1].\n"));
INITDOUBLEOPTION(OffsetX, Eod(OPT_USE_GENOME, OPT_OFFSETX, _T("--offsetx"), 0.0, SO_REQ_SEP, "\t--offsetx=<val> Amount to jitter each flame horizontally when applying genome tools [default: 0].\n")); INITDOUBLEOPTION(OffsetX, Eod(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_OFFSETX, _T("--offsetx"), 0.0, SO_REQ_SEP, "\t--offsetx=<val> Amount to jitter each flame horizontally when applying genome tools [default: 0].\n"));
INITDOUBLEOPTION(OffsetY, Eod(OPT_USE_GENOME, OPT_OFFSETY, _T("--offsety"), 0.0, SO_REQ_SEP, "\t--offsety=<val> Amount to jitter each flame vertically when applying genome tools [default: 0].\n")); INITDOUBLEOPTION(OffsetY, Eod(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_OFFSETY, _T("--offsety"), 0.0, SO_REQ_SEP, "\t--offsety=<val> Amount to jitter each flame vertically when applying genome tools [default: 0].\n"));
INITDOUBLEOPTION(UseMem, Eod(OPT_USE_RENDER, OPT_USEMEM, _T("--use_mem"), 0.0, SO_REQ_SEP, "\t--use_mem=<val> Number of bytes of memory to use [default: max system memory].\n")); INITDOUBLEOPTION(UseMem, Eod(eOptionUse::OPT_USE_RENDER, eOptionIDs::OPT_USEMEM, _T("--use_mem"), 0.0, SO_REQ_SEP, "\t--use_mem=<val> Number of bytes of memory to use [default: max system memory].\n"));
INITDOUBLEOPTION(Loops, Eod(OPT_USE_GENOME, OPT_LOOPS, _T("--loops"), 1.0, SO_REQ_SEP, "\t--loops=<val> Number of times to rotate each control point in sequence [default: 1].\n")); INITDOUBLEOPTION(Loops, Eod(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_LOOPS, _T("--loops"), 1.0, SO_REQ_SEP, "\t--loops=<val> Number of times to rotate each control point in sequence [default: 1].\n"));
//String. //String.
INITSTRINGOPTION(Device, Eos(OPT_USE_ALL, OPT_OPENCL_DEVICE, _T("--device"), "0", SO_REQ_SEP, "\t--device The comma-separated OpenCL device indices to use. Single device: 0 Multi device: 0,1,3,4 [default: 0].\n")); INITSTRINGOPTION(Device, Eos(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_OPENCL_DEVICE, _T("--device"), "0", SO_REQ_SEP, "\t--device The comma-separated OpenCL device indices to use. Single device: 0 Multi device: 0,1,3,4 [default: 0].\n"));
INITSTRINGOPTION(IsaacSeed, Eos(OPT_USE_ALL, OPT_ISAAC_SEED, _T("--isaac_seed"), "", SO_REQ_SEP, "\t--isaac_seed=<val> Character-based seed for the random number generator [default: random].\n")); INITSTRINGOPTION(IsaacSeed, Eos(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_ISAAC_SEED, _T("--isaac_seed"), "", SO_REQ_SEP, "\t--isaac_seed=<val> Character-based seed for the random number generator [default: random].\n"));
INITSTRINGOPTION(Input, Eos(OPT_RENDER_ANIM, OPT_IN, _T("--in"), "", SO_REQ_SEP, "\t--in=<val> Name of the input file.\n")); INITSTRINGOPTION(Input, Eos(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_IN, _T("--in"), "", SO_REQ_SEP, "\t--in=<val> Name of the input file.\n"));
INITSTRINGOPTION(Out, Eos(OPT_USE_RENDER, OPT_OUT, _T("--out"), "", SO_REQ_SEP, "\t--out=<val> Name of a single output file. Not recommended when rendering more than one image.\n")); INITSTRINGOPTION(Out, Eos(eOptionUse::OPT_USE_RENDER, eOptionIDs::OPT_OUT, _T("--out"), "", SO_REQ_SEP, "\t--out=<val> Name of a single output file. Not recommended when rendering more than one image.\n"));
INITSTRINGOPTION(Prefix, Eos(OPT_RENDER_ANIM, OPT_PREFIX, _T("--prefix"), "", SO_REQ_SEP, "\t--prefix=<val> Prefix to prepend to all output files.\n")); INITSTRINGOPTION(Prefix, Eos(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_PREFIX, _T("--prefix"), "", SO_REQ_SEP, "\t--prefix=<val> Prefix to prepend to all output files.\n"));
INITSTRINGOPTION(Suffix, Eos(OPT_RENDER_ANIM, OPT_SUFFIX, _T("--suffix"), "", SO_REQ_SEP, "\t--suffix=<val> Suffix to append to all output files.\n")); INITSTRINGOPTION(Suffix, Eos(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_SUFFIX, _T("--suffix"), "", SO_REQ_SEP, "\t--suffix=<val> Suffix to append to all output files.\n"));
INITSTRINGOPTION(Format, Eos(OPT_RENDER_ANIM, OPT_FORMAT, _T("--format"), "png", SO_REQ_SEP, "\t--format=<val> Format of the output file. Valid values are: bmp, jpg, png, ppm [default: jpg].\n")); INITSTRINGOPTION(Format, Eos(eOptionUse::OPT_RENDER_ANIM, eOptionIDs::OPT_FORMAT, _T("--format"), "png", SO_REQ_SEP, "\t--format=<val> Format of the output file. Valid values are: bmp, jpg, png, ppm [default: jpg].\n"));
INITSTRINGOPTION(PalettePath, Eos(OPT_USE_ALL, OPT_PALETTE_FILE, _T("--flam3_palettes"), "flam3-palettes.xml", SO_REQ_SEP, "\t--flam3_palettes=<val> Path and name of the palette file [default: flam3-palettes.xml].\n")); INITSTRINGOPTION(PalettePath, Eos(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_PALETTE_FILE, _T("--flam3_palettes"), "flam3-palettes.xml", SO_REQ_SEP, "\t--flam3_palettes=<val> Path and name of the palette file [default: flam3-palettes.xml].\n"));
//INITSTRINGOPTION(PaletteImage, Eos(OPT_USE_ALL, OPT_PALETTE_IMAGE, _T("--image"), "", SO_REQ_SEP, "\t--image=<val> Replace palette with png, jpg, or ppm image.\n")); //INITSTRINGOPTION(PaletteImage, Eos(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_PALETTE_IMAGE, _T("--image"), "", SO_REQ_SEP, "\t--image=<val> Replace palette with png, jpg, or ppm image.\n"));
INITSTRINGOPTION(Id, Eos(OPT_USE_ALL, OPT_ID, _T("--id"), "", SO_REQ_SEP, "\t--id=<val> ID to use in <edit> tags / image comments.\n")); INITSTRINGOPTION(Id, Eos(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_ID, _T("--id"), "", SO_REQ_SEP, "\t--id=<val> ID to use in <edit> tags / image comments.\n"));
INITSTRINGOPTION(Url, Eos(OPT_USE_ALL, OPT_URL, _T("--url"), "", SO_REQ_SEP, "\t--url=<val> URL to use in <edit> tags / image comments.\n")); INITSTRINGOPTION(Url, Eos(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_URL, _T("--url"), "", SO_REQ_SEP, "\t--url=<val> URL to use in <edit> tags / image comments.\n"));
INITSTRINGOPTION(Nick, Eos(OPT_USE_ALL, OPT_NICK, _T("--nick"), "", SO_REQ_SEP, "\t--nick=<val> Nickname to use in <edit> tags / image comments.\n")); INITSTRINGOPTION(Nick, Eos(eOptionUse::OPT_USE_ALL, eOptionIDs::OPT_NICK, _T("--nick"), "", SO_REQ_SEP, "\t--nick=<val> Nickname to use in <edit> tags / image comments.\n"));
INITSTRINGOPTION(Comment, Eos(OPT_USE_GENOME, OPT_COMMENT, _T("--comment"), "", SO_REQ_SEP, "\t--comment=<val> Comment to use in <edit> tags.\n")); INITSTRINGOPTION(Comment, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_COMMENT, _T("--comment"), "", SO_REQ_SEP, "\t--comment=<val> Comment to use in <edit> tags.\n"));
INITSTRINGOPTION(TemplateFile, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_TEMPLATE, _T("--template"), "", SO_REQ_SEP, "\t--template=<val> Apply defaults based on this flame.\n"));
INITSTRINGOPTION(TemplateFile, Eos(OPT_USE_GENOME, OPT_TEMPLATE, _T("--template"), "", SO_REQ_SEP, "\t--template=<val> Apply defaults based on this flame.\n")); INITSTRINGOPTION(Clone, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_CLONE, _T("--clone"), "", SO_REQ_SEP, "\t--clone=<val> Clone random flame in input.\n"));
INITSTRINGOPTION(Clone, Eos(OPT_USE_GENOME, OPT_CLONE, _T("--clone"), "", SO_REQ_SEP, "\t--clone=<val> Clone random flame in input.\n")); INITSTRINGOPTION(CloneAll, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_CLONE_ALL, _T("--clone_all"), "", SO_REQ_SEP, "\t--clone_all=<val> Clones all flames in the input file. Useful for applying template to all flames.\n"));
INITSTRINGOPTION(CloneAll, Eos(OPT_USE_GENOME, OPT_CLONE_ALL, _T("--clone_all"), "", SO_REQ_SEP, "\t--clone_all=<val> Clones all flames in the input file. Useful for applying template to all flames.\n")); INITSTRINGOPTION(CloneAction, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_CLONE_ACTION, _T("--clone_action"), "", SO_REQ_SEP, "\t--clone_action=<val> A description of the clone action taking place.\n"));
INITSTRINGOPTION(CloneAction, Eos(OPT_USE_GENOME, OPT_CLONE_ACTION, _T("--clone_action"), "", SO_REQ_SEP, "\t--clone_action=<val> A description of the clone action taking place.\n")); INITSTRINGOPTION(Animate, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_ANIMATE, _T("--animate"), "", SO_REQ_SEP, "\t--animate=<val> Interpolates between all flames in the input file, using times specified in file.\n"));
INITSTRINGOPTION(Animate, Eos(OPT_USE_GENOME, OPT_ANIMATE, _T("--animate"), "", SO_REQ_SEP, "\t--animate=<val> Interpolates between all flames in the input file, using times specified in file.\n")); INITSTRINGOPTION(Mutate, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_MUTATE, _T("--mutate"), "", SO_REQ_SEP, "\t--mutate=<val> Randomly mutate a random flame from the input file.\n"));
INITSTRINGOPTION(Mutate, Eos(OPT_USE_GENOME, OPT_MUTATE, _T("--mutate"), "", SO_REQ_SEP, "\t--mutate=<val> Randomly mutate a random flame from the input file.\n")); INITSTRINGOPTION(Cross0, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_CROSS0, _T("--cross0"), "", SO_REQ_SEP, "\t--cross0=<val> Randomly select one flame from the input file to genetically cross...\n"));
INITSTRINGOPTION(Cross0, Eos(OPT_USE_GENOME, OPT_CROSS0, _T("--cross0"), "", SO_REQ_SEP, "\t--cross0=<val> Randomly select one flame from the input file to genetically cross...\n")); INITSTRINGOPTION(Cross1, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_CROSS1, _T("--cross1"), "", SO_REQ_SEP, "\t--cross1=<val> ...with one flame from this file.\n"));
INITSTRINGOPTION(Cross1, Eos(OPT_USE_GENOME, OPT_CROSS1, _T("--cross1"), "", SO_REQ_SEP, "\t--cross1=<val> ...with one flame from this file.\n")); INITSTRINGOPTION(Method, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_METHOD, _T("--method"), "", SO_REQ_SEP, "\t--method=<val> Method used for genetic cross: alternate, interpolate, or union. For mutate: all_vars, one_xform, add_symmetry, post_xforms, color_palette, delete_xform, all_coefs [default: random].\n"));//Original ommitted this important documentation for mutate!
INITSTRINGOPTION(Method, Eos(OPT_USE_GENOME, OPT_METHOD, _T("--method"), "", SO_REQ_SEP, "\t--method=<val> Method used for genetic cross: alternate, interpolate, or union. For mutate: all_vars, one_xform, add_symmetry, post_xforms, color_palette, delete_xform, all_coefs [default: random].\n"));//Original ommitted this important documentation for mutate! INITSTRINGOPTION(Inter, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_INTER, _T("--inter"), "", SO_REQ_SEP, "\t--inter=<val> Interpolate the input file.\n"));
INITSTRINGOPTION(Inter, Eos(OPT_USE_GENOME, OPT_INTER, _T("--inter"), "", SO_REQ_SEP, "\t--inter=<val> Interpolate the input file.\n")); INITSTRINGOPTION(Rotate, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_ROTATE, _T("--rotate"), "", SO_REQ_SEP, "\t--rotate=<val> Rotate the input file.\n"));
INITSTRINGOPTION(Rotate, Eos(OPT_USE_GENOME, OPT_ROTATE, _T("--rotate"), "", SO_REQ_SEP, "\t--rotate=<val> Rotate the input file.\n")); INITSTRINGOPTION(Strip, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_STRIP, _T("--strip"), "", SO_REQ_SEP, "\t--strip=<val> Break strip out of each flame in the input file.\n"));
INITSTRINGOPTION(Strip, Eos(OPT_USE_GENOME, OPT_STRIP, _T("--strip"), "", SO_REQ_SEP, "\t--strip=<val> Break strip out of each flame in the input file.\n")); INITSTRINGOPTION(Sequence, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_SEQUENCE, _T("--sequence"), "", SO_REQ_SEP, "\t--sequence=<val> 360 degree rotation 'loops' times of each control point in the input file plus rotating transitions.\n"));
INITSTRINGOPTION(Sequence, Eos(OPT_USE_GENOME, OPT_SEQUENCE, _T("--sequence"), "", SO_REQ_SEP, "\t--sequence=<val> 360 degree rotation 'loops' times of each control point in the input file plus rotating transitions.\n")); INITSTRINGOPTION(UseVars, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_USE_VARS, _T("--use_vars"), "", SO_REQ_SEP, "\t--use_vars=<val> Comma separated list of variation #'s to use when generating a random flame.\n"));
INITSTRINGOPTION(UseVars, Eos(OPT_USE_GENOME, OPT_USE_VARS, _T("--use_vars"), "", SO_REQ_SEP, "\t--use_vars=<val> Comma separated list of variation #'s to use when generating a random flame.\n")); INITSTRINGOPTION(DontUseVars, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_DONT_USE_VARS, _T("--dont_use_vars"), "", SO_REQ_SEP, "\t--dont_use_vars=<val> Comma separated list of variation #'s to NOT use when generating a random flame.\n"));
INITSTRINGOPTION(DontUseVars, Eos(OPT_USE_GENOME, OPT_DONT_USE_VARS, _T("--dont_use_vars"), "", SO_REQ_SEP, "\t--dont_use_vars=<val> Comma separated list of variation #'s to NOT use when generating a random flame.\n")); INITSTRINGOPTION(Extras, Eos(eOptionUse::OPT_USE_GENOME, eOptionIDs::OPT_EXTRAS, _T("--extras"), "", SO_REQ_SEP, "\t--extras=<val> Extra attributes to place in the flame section of the Xml.\n"));
INITSTRINGOPTION(Extras, Eos(OPT_USE_GENOME, OPT_EXTRAS, _T("--extras"), "", SO_REQ_SEP, "\t--extras=<val> Extra attributes to place in the flame section of the Xml.\n"));
} }
/// <summary> /// <summary>
@ -429,106 +421,108 @@ public:
if (errorCode == SO_SUCCESS) if (errorCode == SO_SUCCESS)
{ {
switch (args.OptionId()) eOptionIDs e = eOptionIDs(args.OptionId());
switch (e)
{ {
case OPT_HELP://Bool args. case eOptionIDs::OPT_HELP://Bool args.
{ {
ShowUsage(optUsage); ShowUsage(optUsage);
return true; return true;
} }
case OPT_VERSION:
case eOptionIDs::OPT_VERSION:
{ {
cout << EmberVersion() << endl; cout << EmberVersion() << endl;
return true; return true;
} }
PARSEBOOLOPTION(OPT_VERBOSE, Verbose);
PARSEBOOLOPTION(OPT_DEBUG, Debug);
PARSEBOOLOPTION(OPT_DUMP_ARGS, DumpArgs);
PARSEBOOLOPTION(OPT_PROGRESS, DoProgress);
PARSEBOOLOPTION(OPT_DUMP_OPENCL_INFO, OpenCLInfo);
PARSEBOOLOPTION(OPT_OPENCL, EmberCL);
PARSEBOOLOPTION(OPT_EARLYCLIP, EarlyClip);
PARSEBOOLOPTION(OPT_POS_Y_UP, YAxisUp);
PARSEBOOLOPTION(OPT_TRANSPARENCY, Transparency);
PARSEBOOLOPTION(OPT_NAME_ENABLE, NameEnable);
PARSEBOOLOPTION(OPT_INT_PALETTE, IntPalette);
PARSEBOOLOPTION(OPT_HEX_PALETTE, HexPalette);
PARSEBOOLOPTION(OPT_INSERT_PALETTE, InsertPalette);
PARSEBOOLOPTION(OPT_JPEG_COMMENTS, JpegComments);
PARSEBOOLOPTION(OPT_PNG_COMMENTS, PngComments);
PARSEBOOLOPTION(OPT_WRITE_GENOME, WriteGenome);
PARSEBOOLOPTION(OPT_THREADED_WRITE, ThreadedWrite);
PARSEBOOLOPTION(OPT_ENCLOSED, Enclosed);
PARSEBOOLOPTION(OPT_NO_EDITS, NoEdits);
PARSEBOOLOPTION(OPT_UNSMOOTH_EDGE, UnsmoothEdge);
PARSEBOOLOPTION(OPT_LOCK_ACCUM, LockAccum);
PARSEBOOLOPTION(OPT_DUMP_KERNEL, DumpKernel);
PARSEINTOPTION(OPT_SYMMETRY, Symmetry);//Int args PARSEBOOLOPTION(eOptionIDs::OPT_VERBOSE, Verbose);
PARSEINTOPTION(OPT_SHEEP_GEN, SheepGen); PARSEBOOLOPTION(eOptionIDs::OPT_DEBUG, Debug);
PARSEINTOPTION(OPT_SHEEP_ID, SheepId); PARSEBOOLOPTION(eOptionIDs::OPT_DUMP_ARGS, DumpArgs);
PARSEINTOPTION(OPT_PRIORITY, Priority); PARSEBOOLOPTION(eOptionIDs::OPT_PROGRESS, DoProgress);
PARSEUINTOPTION(OPT_SEED, Seed);//uint args. PARSEBOOLOPTION(eOptionIDs::OPT_DUMP_OPENCL_INFO, OpenCLInfo);
PARSEUINTOPTION(OPT_NTHREADS, ThreadCount); PARSEBOOLOPTION(eOptionIDs::OPT_OPENCL, EmberCL);
PARSEUINTOPTION(OPT_STRIPS, Strips); PARSEBOOLOPTION(eOptionIDs::OPT_EARLYCLIP, EarlyClip);
PARSEUINTOPTION(OPT_SUPERSAMPLE, Supersample); PARSEBOOLOPTION(eOptionIDs::OPT_POS_Y_UP, YAxisUp);
PARSEUINTOPTION(OPT_BITS, Bits); PARSEBOOLOPTION(eOptionIDs::OPT_TRANSPARENCY, Transparency);
PARSEUINTOPTION(OPT_BPC, BitsPerChannel); PARSEBOOLOPTION(eOptionIDs::OPT_NAME_ENABLE, NameEnable);
PARSEUINTOPTION(OPT_SBS, SubBatchSize); PARSEBOOLOPTION(eOptionIDs::OPT_INT_PALETTE, IntPalette);
PARSEUINTOPTION(OPT_PRINT_EDIT_DEPTH, PrintEditDepth); PARSEBOOLOPTION(eOptionIDs::OPT_HEX_PALETTE, HexPalette);
PARSEUINTOPTION(OPT_JPEG, JpegQuality); PARSEBOOLOPTION(eOptionIDs::OPT_INSERT_PALETTE, InsertPalette);
PARSEUINTOPTION(OPT_BEGIN, FirstFrame); PARSEBOOLOPTION(eOptionIDs::OPT_JPEG_COMMENTS, JpegComments);
PARSEUINTOPTION(OPT_END, LastFrame); PARSEBOOLOPTION(eOptionIDs::OPT_PNG_COMMENTS, PngComments);
PARSEUINTOPTION(OPT_FRAME, Frame); PARSEBOOLOPTION(eOptionIDs::OPT_WRITE_GENOME, WriteGenome);
PARSEUINTOPTION(OPT_TIME, Time); PARSEBOOLOPTION(eOptionIDs::OPT_THREADED_WRITE, ThreadedWrite);
PARSEUINTOPTION(OPT_DTIME, Dtime); PARSEBOOLOPTION(eOptionIDs::OPT_ENCLOSED, Enclosed);
PARSEUINTOPTION(OPT_NFRAMES, Frames); PARSEBOOLOPTION(eOptionIDs::OPT_NO_EDITS, NoEdits);
PARSEUINTOPTION(OPT_REPEAT, Repeat); PARSEBOOLOPTION(eOptionIDs::OPT_UNSMOOTH_EDGE, UnsmoothEdge);
PARSEUINTOPTION(OPT_TRIES, Tries); PARSEBOOLOPTION(eOptionIDs::OPT_LOCK_ACCUM, LockAccum);
PARSEUINTOPTION(OPT_MAX_XFORMS, MaxXforms); PARSEBOOLOPTION(eOptionIDs::OPT_DUMP_KERNEL, DumpKernel);
PARSEINTOPTION(eOptionIDs::OPT_SYMMETRY, Symmetry);//Int args
PARSEINTOPTION(eOptionIDs::OPT_SHEEP_GEN, SheepGen);
PARSEINTOPTION(eOptionIDs::OPT_SHEEP_ID, SheepId);
PARSEINTOPTION(eOptionIDs::OPT_PRIORITY, Priority);
PARSEUINTOPTION(eOptionIDs::OPT_SEED, Seed);//uint args.
PARSEUINTOPTION(eOptionIDs::OPT_NTHREADS, ThreadCount);
PARSEUINTOPTION(eOptionIDs::OPT_STRIPS, Strips);
PARSEUINTOPTION(eOptionIDs::OPT_SUPERSAMPLE, Supersample);
PARSEUINTOPTION(eOptionIDs::OPT_BITS, Bits);
PARSEUINTOPTION(eOptionIDs::OPT_BPC, BitsPerChannel);
PARSEUINTOPTION(eOptionIDs::OPT_SBS, SubBatchSize);
PARSEUINTOPTION(eOptionIDs::OPT_PRINT_EDIT_DEPTH, PrintEditDepth);
PARSEUINTOPTION(eOptionIDs::OPT_JPEG, JpegQuality);
PARSEUINTOPTION(eOptionIDs::OPT_BEGIN, FirstFrame);
PARSEUINTOPTION(eOptionIDs::OPT_END, LastFrame);
PARSEUINTOPTION(eOptionIDs::OPT_FRAME, Frame);
PARSEUINTOPTION(eOptionIDs::OPT_TIME, Time);
PARSEUINTOPTION(eOptionIDs::OPT_DTIME, Dtime);
PARSEUINTOPTION(eOptionIDs::OPT_NFRAMES, Frames);
PARSEUINTOPTION(eOptionIDs::OPT_REPEAT, Repeat);
PARSEUINTOPTION(eOptionIDs::OPT_TRIES, Tries);
PARSEUINTOPTION(eOptionIDs::OPT_MAX_XFORMS, MaxXforms);
PARSEDOUBLEOPTION(eOptionIDs::OPT_SS, SizeScale);//Float args.
PARSEDOUBLEOPTION(eOptionIDs::OPT_QS, QualityScale);
PARSEDOUBLEOPTION(eOptionIDs::OPT_PIXEL_ASPECT, AspectRatio);
PARSEDOUBLEOPTION(eOptionIDs::OPT_STAGGER, Stagger);
PARSEDOUBLEOPTION(eOptionIDs::OPT_AVG_THRESH, AvgThresh);
PARSEDOUBLEOPTION(eOptionIDs::OPT_BLACK_THRESH, BlackThresh);
PARSEDOUBLEOPTION(eOptionIDs::OPT_WHITE_LIMIT, WhiteLimit);
PARSEDOUBLEOPTION(eOptionIDs::OPT_SPEED, Speed);
PARSEDOUBLEOPTION(eOptionIDs::OPT_OFFSETX, OffsetX);
PARSEDOUBLEOPTION(eOptionIDs::OPT_OFFSETY, OffsetY);
PARSEDOUBLEOPTION(eOptionIDs::OPT_USEMEM, UseMem);
PARSEDOUBLEOPTION(eOptionIDs::OPT_LOOPS, Loops);
PARSESTRINGOPTION(eOptionIDs::OPT_OPENCL_DEVICE, Device);//String args.
PARSESTRINGOPTION(eOptionIDs::OPT_ISAAC_SEED, IsaacSeed);
PARSESTRINGOPTION(eOptionIDs::OPT_IN, Input);
PARSESTRINGOPTION(eOptionIDs::OPT_OUT, Out);
PARSESTRINGOPTION(eOptionIDs::OPT_PREFIX, Prefix);
PARSESTRINGOPTION(eOptionIDs::OPT_SUFFIX, Suffix);
PARSESTRINGOPTION(eOptionIDs::OPT_FORMAT, Format);
PARSESTRINGOPTION(eOptionIDs::OPT_PALETTE_FILE, PalettePath);
//PARSESTRINGOPTION(eOptionIDs::OPT_PALETTE_IMAGE, PaletteImage);
PARSESTRINGOPTION(eOptionIDs::OPT_ID, Id);
PARSESTRINGOPTION(eOptionIDs::OPT_URL, Url);
PARSESTRINGOPTION(eOptionIDs::OPT_NICK, Nick);
PARSESTRINGOPTION(eOptionIDs::OPT_COMMENT, Comment);
PARSESTRINGOPTION(eOptionIDs::OPT_TEMPLATE, TemplateFile);
PARSESTRINGOPTION(eOptionIDs::OPT_CLONE, Clone);
PARSESTRINGOPTION(eOptionIDs::OPT_CLONE_ALL, CloneAll);
PARSESTRINGOPTION(eOptionIDs::OPT_CLONE_ACTION, CloneAction);
PARSESTRINGOPTION(eOptionIDs::OPT_ANIMATE, Animate);
PARSESTRINGOPTION(eOptionIDs::OPT_MUTATE, Mutate);
PARSESTRINGOPTION(eOptionIDs::OPT_CROSS0, Cross0);
PARSESTRINGOPTION(eOptionIDs::OPT_CROSS1, Cross1);
PARSESTRINGOPTION(eOptionIDs::OPT_METHOD, Method);
PARSESTRINGOPTION(eOptionIDs::OPT_INTER, Inter);
PARSESTRINGOPTION(eOptionIDs::OPT_ROTATE, Rotate);
PARSESTRINGOPTION(eOptionIDs::OPT_STRIP, Strip);
PARSESTRINGOPTION(eOptionIDs::OPT_SEQUENCE, Sequence);
PARSESTRINGOPTION(eOptionIDs::OPT_USE_VARS, UseVars);
PARSESTRINGOPTION(eOptionIDs::OPT_DONT_USE_VARS, DontUseVars);
PARSESTRINGOPTION(eOptionIDs::OPT_EXTRAS, Extras);
PARSEDOUBLEOPTION(OPT_SS, SizeScale);//Float args.
PARSEDOUBLEOPTION(OPT_QS, QualityScale);
PARSEDOUBLEOPTION(OPT_PIXEL_ASPECT, AspectRatio);
PARSEDOUBLEOPTION(OPT_STAGGER, Stagger);
PARSEDOUBLEOPTION(OPT_AVG_THRESH, AvgThresh);
PARSEDOUBLEOPTION(OPT_BLACK_THRESH, BlackThresh);
PARSEDOUBLEOPTION(OPT_WHITE_LIMIT, WhiteLimit);
PARSEDOUBLEOPTION(OPT_SPEED, Speed);
PARSEDOUBLEOPTION(OPT_OFFSETX, OffsetX);
PARSEDOUBLEOPTION(OPT_OFFSETY, OffsetY);
PARSEDOUBLEOPTION(OPT_USEMEM, UseMem);
PARSEDOUBLEOPTION(OPT_LOOPS, Loops);
PARSESTRINGOPTION(OPT_OPENCL_DEVICE, Device);//String args.
PARSESTRINGOPTION(OPT_ISAAC_SEED, IsaacSeed);
PARSESTRINGOPTION(OPT_IN, Input);
PARSESTRINGOPTION(OPT_OUT, Out);
PARSESTRINGOPTION(OPT_PREFIX, Prefix);
PARSESTRINGOPTION(OPT_SUFFIX, Suffix);
PARSESTRINGOPTION(OPT_FORMAT, Format);
PARSESTRINGOPTION(OPT_PALETTE_FILE, PalettePath);
//PARSESTRINGOPTION(OPT_PALETTE_IMAGE, PaletteImage);
PARSESTRINGOPTION(OPT_ID, Id);
PARSESTRINGOPTION(OPT_URL, Url);
PARSESTRINGOPTION(OPT_NICK, Nick);
PARSESTRINGOPTION(OPT_COMMENT, Comment);
PARSESTRINGOPTION(OPT_TEMPLATE, TemplateFile);
PARSESTRINGOPTION(OPT_CLONE, Clone);
PARSESTRINGOPTION(OPT_CLONE_ALL, CloneAll);
PARSESTRINGOPTION(OPT_CLONE_ACTION, CloneAction);
PARSESTRINGOPTION(OPT_ANIMATE, Animate);
PARSESTRINGOPTION(OPT_MUTATE, Mutate);
PARSESTRINGOPTION(OPT_CROSS0, Cross0);
PARSESTRINGOPTION(OPT_CROSS1, Cross1);
PARSESTRINGOPTION(OPT_METHOD, Method);
PARSESTRINGOPTION(OPT_INTER, Inter);
PARSESTRINGOPTION(OPT_ROTATE, Rotate);
PARSESTRINGOPTION(OPT_STRIP, Strip);
PARSESTRINGOPTION(OPT_SEQUENCE, Sequence);
PARSESTRINGOPTION(OPT_USE_VARS, UseVars);
PARSESTRINGOPTION(OPT_DONT_USE_VARS, DontUseVars);
PARSESTRINGOPTION(OPT_EXTRAS, Extras);
default: default:
{ {
break;//Do nothing. break;//Do nothing.
@ -550,7 +544,6 @@ public:
{ {
size_t device = 0; size_t device = 0;
istringstream istr(s); istringstream istr(s);
istr >> device; istr >> device;
if (!istr.bad() && !istr.fail()) if (!istr.bad() && !istr.fail())
@ -577,17 +570,21 @@ public:
/// </summary> /// </summary>
/// <param name="optUsage">The specified program usage</param> /// <param name="optUsage">The specified program usage</param>
/// <returns>A vector of all available options for the specified program</returns> /// <returns>A vector of all available options for the specified program</returns>
vector<CSimpleOpt::SOption> GetSimpleOptions(eOptionUse optUsage = OPT_USE_ALL) vector<CSimpleOpt::SOption> GetSimpleOptions(eOptionUse optUsage = eOptionUse::OPT_USE_ALL)
{ {
vector<CSimpleOpt::SOption> entries; vector<CSimpleOpt::SOption> entries;
CSimpleOpt::SOption endOption = SO_END_OF_OPTIONS; CSimpleOpt::SOption endOption = SO_END_OF_OPTIONS;
entries.reserve(75); entries.reserve(75);
for (auto entry : m_BoolArgs) if (entry->m_OptionUse & optUsage) entries.push_back(entry->m_Option); for (auto entry : m_BoolArgs) if (et(entry->m_OptionUse) & et(optUsage)) entries.push_back(entry->m_Option);
for (auto entry : m_IntArgs) if (entry->m_OptionUse & optUsage) entries.push_back(entry->m_Option);
for (auto entry : m_UintArgs) if (entry->m_OptionUse & optUsage) entries.push_back(entry->m_Option); for (auto entry : m_IntArgs) if (et(entry->m_OptionUse) & et(optUsage)) entries.push_back(entry->m_Option);
for (auto entry : m_DoubleArgs) if (entry->m_OptionUse & optUsage) entries.push_back(entry->m_Option);
for (auto entry : m_StringArgs) if (entry->m_OptionUse & optUsage) entries.push_back(entry->m_Option); for (auto entry : m_UintArgs) if (et(entry->m_OptionUse) & et(optUsage)) entries.push_back(entry->m_Option);
for (auto entry : m_DoubleArgs) if (et(entry->m_OptionUse) & et(optUsage)) entries.push_back(entry->m_Option);
for (auto entry : m_StringArgs) if (et(entry->m_OptionUse) & et(optUsage)) entries.push_back(entry->m_Option);
entries.push_back(endOption); entries.push_back(endOption);
return entries; return entries;
@ -598,15 +595,19 @@ public:
/// </summary> /// </summary>
/// <param name="optUsage">The specified program usage</param> /// <param name="optUsage">The specified program usage</param>
/// <returns>A string with the descriptions of all available options for the specified program</returns> /// <returns>A string with the descriptions of all available options for the specified program</returns>
string GetUsage(eOptionUse optUsage = OPT_USE_ALL) string GetUsage(eOptionUse optUsage = eOptionUse::OPT_USE_ALL)
{ {
ostringstream os; ostringstream os;
for (auto entry : m_BoolArgs) if (entry->m_OptionUse & optUsage) os << entry->m_DocString << endl; for (auto entry : m_BoolArgs) if (et(entry->m_OptionUse) & et(optUsage)) os << entry->m_DocString << endl;
for (auto entry : m_IntArgs) if (entry->m_OptionUse & optUsage) os << entry->m_DocString << endl;
for (auto entry : m_UintArgs) if (entry->m_OptionUse & optUsage) os << entry->m_DocString << endl; for (auto entry : m_IntArgs) if (et(entry->m_OptionUse) & et(optUsage)) os << entry->m_DocString << endl;
for (auto entry : m_DoubleArgs) if (entry->m_OptionUse & optUsage) os << entry->m_DocString << endl;
for (auto entry : m_StringArgs) if (entry->m_OptionUse & optUsage) os << entry->m_DocString << endl; for (auto entry : m_UintArgs) if (et(entry->m_OptionUse) & et(optUsage)) os << entry->m_DocString << endl;
for (auto entry : m_DoubleArgs) if (et(entry->m_OptionUse) & et(optUsage)) os << entry->m_DocString << endl;
for (auto entry : m_StringArgs) if (et(entry->m_OptionUse) & et(optUsage)) os << entry->m_DocString << endl;
return os.str(); return os.str();
} }
@ -616,16 +617,20 @@ public:
/// </summary> /// </summary>
/// <param name="optUsage">The specified program usage</param> /// <param name="optUsage">The specified program usage</param>
/// <returns>A string with all of the names and values for all available options for the specified program</returns> /// <returns>A string with all of the names and values for all available options for the specified program</returns>
string GetValues(eOptionUse optUsage = OPT_USE_ALL) string GetValues(eOptionUse optUsage = eOptionUse::OPT_USE_ALL)
{ {
ostringstream os; ostringstream os;
os << std::boolalpha; os << std::boolalpha;
for (auto entry : m_BoolArgs) if (entry->m_OptionUse & optUsage) os << entry->m_NameWithoutDashes << ": " << (*entry)() << endl;
for (auto entry : m_IntArgs) if (entry->m_OptionUse & optUsage) os << entry->m_NameWithoutDashes << ": " << (*entry)() << endl; for (auto entry : m_BoolArgs) if (et(entry->m_OptionUse) & et(optUsage)) os << entry->m_NameWithoutDashes << ": " << (*entry)() << endl;
for (auto entry : m_UintArgs) if (entry->m_OptionUse & optUsage) os << entry->m_NameWithoutDashes << ": " << (*entry)() << endl;
for (auto entry : m_DoubleArgs) if (entry->m_OptionUse & optUsage) os << entry->m_NameWithoutDashes << ": " << (*entry)() << endl; for (auto entry : m_IntArgs) if (et(entry->m_OptionUse) & et(optUsage)) os << entry->m_NameWithoutDashes << ": " << (*entry)() << endl;
for (auto entry : m_StringArgs) if (entry->m_OptionUse & optUsage) os << entry->m_NameWithoutDashes << ": " << (*entry)() << endl;
for (auto entry : m_UintArgs) if (et(entry->m_OptionUse) & et(optUsage)) os << entry->m_NameWithoutDashes << ": " << (*entry)() << endl;
for (auto entry : m_DoubleArgs) if (et(entry->m_OptionUse) & et(optUsage)) os << entry->m_NameWithoutDashes << ": " << (*entry)() << endl;
for (auto entry : m_StringArgs) if (et(entry->m_OptionUse) & et(optUsage)) os << entry->m_NameWithoutDashes << ": " << (*entry)() << endl;
return os.str(); return os.str();
} }
@ -638,20 +643,20 @@ public:
{ {
cout << DescriptionString << " version " << EmberVersion() << endl << endl; cout << DescriptionString << " version " << EmberVersion() << endl << endl;
if (optUsage == OPT_USE_RENDER) if (optUsage == eOptionUse::OPT_USE_RENDER)
{ {
cout << "Usage:\n" cout << "Usage:\n"
"\tEmberRender.exe --in=test.flam3 [--out=outfile --format=png --verbose --progress --opencl]\n" << endl; "\tEmberRender.exe --in=test.flam3 [--out=outfile --format=png --verbose --progress --opencl]\n" << endl;
} }
else if (optUsage == OPT_USE_ANIMATE) else if (optUsage == eOptionUse::OPT_USE_ANIMATE)
{ {
cout << "Usage:\n" cout << "Usage:\n"
"\tEmberAnimate.exe --in=sequence.flam3 [--format=png --verbose --progress --opencl]\n" << endl; "\tEmberAnimate.exe --in=sequence.flam3 [--format=png --verbose --progress --opencl]\n" << endl;
} }
else if (optUsage == OPT_USE_GENOME) else if (optUsage == eOptionUse::OPT_USE_GENOME)
{ {
cout << "Usage:\n" cout << "Usage:\n"
"\tEmberGenome.exe --sequence=test.flam3 > sequenceout.flam3\n" << endl; "\tEmberGenome.exe --sequence=test.flam3 > sequenceout.flam3\n" << endl;
} }
cout << GetUsage(optUsage) << endl; cout << GetUsage(optUsage) << endl;
@ -667,12 +672,19 @@ public:
switch (errorCode) switch (errorCode)
{ {
case SO_SUCCESS: return "Success"; case SO_SUCCESS: return "Success";
case SO_OPT_INVALID: return "Unrecognized option"; case SO_OPT_INVALID: return "Unrecognized option";
case SO_OPT_MULTIPLE: return "Option matched multiple strings"; case SO_OPT_MULTIPLE: return "Option matched multiple strings";
case SO_ARG_INVALID: return "Option does not accept argument"; case SO_ARG_INVALID: return "Option does not accept argument";
case SO_ARG_INVALID_TYPE: return "Invalid argument format"; case SO_ARG_INVALID_TYPE: return "Invalid argument format";
case SO_ARG_MISSING: return "Required argument is missing"; case SO_ARG_MISSING: return "Required argument is missing";
case SO_ARG_INVALID_DATA: return "Invalid argument data"; case SO_ARG_INVALID_DATA: return "Invalid argument data";
default: return "Unknown error"; default: return "Unknown error";
} }
} }

View File

@ -47,7 +47,7 @@ bool EmberGenome(EmberOptions& opt)
std::cout.imbue(std::locale("")); std::cout.imbue(std::locale(""));
if (opt.DumpArgs()) if (opt.DumpArgs())
cerr << opt.GetValues(OPT_USE_GENOME) << endl; cerr << opt.GetValues(eOptionUse::OPT_USE_GENOME) << endl;
if (opt.OpenCLInfo()) if (opt.OpenCLInfo())
{ {
@ -79,7 +79,7 @@ bool EmberGenome(EmberOptions& opt)
EmberReport emberReport, emberReport2; EmberReport emberReport, emberReport2;
const vector<pair<size_t, size_t>> devices = Devices(opt.Devices()); const vector<pair<size_t, size_t>> devices = Devices(opt.Devices());
unique_ptr<RenderProgress<T>> progress(new RenderProgress<T>()); unique_ptr<RenderProgress<T>> progress(new RenderProgress<T>());
unique_ptr<Renderer<T, float>> renderer(CreateRenderer<T>(opt.EmberCL() ? OPENCL_RENDERER : CPU_RENDERER, devices, false, 0, emberReport)); unique_ptr<Renderer<T, float>> renderer(CreateRenderer<T>(opt.EmberCL() ? eRendererType::OPENCL_RENDERER : eRendererType::CPU_RENDERER, devices, false, 0, emberReport));
QTIsaac<ISAAC_SIZE, ISAAC_INT> rand(ISAAC_INT(t.Tic()), ISAAC_INT(t.Tic() * 2), ISAAC_INT(t.Tic() * 3)); QTIsaac<ISAAC_SIZE, ISAAC_INT> rand(ISAAC_INT(t.Tic()), ISAAC_INT(t.Tic() * 2), ISAAC_INT(t.Tic() * 3));
vector<string> errorReport = emberReport.ErrorReport(); vector<string> errorReport = emberReport.ErrorReport();
os.imbue(std::locale("")); os.imbue(std::locale(""));
@ -117,7 +117,7 @@ bool EmberGenome(EmberOptions& opt)
} }
//SheepTools will own the created renderer and will take care of cleaning it up. //SheepTools will own the created renderer and will take care of cleaning it up.
SheepTools<T, float> tools(opt.PalettePath(), CreateRenderer<T>(opt.EmberCL() ? OPENCL_RENDERER : CPU_RENDERER, devices, false, 0, emberReport2)); SheepTools<T, float> tools(opt.PalettePath(), CreateRenderer<T>(opt.EmberCL() ? eRendererType::OPENCL_RENDERER : eRendererType::CPU_RENDERER, devices, false, 0, emberReport2));
tools.SetSpinParams(!opt.UnsmoothEdge(), tools.SetSpinParams(!opt.UnsmoothEdge(),
T(opt.Stagger()), T(opt.Stagger()),
T(opt.OffsetX()), T(opt.OffsetX()),
@ -138,18 +138,18 @@ bool EmberGenome(EmberOptions& opt)
//Specify reasonable defaults if nothing is specified. //Specify reasonable defaults if nothing is specified.
if (opt.UseVars() == "" && opt.DontUseVars() == "") if (opt.UseVars() == "" && opt.DontUseVars() == "")
{ {
noVars.push_back(VAR_NOISE); noVars.push_back(eVariationId::VAR_NOISE);
noVars.push_back(VAR_BLUR); noVars.push_back(eVariationId::VAR_BLUR);
noVars.push_back(VAR_GAUSSIAN_BLUR); noVars.push_back(eVariationId::VAR_GAUSSIAN_BLUR);
noVars.push_back(VAR_RADIAL_BLUR); noVars.push_back(eVariationId::VAR_RADIAL_BLUR);
noVars.push_back(VAR_NGON); noVars.push_back(eVariationId::VAR_NGON);
noVars.push_back(VAR_SQUARE); noVars.push_back(eVariationId::VAR_SQUARE);
noVars.push_back(VAR_RAYS); noVars.push_back(eVariationId::VAR_RAYS);
noVars.push_back(VAR_CROSS); noVars.push_back(eVariationId::VAR_CROSS);
noVars.push_back(VAR_PRE_BLUR); noVars.push_back(eVariationId::VAR_PRE_BLUR);
noVars.push_back(VAR_SEPARATION); noVars.push_back(eVariationId::VAR_SEPARATION);
noVars.push_back(VAR_SPLIT); noVars.push_back(eVariationId::VAR_SPLIT);
noVars.push_back(VAR_SPLITS); noVars.push_back(eVariationId::VAR_SPLITS);
//Loop over the novars and set ivars to the complement. //Loop over the novars and set ivars to the complement.
for (i = 0; i < varList.Size(); i++) for (i = 0; i < varList.Size(); i++)
@ -554,25 +554,25 @@ bool EmberGenome(EmberOptions& opt)
aselp1 = nullptr; aselp1 = nullptr;
if (opt.Method() == "") if (opt.Method() == "")
mutMeth = MUTATE_NOT_SPECIFIED; mutMeth = eMutateMode::MUTATE_NOT_SPECIFIED;
else if (opt.Method() == "all_vars") else if (opt.Method() == "all_vars")
mutMeth = MUTATE_ALL_VARIATIONS; mutMeth = eMutateMode::MUTATE_ALL_VARIATIONS;
else if (opt.Method() == "one_xform") else if (opt.Method() == "one_xform")
mutMeth = MUTATE_ONE_XFORM_COEFS; mutMeth = eMutateMode::MUTATE_ONE_XFORM_COEFS;
else if (opt.Method() == "add_symmetry") else if (opt.Method() == "add_symmetry")
mutMeth = MUTATE_ADD_SYMMETRY; mutMeth = eMutateMode::MUTATE_ADD_SYMMETRY;
else if (opt.Method() == "post_xforms") else if (opt.Method() == "post_xforms")
mutMeth = MUTATE_POST_XFORMS; mutMeth = eMutateMode::MUTATE_POST_XFORMS;
else if (opt.Method() == "color_palette") else if (opt.Method() == "color_palette")
mutMeth = MUTATE_COLOR_PALETTE; mutMeth = eMutateMode::MUTATE_COLOR_PALETTE;
else if (opt.Method() == "delete_xform") else if (opt.Method() == "delete_xform")
mutMeth = MUTATE_DELETE_XFORM; mutMeth = eMutateMode::MUTATE_DELETE_XFORM;
else if (opt.Method() == "all_coefs") else if (opt.Method() == "all_coefs")
mutMeth = MUTATE_ALL_COEFS; mutMeth = eMutateMode::MUTATE_ALL_COEFS;
else else
{ {
cerr << "method " << opt.Method() << " not defined for mutate. Defaulting to random." << endl; cerr << "method " << opt.Method() << " not defined for mutate. Defaulting to random." << endl;
mutMeth = MUTATE_NOT_SPECIFIED; mutMeth = eMutateMode::MUTATE_NOT_SPECIFIED;
} }
os << tools.Mutate(orig, mutMeth, vars, opt.Symmetry(), T(opt.Speed()), MAX_CL_VARS); os << tools.Mutate(orig, mutMeth, vars, opt.Symmetry(), T(opt.Speed()), MAX_CL_VARS);
@ -598,17 +598,17 @@ bool EmberGenome(EmberOptions& opt)
aselp1 = &selp1; aselp1 = &selp1;
if (opt.Method() == "") if (opt.Method() == "")
crossMeth = CROSS_NOT_SPECIFIED; crossMeth = eCrossMode::CROSS_NOT_SPECIFIED;
else if (opt.Method() == "union") else if (opt.Method() == "union")
crossMeth = CROSS_UNION; crossMeth = eCrossMode::CROSS_UNION;
else if (opt.Method() == "interpolate") else if (opt.Method() == "interpolate")
crossMeth = CROSS_INTERPOLATE; crossMeth = eCrossMode::CROSS_INTERPOLATE;
else if (opt.Method() == "alternate") else if (opt.Method() == "alternate")
crossMeth = CROSS_ALTERNATE; crossMeth = eCrossMode::CROSS_ALTERNATE;
else else
{ {
cerr << "method '" << opt.Method() << "' not defined for cross. Defaulting to random." << endl; cerr << "method '" << opt.Method() << "' not defined for cross. Defaulting to random." << endl;
crossMeth = CROSS_NOT_SPECIFIED; crossMeth = eCrossMode::CROSS_NOT_SPECIFIED;
} }
tools.Cross(embers[i0], embers2[i1], orig, crossMeth); tools.Cross(embers[i0], embers2[i1], orig, crossMeth);
@ -765,7 +765,7 @@ int _tmain(int argc, _TCHAR* argv[])
putenv(const_cast<char*>("GPU_MAX_ALLOC_PERCENT=100")); putenv(const_cast<char*>("GPU_MAX_ALLOC_PERCENT=100"));
#endif #endif
if (!opt.Populate(argc, argv, OPT_USE_GENOME)) if (!opt.Populate(argc, argv, eOptionUse::OPT_USE_GENOME))
{ {
#ifdef DO_DOUBLE #ifdef DO_DOUBLE

View File

@ -17,7 +17,7 @@ bool EmberRender(EmberOptions& opt)
std::cout.imbue(std::locale("")); std::cout.imbue(std::locale(""));
if (opt.DumpArgs()) if (opt.DumpArgs())
cout << opt.GetValues(OPT_USE_RENDER) << endl; cout << opt.GetValues(eOptionUse::OPT_USE_RENDER) << endl;
if (opt.OpenCLInfo()) if (opt.OpenCLInfo())
{ {
@ -47,7 +47,7 @@ bool EmberRender(EmberOptions& opt)
vector<QTIsaac<ISAAC_SIZE, ISAAC_INT>> randVec; vector<QTIsaac<ISAAC_SIZE, ISAAC_INT>> randVec;
const vector<pair<size_t, size_t>> devices = Devices(opt.Devices()); const vector<pair<size_t, size_t>> devices = Devices(opt.Devices());
unique_ptr<RenderProgress<T>> progress(new RenderProgress<T>()); unique_ptr<RenderProgress<T>> progress(new RenderProgress<T>());
unique_ptr<Renderer<T, float>> renderer(CreateRenderer<T>(opt.EmberCL() ? OPENCL_RENDERER : CPU_RENDERER, devices, false, 0, emberReport)); unique_ptr<Renderer<T, float>> renderer(CreateRenderer<T>(opt.EmberCL() ? eRendererType::OPENCL_RENDERER : eRendererType::CPU_RENDERER, devices, false, 0, emberReport));
vector<string> errorReport = emberReport.ErrorReport(); vector<string> errorReport = emberReport.ErrorReport();
if (!errorReport.empty()) if (!errorReport.empty())
@ -59,7 +59,7 @@ bool EmberRender(EmberOptions& opt)
return false; return false;
} }
if (opt.EmberCL() && renderer->RendererType() != OPENCL_RENDERER)//OpenCL init failed, so fall back to CPU. if (opt.EmberCL() && renderer->RendererType() != eRendererType::OPENCL_RENDERER)//OpenCL init failed, so fall back to CPU.
opt.EmberCL(false); opt.EmberCL(false);
if (!InitPaletteList<T>(opt.PalettePath())) if (!InitPaletteList<T>(opt.PalettePath()))
@ -343,7 +343,7 @@ int _tmain(int argc, _TCHAR* argv[])
putenv(const_cast<char*>("GPU_MAX_ALLOC_PERCENT=100")); putenv(const_cast<char*>("GPU_MAX_ALLOC_PERCENT=100"));
#endif #endif
if (!opt.Populate(argc, argv, OPT_USE_RENDER)) if (!opt.Populate(argc, argv, eOptionUse::OPT_USE_RENDER))
{ {
#ifdef DO_DOUBLE #ifdef DO_DOUBLE

View File

@ -120,14 +120,14 @@ void MakeTestAllVarsRegPrePost(vector<Ember<T>>& embers)
while (index < varList.RegSize()) while (index < varList.RegSize())
{ {
/* if (index != VAR_SYNTH) /* if (index != eVariationId::VAR_SYNTH)
{ {
index++; index++;
continue; continue;
} }
*/ */
Ember<T> ember1; Ember<T> ember1;
unique_ptr<Variation<T>> regVar(varList.GetVariationCopy(index, VARTYPE_REG)); unique_ptr<Variation<T>> regVar(varList.GetVariationCopy(index, eVariationType::VARTYPE_REG));
unique_ptr<Variation<T>> preVar(varList.GetVariationCopy("pre_" + regVar->Name())); unique_ptr<Variation<T>> preVar(varList.GetVariationCopy("pre_" + regVar->Name()));
unique_ptr<Variation<T>> postVar(varList.GetVariationCopy("post_" + regVar->Name())); unique_ptr<Variation<T>> postVar(varList.GetVariationCopy("post_" + regVar->Name()));
ember1.m_FinalRasW = 640; ember1.m_FinalRasW = 640;
@ -342,7 +342,7 @@ static vector<Variation<T>*> FindVarsWith(vector<string>& stringVec, bool findAl
while (index < vl.RegSize()) while (index < vl.RegSize())
{ {
auto regVar = vl.GetVariation(index, VARTYPE_REG); auto regVar = vl.GetVariation(index, eVariationType::VARTYPE_REG);
if (SearchVar(regVar, stringVec, false)) if (SearchVar(regVar, stringVec, false))
{ {
@ -363,18 +363,18 @@ bool TestVarCounts()
VariationList<float> vlf; VariationList<float> vlf;
#ifdef DO_DOUBLE #ifdef DO_DOUBLE
VariationList<double> vld; VariationList<double> vld;
bool success ((vlf.Size() == vld.Size()) && (vlf.Size() == LAST_VAR)); bool success((vlf.Size() == vld.Size()) && (vlf.Size() == size_t(eVariationId::LAST_VAR)));
#else #else
bool success = true; bool success = true;
#endif #endif
uint start = (uint)VAR_ARCH; uint start = et(eVariationId::VAR_ARCH);
if (!success) if (!success)
{ {
cout << "Variation list size " << vlf.Size() << " does not equal the max var ID enum " << (uint)LAST_VAR << "." << endl; cout << "Variation list size " << vlf.Size() << " does not equal the max var ID enum " << et(eVariationId::LAST_VAR) << "." << endl;
} }
for (; start < (uint)LAST_VAR; start++) for (; start < et(eVariationId::LAST_VAR); start++)
{ {
auto var = vlf.GetVariation((eVariationId)start); auto var = vlf.GetVariation((eVariationId)start);
@ -480,13 +480,13 @@ bool TestVarEqual(const Variation<sT>* var1, const Variation<dT>* var2)
if (var1->VariationId() != var2->VariationId()) if (var1->VariationId() != var2->VariationId())
{ {
cout << "Variation IDs were not equal: " << var1->VariationId() << " != " << var2->VariationId() << endl; cout << "Variation IDs were not equal: " << et(var1->VariationId()) << " != " << et(var2->VariationId()) << endl;
success = false; success = false;
} }
if (var1->VarType() != var2->VarType()) if (var1->VarType() != var2->VarType())
{ {
cout << "Variation types were not equal: " << var1->VarType() << " != " << var2->VarType() << endl; cout << "Variation types were not equal: " << et(var1->VarType()) << " != " << et(var2->VarType()) << endl;
success = false; success = false;
} }
@ -587,7 +587,7 @@ bool TestVarPrePostNames()
auto var = vlf.GetVariation(i); auto var = vlf.GetVariation(i);
string name = var->Name(); string name = var->Name();
if (var->VarType() == VARTYPE_REG) if (var->VarType() == eVariationType::VARTYPE_REG)
{ {
if (name.find("pre_") == 0) if (name.find("pre_") == 0)
{ {
@ -601,7 +601,7 @@ bool TestVarPrePostNames()
success = false; success = false;
} }
} }
else if (var->VarType() == VARTYPE_PRE) else if (var->VarType() == eVariationType::VARTYPE_PRE)
{ {
if (name.find("pre_") != 0) if (name.find("pre_") != 0)
{ {
@ -609,7 +609,7 @@ bool TestVarPrePostNames()
success = false; success = false;
} }
} }
else if (var->VarType() == VARTYPE_POST) else if (var->VarType() == eVariationType::VARTYPE_POST)
{ {
if (name.find("post_") != 0) if (name.find("post_") != 0)
{ {
@ -734,7 +734,7 @@ bool TestVarRegPrePost()
for (size_t i = 0; i < vlf.RegSize(); i++) for (size_t i = 0; i < vlf.RegSize(); i++)
{ {
auto regVar = vlf.GetVariation(i, VARTYPE_REG); auto regVar = vlf.GetVariation(i, eVariationType::VARTYPE_REG);
if (regVar) if (regVar)
{ {
@ -978,9 +978,9 @@ bool TestVarAssignTypes()
string s = var->OpenCLString(); string s = var->OpenCLString();
//Only test pre and post. The assign type for regular is ignored, and will always be summed. //Only test pre and post. The assign type for regular is ignored, and will always be summed.
if (var->VarType() != VARTYPE_REG) if (var->VarType() != eVariationType::VARTYPE_REG)
{ {
if (var->AssignType() == ASSIGNTYPE_SET) if (var->AssignType() == eVariationAssignType::ASSIGNTYPE_SET)
{ {
if (!SearchVar(var, vset, false)) if (!SearchVar(var, vset, false))
{ {
@ -988,7 +988,7 @@ bool TestVarAssignTypes()
success = false; success = false;
} }
} }
else if (var->AssignType() == ASSIGNTYPE_SUM) else if (var->AssignType() == eVariationAssignType::ASSIGNTYPE_SUM)
{ {
if (SearchVar(var, vsum, false)) if (SearchVar(var, vsum, false))
{ {
@ -998,7 +998,7 @@ bool TestVarAssignTypes()
} }
else else
{ {
cout << "Variation " << var->Name() << " had an invalid assign type of " << var->AssignType() << endl; cout << "Variation " << var->Name() << " had an invalid assign type of " << et(var->AssignType()) << endl;
} }
} }
} }
@ -1147,7 +1147,7 @@ void TestXformsInOutPoints()
while (index < varList.RegSize()) while (index < varList.RegSize())
{ {
vector<Xform<float>> xforms; vector<Xform<float>> xforms;
unique_ptr<Variation<float>> regVar(varList.GetVariationCopy(index, VARTYPE_REG)); unique_ptr<Variation<float>> regVar(varList.GetVariationCopy(index, eVariationType::VARTYPE_REG));
string s = regVar->OpenCLString() + regVar->OpenCLFuncsString(); string s = regVar->OpenCLString() + regVar->OpenCLFuncsString();
if (s.find("MwcNext") == string::npos) if (s.find("MwcNext") == string::npos)
@ -1263,7 +1263,7 @@ void TestVarTime()
{ {
double sum = 0; double sum = 0;
Xform<T> xform; Xform<T> xform;
Variation<T>* var = vlf.GetVariationCopy(i, VARTYPE_REG); Variation<T>* var = vlf.GetVariationCopy(i, eVariationType::VARTYPE_REG);
xform.AddVariation(var); xform.AddVariation(var);
for (int iter = 0; iter < iters; iter++) for (int iter = 0; iter < iters; iter++)
@ -1371,7 +1371,7 @@ void TestVarsSimilar()
{ {
double diff = 0, highest = TMAX; double diff = 0, highest = TMAX;
Xform<T> xform; Xform<T> xform;
Variation<T>* var = vlf.GetVariationCopy(i, VARTYPE_REG); Variation<T>* var = vlf.GetVariationCopy(i, eVariationType::VARTYPE_REG);
pair<string, double> match("", TMAX); pair<string, double> match("", TMAX);
compIndex = 0; compIndex = 0;
xform.AddVariation(var); xform.AddVariation(var);
@ -1386,7 +1386,7 @@ void TestVarsSimilar()
double sum = 0, xdiff = 0, ydiff = 0, zdiff = 0; double sum = 0, xdiff = 0, ydiff = 0, zdiff = 0;
Xform<T> xformComp; Xform<T> xformComp;
Variation<T>* varComp = vlf.GetVariationCopy(compIndex, VARTYPE_REG); Variation<T>* varComp = vlf.GetVariationCopy(compIndex, eVariationType::VARTYPE_REG);
xformComp.AddVariation(varComp); xformComp.AddVariation(varComp);
ParametricVariation<T>* parVar = dynamic_cast<ParametricVariation<T>*>(var); ParametricVariation<T>* parVar = dynamic_cast<ParametricVariation<T>*>(var);
ParametricVariation<T>* parVarComp = dynamic_cast<ParametricVariation<T>*>(varComp); ParametricVariation<T>* parVarComp = dynamic_cast<ParametricVariation<T>*>(varComp);
@ -1430,7 +1430,7 @@ void TestVarsSimilar()
} }
//For debugging. //For debugging.
if (var->VariationId() == VAR_BWRAPS && varComp->VariationId() == VAR_ECLIPSE) if (var->VariationId() == eVariationId::VAR_BWRAPS && varComp->VariationId() == eVariationId::VAR_ECLIPSE)
{ {
//cout << "Break." << endl; //cout << "Break." << endl;
} }
@ -1515,7 +1515,7 @@ template <typename T>
void TestCpuGpuResults(size_t platform, size_t device) void TestCpuGpuResults(size_t platform, size_t device)
{ {
bool breakOnBad = true; bool breakOnBad = true;
int i = 0;//(int)VAR_TARGET;//Start at the one you want to test. int i = 0;//(int)eVariationId::VAR_TARGET;//Start at the one you want to test.
int iters = 10; int iters = 10;
int skipped = 0; int skipped = 0;
T thresh = T(1e-3); T thresh = T(1e-3);
@ -1531,7 +1531,7 @@ void TestCpuGpuResults(size_t platform, size_t device)
{ {
bool bad = false; bool bad = false;
double sum = 0; double sum = 0;
Variation<T>* var = vlf.GetVariation(i, VARTYPE_REG); Variation<T>* var = vlf.GetVariation(i, eVariationType::VARTYPE_REG);
string s = var->OpenCLString() + var->OpenCLFuncsString(); string s = var->OpenCLString() + var->OpenCLFuncsString();
if (s.find("MwcNext") != string::npos) if (s.find("MwcNext") != string::npos)
@ -1622,7 +1622,7 @@ void TestGpuVectorRead(size_t platform, size_t device)
vector<pair<size_t, size_t>> devices{ std::make_pair(platform, device) }; vector<pair<size_t, size_t>> devices{ std::make_pair(platform, device) };
RendererCL<T, float> renderer(devices); RendererCL<T, float> renderer(devices);
points.resize(renderer.TotalIterKernelCount()); points.resize(renderer.TotalIterKernelCount());
Variation<T>* var = vlf.GetVariation(VAR_LINEAR); Variation<T>* var = vlf.GetVariation(eVariationId::VAR_LINEAR);
bool newAlloc = false; bool newAlloc = false;
Point<T> p, p2; Point<T> p, p2;
Ember<T> ember; Ember<T> ember;

View File

@ -10,7 +10,7 @@ class EllipseItem;
/// <summary> /// <summary>
/// Enumeration used for setting values on a specific curve. /// Enumeration used for setting values on a specific curve.
/// </summary> /// </summary>
enum CurveIndex enum class CurveIndex : et
{ {
ALL, ALL,
RED, RED,
@ -82,14 +82,13 @@ public:
/// <param name="pointIndex">The point index within the curve</param> /// <param name="pointIndex">The point index within the curve</param>
/// <param name="viewParent">The graphics view this point is displayed on</param> /// <param name="viewParent">The graphics view this point is displayed on</param>
/// <param name="p">The parent widget of this item</param> /// <param name="p">The parent widget of this item</param>
EllipseItem(const QRectF &rect, int curveIndex, int pointIndex, CurvesGraphicsView* viewParent, QGraphicsItem *parent = 0) EllipseItem(const QRectF& rect, int curveIndex, int pointIndex, CurvesGraphicsView* viewParent, QGraphicsItem* parent = 0)
: QGraphicsEllipseItem(rect, parent) : QGraphicsEllipseItem(rect, parent)
{ {
setFlag(QGraphicsItem::ItemSendsScenePositionChanges); setFlag(QGraphicsItem::ItemSendsScenePositionChanges);
setFlag(QGraphicsItem::ItemIsSelectable); setFlag(QGraphicsItem::ItemIsSelectable);
setFlag(QGraphicsItem::ItemIsMovable); setFlag(QGraphicsItem::ItemIsMovable);
setPen(Qt::NoPen); setPen(Qt::NoPen);
m_CurveIndex = curveIndex; m_CurveIndex = curveIndex;
m_PointIndex = pointIndex; m_PointIndex = pointIndex;
m_ViewParent = viewParent; m_ViewParent = viewParent;
@ -108,7 +107,7 @@ protected:
/// <param name="painter">Unused and just passed to QGraphicsEllipseItem::paint()</param> /// <param name="painter">Unused and just passed to QGraphicsEllipseItem::paint()</param>
/// <param name="option">Drawing options used which will have the QStyle::State_Selected flag unset</param> /// <param name="option">Drawing options used which will have the QStyle::State_Selected flag unset</param>
/// <param name="widget">Unused and just passed to QGraphicsEllipseItem::paint()</param> /// <param name="widget">Unused and just passed to QGraphicsEllipseItem::paint()</param>
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override
{ {
QStyleOptionGraphicsItem myOption(*option); QStyleOptionGraphicsItem myOption(*option);
myOption.state &= ~QStyle::State_Selected; myOption.state &= ~QStyle::State_Selected;
@ -122,7 +121,7 @@ protected:
/// <param name="change">Action is only taken if this value equals ItemPositionChange</param> /// <param name="change">Action is only taken if this value equals ItemPositionChange</param>
/// <param name="value">The new position. This will be clamped to the scene rect.</param> /// <param name="value">The new position. This will be clamped to the scene rect.</param>
/// <returns>The new position</returns> /// <returns>The new position</returns>
virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value) override virtual QVariant itemChange(GraphicsItemChange change, const QVariant& value) override
{ {
if (change == ItemPositionChange && scene()) if (change == ItemPositionChange && scene())
{ {

View File

@ -82,7 +82,7 @@ bool FinalRenderEmberControllerBase::CreateRendererFromGUI()
{ {
bool useOpenCL = m_Info->Ok() && m_FinalRenderDialog->OpenCL(); bool useOpenCL = m_Info->Ok() && m_FinalRenderDialog->OpenCL();
auto v = Devices(m_FinalRenderDialog->Devices()); auto v = Devices(m_FinalRenderDialog->Devices());
return CreateRenderer((useOpenCL && !v.empty()) ? OPENCL_RENDERER : CPU_RENDERER, return CreateRenderer((useOpenCL && !v.empty()) ? eRendererType::OPENCL_RENDERER : eRendererType::CPU_RENDERER,
v, v,
false);//Not shared. false);//Not shared.
} }
@ -583,7 +583,7 @@ bool FinalRenderEmberController<T>::SyncGuiToRenderer()
if (m_Renderer.get()) if (m_Renderer.get())
{ {
if (m_Renderer->RendererType() == OPENCL_RENDERER) if (m_Renderer->RendererType() == eRendererType::OPENCL_RENDERER)
channels = 4;//Always using 4 since the GL texture is RGBA. channels = 4;//Always using 4 since the GL texture is RGBA.
m_Renderer->Callback(this); m_Renderer->Callback(this);
@ -598,7 +598,7 @@ bool FinalRenderEmberController<T>::SyncGuiToRenderer()
{ {
for (size_t i = 0; i < m_Renderers.size(); i++) for (size_t i = 0; i < m_Renderers.size(); i++)
{ {
if (m_Renderers[i]->RendererType() == OPENCL_RENDERER) if (m_Renderers[i]->RendererType() == eRendererType::OPENCL_RENDERER)
channels = 4;//Always using 4 since the GL texture is RGBA. channels = 4;//Always using 4 since the GL texture is RGBA.
m_Renderers[i]->Callback(!i ? this : nullptr); m_Renderers[i]->Callback(!i ? this : nullptr);

View File

@ -15,7 +15,7 @@ FractoriumEmberControllerBase::FractoriumEmberControllerBase(Fractorium* fractor
m_Shared = true; m_Shared = true;
m_FailedRenders = 0; m_FailedRenders = 0;
m_UndoIndex = 0; m_UndoIndex = 0;
m_RenderType = CPU_RENDERER; m_RenderType = eRendererType::CPU_RENDERER;
m_OutputTexID = 0; m_OutputTexID = 0;
m_SubBatchCount = 1;//Will be ovewritten by the options on first render. m_SubBatchCount = 1;//Will be ovewritten by the options on first render.
m_Fractorium = fractorium; m_Fractorium = fractorium;
@ -226,7 +226,7 @@ void FractoriumEmberController<T>::Update(std::function<void (void)> func, bool
/// If no xforms are selected via the checkboxes, and the update type is UPDATE_SELECTED, then the function will be called only on the currently selected xform. /// If no xforms are selected via the checkboxes, and the update type is UPDATE_SELECTED, then the function will be called only on the currently selected xform.
/// </summary> /// </summary>
/// <param name="func">The function to call</param> /// <param name="func">The function to call</param>
/// <param name="updateType">Whether to apply this update operation on the current, all or selected xforms. Default: UPDATE_CURRENT.</param> /// <param name="updateType">Whether to apply this update operation on the current, all or selected xforms. Default: eXformUpdate::UPDATE_CURRENT.</param>
/// <param name="updateRender">True to update renderer, else false. Default: true.</param> /// <param name="updateRender">True to update renderer, else false. Default: true.</param>
/// <param name="action">The action to add to the rendering queue. Default: eProcessAction::FULL_RENDER.</param> /// <param name="action">The action to add to the rendering queue. Default: eProcessAction::FULL_RENDER.</param>
template <typename T> template <typename T>

View File

@ -11,12 +11,12 @@
/// <summary> /// <summary>
/// An enum representing the type of edit being done. /// An enum representing the type of edit being done.
/// </summary> /// </summary>
enum eEditUndoState : uint { REGULAR_EDIT, UNDO_REDO, EDIT_UNDO }; enum class eEditUndoState : et { REGULAR_EDIT, UNDO_REDO, EDIT_UNDO };
/// <summary> /// <summary>
/// An enum representing which xforms an update should be applied to. /// An enum representing which xforms an update should be applied to.
/// </summary> /// </summary>
enum eXformUpdate : uint { UPDATE_CURRENT, UPDATE_SELECTED, UPDATE_SELECTED_EXCEPT_FINAL, UPDATE_ALL, UPDATE_ALL_EXCEPT_FINAL }; enum class eXformUpdate : et { UPDATE_CURRENT, UPDATE_SELECTED, UPDATE_SELECTED_EXCEPT_FINAL, UPDATE_ALL, UPDATE_ALL_EXCEPT_FINAL };
/// <summary> /// <summary>
/// FractoriumEmberController and Fractorium need each other, but each can't include the other. /// FractoriumEmberController and Fractorium need each other, but each can't include the other.

View File

@ -17,7 +17,6 @@ void Fractorium::InitMenusUI()
connect(ui.ActionSaveCurrentToOpenedFile, SIGNAL(triggered(bool)), this, SLOT(OnActionSaveCurrentToOpenedFile(bool)), Qt::QueuedConnection); connect(ui.ActionSaveCurrentToOpenedFile, SIGNAL(triggered(bool)), this, SLOT(OnActionSaveCurrentToOpenedFile(bool)), Qt::QueuedConnection);
connect(ui.ActionSaveCurrentScreen, SIGNAL(triggered(bool)), this, SLOT(OnActionSaveCurrentScreen(bool)), Qt::QueuedConnection); connect(ui.ActionSaveCurrentScreen, SIGNAL(triggered(bool)), this, SLOT(OnActionSaveCurrentScreen(bool)), Qt::QueuedConnection);
connect(ui.ActionExit, SIGNAL(triggered(bool)), this, SLOT(OnActionExit(bool)), Qt::QueuedConnection); connect(ui.ActionExit, SIGNAL(triggered(bool)), this, SLOT(OnActionExit(bool)), Qt::QueuedConnection);
//Edit menu. //Edit menu.
connect(ui.ActionUndo, SIGNAL(triggered(bool)), this, SLOT(OnActionUndo(bool)), Qt::QueuedConnection); connect(ui.ActionUndo, SIGNAL(triggered(bool)), this, SLOT(OnActionUndo(bool)), Qt::QueuedConnection);
connect(ui.ActionRedo, SIGNAL(triggered(bool)), this, SLOT(OnActionRedo(bool)), Qt::QueuedConnection); connect(ui.ActionRedo, SIGNAL(triggered(bool)), this, SLOT(OnActionRedo(bool)), Qt::QueuedConnection);
@ -28,10 +27,8 @@ void Fractorium::InitMenusUI()
connect(ui.ActionCopySelectedXforms, SIGNAL(triggered(bool)), this, SLOT(OnActionCopySelectedXforms(bool)), Qt::QueuedConnection); connect(ui.ActionCopySelectedXforms, SIGNAL(triggered(bool)), this, SLOT(OnActionCopySelectedXforms(bool)), Qt::QueuedConnection);
connect(ui.ActionPasteSelectedXforms, SIGNAL(triggered(bool)), this, SLOT(OnActionPasteSelectedXforms(bool)), Qt::QueuedConnection); connect(ui.ActionPasteSelectedXforms, SIGNAL(triggered(bool)), this, SLOT(OnActionPasteSelectedXforms(bool)), Qt::QueuedConnection);
ui.ActionPasteSelectedXforms->setEnabled(false); ui.ActionPasteSelectedXforms->setEnabled(false);
//View menu. //View menu.
connect(ui.ActionResetWorkspace, SIGNAL(triggered(bool)), this, SLOT(OnActionResetWorkspace(bool)), Qt::QueuedConnection); connect(ui.ActionResetWorkspace, SIGNAL(triggered(bool)), this, SLOT(OnActionResetWorkspace(bool)), Qt::QueuedConnection);
//Tools menu. //Tools menu.
connect(ui.ActionAddReflectiveSymmetry, SIGNAL(triggered(bool)), this, SLOT(OnActionAddReflectiveSymmetry(bool)), Qt::QueuedConnection); connect(ui.ActionAddReflectiveSymmetry, SIGNAL(triggered(bool)), this, SLOT(OnActionAddReflectiveSymmetry(bool)), Qt::QueuedConnection);
connect(ui.ActionAddRotationalSymmetry, SIGNAL(triggered(bool)), this, SLOT(OnActionAddRotationalSymmetry(bool)), Qt::QueuedConnection); connect(ui.ActionAddRotationalSymmetry, SIGNAL(triggered(bool)), this, SLOT(OnActionAddRotationalSymmetry(bool)), Qt::QueuedConnection);
@ -44,7 +41,6 @@ void Fractorium::InitMenusUI()
connect(ui.ActionFinalRender, SIGNAL(triggered(bool)), this, SLOT(OnActionFinalRender(bool)), Qt::QueuedConnection); connect(ui.ActionFinalRender, SIGNAL(triggered(bool)), this, SLOT(OnActionFinalRender(bool)), Qt::QueuedConnection);
connect(m_FinalRenderDialog, SIGNAL(finished(int)), this, SLOT(OnFinalRenderClose(int)), Qt::QueuedConnection); connect(m_FinalRenderDialog, SIGNAL(finished(int)), this, SLOT(OnFinalRenderClose(int)), Qt::QueuedConnection);
connect(ui.ActionOptions, SIGNAL(triggered(bool)), this, SLOT(OnActionOptions(bool)), Qt::QueuedConnection); connect(ui.ActionOptions, SIGNAL(triggered(bool)), this, SLOT(OnActionOptions(bool)), Qt::QueuedConnection);
//Help menu. //Help menu.
connect(ui.ActionAbout, SIGNAL(triggered(bool)), this, SLOT(OnActionAbout(bool)), Qt::QueuedConnection); connect(ui.ActionAbout, SIGNAL(triggered(bool)), this, SLOT(OnActionAbout(bool)), Qt::QueuedConnection);
} }
@ -57,7 +53,6 @@ template <typename T>
void FractoriumEmberController<T>::NewFlock(size_t count) void FractoriumEmberController<T>::NewFlock(size_t count)
{ {
Ember<T> ember; Ember<T> ember;
StopPreviewRender(); StopPreviewRender();
m_EmberFile.Clear(); m_EmberFile.Clear();
m_EmberFile.m_Embers.reserve(count); m_EmberFile.m_Embers.reserve(count);
@ -98,7 +93,6 @@ void FractoriumEmberController<T>::NewEmptyFlameInCurrentFile()
Ember<T> ember; Ember<T> ember;
Xform<T> xform; Xform<T> xform;
QDateTime local(QDateTime::currentDateTime()); QDateTime local(QDateTime::currentDateTime());
StopPreviewRender(); StopPreviewRender();
ParamsToEmber(ember); ParamsToEmber(ember);
xform.m_Weight = T(0.25); xform.m_Weight = T(0.25);
@ -124,7 +118,6 @@ template <typename T>
void FractoriumEmberController<T>::NewRandomFlameInCurrentFile() void FractoriumEmberController<T>::NewRandomFlameInCurrentFile()
{ {
Ember<T> ember; Ember<T> ember;
StopPreviewRender(); StopPreviewRender();
m_SheepTools->Random(ember, m_FilteredVariations, static_cast<int>(QTIsaac<ISAAC_SIZE, ISAAC_INT>::GlobalRand->Frand<T>(-2, 2)), 0, MAX_CL_VARS); m_SheepTools->Random(ember, m_FilteredVariations, static_cast<int>(QTIsaac<ISAAC_SIZE, ISAAC_INT>::GlobalRand->Frand<T>(-2, 2)), 0, MAX_CL_VARS);
ParamsToEmber(ember); ParamsToEmber(ember);
@ -147,7 +140,6 @@ template <typename T>
void FractoriumEmberController<T>::CopyFlameInCurrentFile() void FractoriumEmberController<T>::CopyFlameInCurrentFile()
{ {
Ember<T> ember = m_Ember; Ember<T> ember = m_Ember;
StopPreviewRender(); StopPreviewRender();
ember.m_Name = EmberFile<T>::DefaultEmberName(m_EmberFile.Size() + 1).toStdString(); ember.m_Name = EmberFile<T>::DefaultEmberName(m_EmberFile.Size() + 1).toStdString();
ember.m_Index = m_EmberFile.Size(); ember.m_Index = m_EmberFile.Size();
@ -181,11 +173,10 @@ void FractoriumEmberController<T>::OpenAndPrepFiles(const QStringList& filenames
XmlToEmber<T> parser; XmlToEmber<T> parser;
vector<Ember<T>> embers; vector<Ember<T>> embers;
uint previousSize = append ? m_EmberFile.Size() : 0; uint previousSize = append ? m_EmberFile.Size() : 0;
StopPreviewRender(); StopPreviewRender();
emberFile.m_Filename = filenames[0]; emberFile.m_Filename = filenames[0];
foreach(const QString& filename, filenames) foreach (const QString& filename, filenames)
{ {
embers.clear(); embers.clear();
@ -209,7 +200,6 @@ void FractoriumEmberController<T>::OpenAndPrepFiles(const QStringList& filenames
else else
{ {
vector<string> errors = parser.ErrorReport(); vector<string> errors = parser.ErrorReport();
m_Fractorium->ErrorReportToQTextEdit(errors, m_Fractorium->ui.InfoFileOpeningTextEdit); m_Fractorium->ErrorReportToQTextEdit(errors, m_Fractorium->ui.InfoFileOpeningTextEdit);
m_Fractorium->ShowCritical("Open Failed", "Could not open file, see info tab for details."); m_Fractorium->ShowCritical("Open Failed", "Could not open file, see info tab for details.");
} }
@ -280,7 +270,6 @@ void FractoriumEmberController<T>::SaveCurrentAsXml()
EmberToXml<T> writer; EmberToXml<T> writer;
QFileInfo fileInfo(filename); QFileInfo fileInfo(filename);
xmlDocPtr tempEdit = ember.m_Edits; xmlDocPtr tempEdit = ember.m_Edits;
SaveCurrentToOpenedFile();//Save the current ember back to the opened file before writing to disk. SaveCurrentToOpenedFile();//Save the current ember back to the opened file before writing to disk.
ApplyXmlSavingTemplate(ember); ApplyXmlSavingTemplate(ember);
ember.m_Edits = writer.CreateNewEditdoc(&ember, nullptr, "edit", s->Nick().toStdString(), s->Url().toStdString(), s->Id().toStdString(), "", 0, 0); ember.m_Edits = writer.CreateNewEditdoc(&ember, nullptr, "edit", s->Nick().toStdString(), s->Url().toStdString(), s->Id().toStdString(), "", 0, 0);
@ -325,7 +314,6 @@ void FractoriumEmberController<T>::SaveEntireFileAsXml()
EmberFile<T> emberFile; EmberFile<T> emberFile;
EmberToXml<T> writer; EmberToXml<T> writer;
QFileInfo fileInfo(filename); QFileInfo fileInfo(filename);
SaveCurrentToOpenedFile();//Save the current ember back to the opened file before writing to disk. SaveCurrentToOpenedFile();//Save the current ember back to the opened file before writing to disk.
emberFile = m_EmberFile; emberFile = m_EmberFile;
@ -384,7 +372,7 @@ void FractoriumEmberController<T>::SaveCurrentToOpenedFile()
for (i = 0; i < m_EmberFile.Size(); i++) for (i = 0; i < m_EmberFile.Size(); i++)
{ {
if ((m_Ember.m_Name == m_EmberFile.m_Embers[i].m_Name) &&//Check both to be extra sure. if ((m_Ember.m_Name == m_EmberFile.m_Embers[i].m_Name) &&//Check both to be extra sure.
(m_Ember.m_Index == m_EmberFile.m_Embers[i].m_Index)) (m_Ember.m_Index == m_EmberFile.m_Embers[i].m_Index))
{ {
m_EmberFile.m_Embers[i] = m_Ember; m_EmberFile.m_Embers[i] = m_Ember;
fileFound = true; fileFound = true;
@ -426,11 +414,10 @@ void FractoriumEmberController<T>::Undo()
if (m_UndoList.size() > 1 && m_UndoIndex > 0) if (m_UndoList.size() > 1 && m_UndoIndex > 0)
{ {
int index = m_Ember.GetTotalXformIndex(CurrentXform()); int index = m_Ember.GetTotalXformIndex(CurrentXform());
m_LastEditWasUndoRedo = true; m_LastEditWasUndoRedo = true;
m_UndoIndex = std::max(0u, m_UndoIndex - 1u); m_UndoIndex = std::max(0u, m_UndoIndex - 1u);
SetEmber(m_UndoList[m_UndoIndex], true); SetEmber(m_UndoList[m_UndoIndex], true);
m_EditState = UNDO_REDO; m_EditState = eEditUndoState::UNDO_REDO;
if (index >= 0) if (index >= 0)
m_Fractorium->CurrentXform(index); m_Fractorium->CurrentXform(index);
@ -451,11 +438,10 @@ void FractoriumEmberController<T>::Redo()
if (m_UndoList.size() > 1 && m_UndoIndex < m_UndoList.size() - 1) if (m_UndoList.size() > 1 && m_UndoIndex < m_UndoList.size() - 1)
{ {
int index = m_Ember.GetTotalXformIndex(CurrentXform()); int index = m_Ember.GetTotalXformIndex(CurrentXform());
m_LastEditWasUndoRedo = true; m_LastEditWasUndoRedo = true;
m_UndoIndex = std::min<uint>(m_UndoIndex + 1, m_UndoList.size() - 1); m_UndoIndex = std::min<uint>(m_UndoIndex + 1, m_UndoList.size() - 1);
SetEmber(m_UndoList[m_UndoIndex], true); SetEmber(m_UndoList[m_UndoIndex], true);
m_EditState = UNDO_REDO; m_EditState = eEditUndoState::UNDO_REDO;
if (index >= 0) if (index >= 0)
m_Fractorium->CurrentXform(index); m_Fractorium->CurrentXform(index);
@ -477,7 +463,6 @@ void FractoriumEmberController<T>::CopyXml()
Ember<T> ember = m_Ember; Ember<T> ember = m_Ember;
EmberToXml<T> emberToXml; EmberToXml<T> emberToXml;
FractoriumSettings* settings = m_Fractorium->m_Settings; FractoriumSettings* settings = m_Fractorium->m_Settings;
ember.m_Quality = settings->XmlQuality(); ember.m_Quality = settings->XmlQuality();
ember.m_Supersample = settings->XmlSupersample(); ember.m_Supersample = settings->XmlSupersample();
ember.m_TemporalSamples = settings->XmlTemporalSamples(); ember.m_TemporalSamples = settings->XmlTemporalSamples();
@ -496,13 +481,11 @@ void FractoriumEmberController<T>::CopyAllXml()
ostringstream os; ostringstream os;
EmberToXml<T> emberToXml; EmberToXml<T> emberToXml;
FractoriumSettings* settings = m_Fractorium->m_Settings; FractoriumSettings* settings = m_Fractorium->m_Settings;
os << "<flames>\n"; os << "<flames>\n";
for (auto& e : m_EmberFile.m_Embers) for (auto& e : m_EmberFile.m_Embers)
{ {
Ember<T> ember = e; Ember<T> ember = e;
ApplyXmlSavingTemplate(ember); ApplyXmlSavingTemplate(ember);
os << emberToXml.ToString(ember, "", 0, false, false, true); os << emberToXml.ToString(ember, "", 0, false, false, true);
} }
@ -529,7 +512,6 @@ void FractoriumEmberController<T>::PasteXmlAppend()
vector<Ember<T>> embers; vector<Ember<T>> embers;
QTextCodec* codec = QTextCodec::codecForName("UTF-8"); QTextCodec* codec = QTextCodec::codecForName("UTF-8");
QByteArray b = codec->fromUnicode(QApplication::clipboard()->text()); QByteArray b = codec->fromUnicode(QApplication::clipboard()->text());
s.reserve(b.size()); s.reserve(b.size());
for (i = 0; i < b.size(); i++) for (i = 0; i < b.size(); i++)
@ -584,7 +566,6 @@ void FractoriumEmberController<T>::PasteXmlOver()
Ember<T> backupEmber = m_EmberFile.m_Embers[0]; Ember<T> backupEmber = m_EmberFile.m_Embers[0];
QTextCodec* codec = QTextCodec::codecForName("UTF-8"); QTextCodec* codec = QTextCodec::codecForName("UTF-8");
QByteArray b = codec->fromUnicode(QApplication::clipboard()->text()); QByteArray b = codec->fromUnicode(QApplication::clipboard()->text());
s.reserve(b.size()); s.reserve(b.size());
for (i = 0; i < b.size(); i++) for (i = 0; i < b.size(); i++)
@ -639,14 +620,13 @@ void FractoriumEmberController<T>::CopySelectedXforms()
{ {
m_CopiedXforms.clear(); m_CopiedXforms.clear();
m_CopiedFinalXform.Clear(); m_CopiedFinalXform.Clear();
UpdateXform([&](Xform<T>* xform) UpdateXform([&](Xform<T>* xform)
{ {
if (m_Ember.IsFinalXform(xform)) if (m_Ember.IsFinalXform(xform))
m_CopiedFinalXform = *xform; m_CopiedFinalXform = *xform;
else else
m_CopiedXforms.push_back(*xform); m_CopiedXforms.push_back(*xform);
}, UPDATE_SELECTED, false); }, eXformUpdate::UPDATE_SELECTED, false);
m_Fractorium->ui.ActionPasteSelectedXforms->setEnabled(true); m_Fractorium->ui.ActionPasteSelectedXforms->setEnabled(true);
} }
@ -715,7 +695,6 @@ template <typename T>
void FractoriumEmberController<T>::AddReflectiveSymmetry() void FractoriumEmberController<T>::AddReflectiveSymmetry()
{ {
QComboBox* combo = m_Fractorium->ui.CurrentXformCombo; QComboBox* combo = m_Fractorium->ui.CurrentXformCombo;
Update([&]() Update([&]()
{ {
m_Ember.AddSymmetry(-1, m_Rand); m_Ember.AddSymmetry(-1, m_Rand);
@ -734,7 +713,6 @@ template <typename T>
void FractoriumEmberController<T>::AddRotationalSymmetry() void FractoriumEmberController<T>::AddRotationalSymmetry()
{ {
QComboBox* combo = m_Fractorium->ui.CurrentXformCombo; QComboBox* combo = m_Fractorium->ui.CurrentXformCombo;
Update([&]() Update([&]()
{ {
m_Ember.AddSymmetry(2, m_Rand); m_Ember.AddSymmetry(2, m_Rand);
@ -753,7 +731,6 @@ template <typename T>
void FractoriumEmberController<T>::AddBothSymmetry() void FractoriumEmberController<T>::AddBothSymmetry()
{ {
QComboBox* combo = m_Fractorium->ui.CurrentXformCombo; QComboBox* combo = m_Fractorium->ui.CurrentXformCombo;
Update([&]() Update([&]()
{ {
m_Ember.AddSymmetry(-2, m_Rand); m_Ember.AddSymmetry(-2, m_Rand);
@ -875,5 +852,5 @@ void Fractorium::OnActionAbout(bool checked)
template class FractoriumEmberController<float>; template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE #ifdef DO_DOUBLE
template class FractoriumEmberController<double>; template class FractoriumEmberController<double>;
#endif #endif

View File

@ -246,7 +246,7 @@ void FractoriumEmberController<T>::ClearUndo()
{ {
m_UndoIndex = 0; m_UndoIndex = 0;
m_UndoList.clear(); m_UndoList.clear();
m_EditState = REGULAR_EDIT; m_EditState = eEditUndoState::REGULAR_EDIT;
m_LastEditWasUndoRedo = false; m_LastEditWasUndoRedo = false;
m_Fractorium->ui.ActionUndo->setEnabled(false); m_Fractorium->ui.ActionUndo->setEnabled(false);
m_Fractorium->ui.ActionRedo->setEnabled(false); m_Fractorium->ui.ActionRedo->setEnabled(false);
@ -276,7 +276,7 @@ bool FractoriumEmberController<T>::SyncSizes()
gl->Allocate(); gl->Allocate();
gl->SetViewport(); gl->SetViewport();
if (m_Renderer->RendererType() == OPENCL_RENDERER && (rendererCL = dynamic_cast<RendererCL<T, float>*>(m_Renderer.get()))) if (m_Renderer->RendererType() == eRendererType::OPENCL_RENDERER && (rendererCL = dynamic_cast<RendererCL<T, float>*>(m_Renderer.get())))
rendererCL->SetOutputTexture(gl->OutputTexID()); rendererCL->SetOutputTexture(gl->OutputTexID());
m_Fractorium->CenterScrollbars(); m_Fractorium->CenterScrollbars();
@ -325,7 +325,7 @@ bool FractoriumEmberController<T>::Render()
action = CondenseAndClearProcessActions();//Combine with all other previously requested actions. action = CondenseAndClearProcessActions();//Combine with all other previously requested actions.
if (m_Renderer->RendererType() == OPENCL_RENDERER) if (m_Renderer->RendererType() == eRendererType::OPENCL_RENDERER)
rendererCL = dynamic_cast<RendererCL<T, float>*>(m_Renderer.get()); rendererCL = dynamic_cast<RendererCL<T, float>*>(m_Renderer.get());
//Force temporal samples to always be 1. Perhaps change later when animation is implemented. //Force temporal samples to always be 1. Perhaps change later when animation is implemented.
@ -370,9 +370,9 @@ bool FractoriumEmberController<T>::Render()
if (iterBegin) if (iterBegin)
{ {
if (m_Renderer->RendererType() == CPU_RENDERER) if (m_Renderer->RendererType() == eRendererType::CPU_RENDERER)
m_SubBatchCount = m_Fractorium->m_Settings->CpuSubBatch(); m_SubBatchCount = m_Fractorium->m_Settings->CpuSubBatch();
else if (m_Renderer->RendererType() == OPENCL_RENDERER) else if (m_Renderer->RendererType() == eRendererType::OPENCL_RENDERER)
m_SubBatchCount = m_Fractorium->m_Settings->OpenCLSubBatch(); m_SubBatchCount = m_Fractorium->m_Settings->OpenCLSubBatch();
m_Fractorium->m_ProgressBar->setValue(0); m_Fractorium->m_ProgressBar->setValue(0);
@ -387,7 +387,7 @@ bool FractoriumEmberController<T>::Render()
{ {
//The amount to increment sub batch while rendering proceeds is purely empirical. //The amount to increment sub batch while rendering proceeds is purely empirical.
//Change later if better values can be derived/observed. //Change later if better values can be derived/observed.
if (m_Renderer->RendererType() == OPENCL_RENDERER) if (m_Renderer->RendererType() == eRendererType::OPENCL_RENDERER)
{ {
if (m_SubBatchCount < (4 * m_Devices.size()))//More than 3 with OpenCL gives a sluggish UI. if (m_SubBatchCount < (4 * m_Devices.size()))//More than 3 with OpenCL gives a sluggish UI.
m_SubBatchCount += m_Devices.size(); m_SubBatchCount += m_Devices.size();
@ -410,7 +410,7 @@ bool FractoriumEmberController<T>::Render()
m_Fractorium->m_ProgressBar->setValue(100); m_Fractorium->m_ProgressBar->setValue(100);
//Only certain stats can be reported with OpenCL. //Only certain stats can be reported with OpenCL.
if (m_Renderer->RendererType() == OPENCL_RENDERER) if (m_Renderer->RendererType() == eRendererType::OPENCL_RENDERER)
{ {
m_Fractorium->m_RenderStatusLabel->setText("Iters: " + iters + ". Scaled quality: " + scaledQuality + ". Total time: " + QString::fromStdString(renderTime) + "."); m_Fractorium->m_RenderStatusLabel->setText("Iters: " + iters + ". Scaled quality: " + scaledQuality + ". Total time: " + QString::fromStdString(renderTime) + ".");
} }
@ -424,9 +424,9 @@ bool FractoriumEmberController<T>::Render()
if (m_LastEditWasUndoRedo && (m_UndoIndex == m_UndoList.size() - 1))//Traversing through undo list, reached the end, so put back in regular edit mode. if (m_LastEditWasUndoRedo && (m_UndoIndex == m_UndoList.size() - 1))//Traversing through undo list, reached the end, so put back in regular edit mode.
{ {
m_EditState = REGULAR_EDIT; m_EditState = eEditUndoState::REGULAR_EDIT;
} }
else if (m_EditState == REGULAR_EDIT)//Regular edit, just add to the end of the undo list. else if (m_EditState == eEditUndoState::REGULAR_EDIT)//Regular edit, just add to the end of the undo list.
{ {
m_UndoList.push_back(m_Ember); m_UndoList.push_back(m_Ember);
m_UndoIndex = m_UndoList.size() - 1; m_UndoIndex = m_UndoList.size() - 1;
@ -551,7 +551,7 @@ bool FractoriumEmberController<T>::CreateRenderer(eRendererType renderType, cons
{ {
m_RenderType = m_Renderer->RendererType(); m_RenderType = m_Renderer->RendererType();
if (m_RenderType == OPENCL_RENDERER) if (m_RenderType == eRendererType::OPENCL_RENDERER)
{ {
auto val = 30 * m_Fractorium->m_Settings->Devices().size(); auto val = 30 * m_Fractorium->m_Settings->Devices().size();
m_Fractorium->m_QualitySpin->DoubleClickZero(val); m_Fractorium->m_QualitySpin->DoubleClickZero(val);
@ -628,7 +628,7 @@ bool Fractorium::CreateRendererFromOptions()
auto v = Devices(m_Settings->Devices()); auto v = Devices(m_Settings->Devices());
//The most important option to process is what kind of renderer is desired, so do it first. //The most important option to process is what kind of renderer is desired, so do it first.
if (!m_Controller->CreateRenderer((useOpenCL && !v.empty()) ? OPENCL_RENDERER : CPU_RENDERER, v)) if (!m_Controller->CreateRenderer((useOpenCL && !v.empty()) ? eRendererType::OPENCL_RENDERER : eRendererType::CPU_RENDERER, v))
{ {
//If using OpenCL, will only get here if creating RendererCL failed, but creating a backup CPU Renderer succeeded. //If using OpenCL, will only get here if creating RendererCL failed, but creating a backup CPU Renderer succeeded.
ShowCritical("Renderer Creation Error", "Error creating renderer, most likely a GPU problem. Using CPU instead."); ShowCritical("Renderer Creation Error", "Error creating renderer, most likely a GPU problem. Using CPU instead.");

View File

@ -7,14 +7,12 @@
void Fractorium::InitXformsVariationsUI() void Fractorium::InitXformsVariationsUI()
{ {
auto tree = ui.VariationsTree; auto tree = ui.VariationsTree;
tree->clear(); tree->clear();
tree->header()->setSectionsClickable(true); tree->header()->setSectionsClickable(true);
connect(tree->header(), SIGNAL(sectionClicked(int)), this, SLOT(OnTreeHeaderSectionClicked(int))); connect(tree->header(), SIGNAL(sectionClicked(int)), this, SLOT(OnTreeHeaderSectionClicked(int)));
connect(ui.VariationsFilterLineEdit, SIGNAL(textChanged(const QString&)), this, SLOT(OnVariationsFilterLineEditTextChanged(const QString&))); connect(ui.VariationsFilterLineEdit, SIGNAL(textChanged(const QString&)), this, SLOT(OnVariationsFilterLineEditTextChanged(const QString&)));
connect(ui.VariationsFilterClearButton, SIGNAL(clicked(bool)), this, SLOT(OnVariationsFilterClearButtonClicked(bool))); connect(ui.VariationsFilterClearButton, SIGNAL(clicked(bool)), this, SLOT(OnVariationsFilterClearButtonClicked(bool)));
connect(ui.ActionVariationsDialog, SIGNAL(triggered(bool)), this, SLOT(OnActionVariationsDialog(bool)), Qt::QueuedConnection); connect(ui.ActionVariationsDialog, SIGNAL(triggered(bool)), this, SLOT(OnActionVariationsDialog(bool)), Qt::QueuedConnection);
//Setting dimensions in the designer with a layout is futile, so must hard code here. //Setting dimensions in the designer with a layout is futile, so must hard code here.
tree->setColumnWidth(0, 160); tree->setColumnWidth(0, 160);
tree->setColumnWidth(1, 23); tree->setColumnWidth(1, 23);
@ -47,7 +45,6 @@ void FractoriumEmberController<T>::Filter(const QString& text)
auto& ids = m_Fractorium->m_VarDialog->Map(); auto& ids = m_Fractorium->m_VarDialog->Map();
auto tree = m_Fractorium->ui.VariationsTree; auto tree = m_Fractorium->ui.VariationsTree;
auto xform = CurrentXform(); auto xform = CurrentXform();
tree->setUpdatesEnabled(false); tree->setUpdatesEnabled(false);
for (int i = 0; i < tree->topLevelItemCount(); i++) for (int i = 0; i < tree->topLevelItemCount(); i++)
@ -84,7 +81,6 @@ template <typename T>
void FractoriumEmberController<T>::FilteredVariations() void FractoriumEmberController<T>::FilteredVariations()
{ {
auto& map = m_Fractorium->m_VarDialog->Map(); auto& map = m_Fractorium->m_VarDialog->Map();
m_FilteredVariations.clear(); m_FilteredVariations.clear();
m_FilteredVariations.reserve(map.size()); m_FilteredVariations.reserve(map.size());
@ -108,7 +104,6 @@ void FractoriumEmberController<T>::SetupVariationTree()
QSize hint0(75, 16); QSize hint0(75, 16);
QSize hint1(30, 16); QSize hint1(30, 16);
auto tree = m_Fractorium->ui.VariationsTree; auto tree = m_Fractorium->ui.VariationsTree;
tree->clear(); tree->clear();
tree->blockSignals(true); tree->blockSignals(true);
@ -116,11 +111,9 @@ void FractoriumEmberController<T>::SetupVariationTree()
{ {
auto var = m_VariationList.GetVariation(i); auto var = m_VariationList.GetVariation(i);
auto parVar = dynamic_cast<const ParametricVariation<T>*>(var); auto parVar = dynamic_cast<const ParametricVariation<T>*>(var);
//First add the variation, with a spinner for its weight. //First add the variation, with a spinner for its weight.
auto item = new VariationTreeWidgetItem(var->VariationId(), tree); auto item = new VariationTreeWidgetItem(var->VariationId(), tree);
auto spinBox = new VariationTreeDoubleSpinBox(tree, item, var->VariationId(), ""); auto spinBox = new VariationTreeDoubleSpinBox(tree, item, var->VariationId(), "");
item->setText(0, QString::fromStdString(var->Name())); item->setText(0, QString::fromStdString(var->Name()));
item->setSizeHint(0, hint0); item->setSizeHint(0, hint0);
item->setSizeHint(1, hint1); item->setSizeHint(1, hint1);
@ -144,7 +137,6 @@ void FractoriumEmberController<T>::SetupVariationTree()
{ {
auto paramWidget = new VariationTreeWidgetItem(var->VariationId(), item); auto paramWidget = new VariationTreeWidgetItem(var->VariationId(), item);
auto varSpinBox = new VariationTreeDoubleSpinBox(tree, paramWidget, parVar->VariationId(), params[j].Name()); auto varSpinBox = new VariationTreeDoubleSpinBox(tree, paramWidget, parVar->VariationId(), params[j].Name());
paramWidget->setText(0, params[j].Name().c_str()); paramWidget->setText(0, params[j].Name().c_str());
paramWidget->setSizeHint(0, hint0); paramWidget->setSizeHint(0, hint0);
paramWidget->setSizeHint(1, hint1); paramWidget->setSizeHint(1, hint1);
@ -154,7 +146,7 @@ void FractoriumEmberController<T>::SetupVariationTree()
varSpinBox->DoubleClickZero(1); varSpinBox->DoubleClickZero(1);
varSpinBox->DoubleClickNonZero(0); varSpinBox->DoubleClickNonZero(0);
if (params[j].Type() == INTEGER || params[j].Type() == INTEGER_NONZERO) if (params[j].Type() == eParamType::INTEGER || params[j].Type() == eParamType::INTEGER_NONZERO)
{ {
varSpinBox->setSingleStep(1); varSpinBox->setSingleStep(1);
varSpinBox->Step(1); varSpinBox->Step(1);
@ -185,7 +177,6 @@ void FractoriumEmberController<T>::ClearVariationsTree()
{ {
QTreeWidgetItem* item = tree->topLevelItem(i); QTreeWidgetItem* item = tree->topLevelItem(i);
auto* spinBox = dynamic_cast<VariationTreeDoubleSpinBox*>(tree->itemWidget(item, 1)); auto* spinBox = dynamic_cast<VariationTreeDoubleSpinBox*>(tree->itemWidget(item, 1));
spinBox->SetValueStealth(0); spinBox->SetValueStealth(0);
for (int j = 0; j < item->childCount(); j++)//Iterate through all of the children, which will be the params. for (int j = 0; j < item->childCount(); j++)//Iterate through all of the children, which will be the params.
@ -252,7 +243,6 @@ void FractoriumEmberController<T>::VariationSpinBoxValueChanged(double d)//Would
//If the item wasn't a param and the xform did not contain this variation, //If the item wasn't a param and the xform did not contain this variation,
//it means they went from zero to a non-zero weight, so add a new copy of this xform. //it means they went from zero to a non-zero weight, so add a new copy of this xform.
auto newVar = var->Copy();//Create a new one with default values. auto newVar = var->Copy();//Create a new one with default values.
newVar->m_Weight = d; newVar->m_Weight = d;
xform->AddVariation(newVar); xform->AddVariation(newVar);
widgetItem->setBackgroundColor(0, QColor(200, 200, 200));//Set background to gray when a variation has non-zero weight in this xform. widgetItem->setBackgroundColor(0, QColor(200, 200, 200));//Set background to gray when a variation has non-zero weight in this xform.
@ -271,7 +261,6 @@ void FractoriumEmberController<T>::VariationSpinBoxValueChanged(double d)//Would
if (auto spinBox = dynamic_cast<VariationTreeDoubleSpinBox*>(itemWidget))//Cast the widget to the VariationTreeDoubleSpinBox type. if (auto spinBox = dynamic_cast<VariationTreeDoubleSpinBox*>(itemWidget))//Cast the widget to the VariationTreeDoubleSpinBox type.
{ {
string s = childItem->text(0).toStdString();//Use the name of the child, and the value of the spinner widget to assign the param. string s = childItem->text(0).toStdString();//Use the name of the child, and the value of the spinner widget to assign the param.
newParVar->SetParamVal(s.c_str(), spinBox->value()); newParVar->SetParamVal(s.c_str(), spinBox->value());
} }
} }
@ -295,7 +284,6 @@ template <typename T>
void FractoriumEmberController<T>::FillVariationTreeWithXform(Xform<T>* xform) void FractoriumEmberController<T>::FillVariationTreeWithXform(Xform<T>* xform)
{ {
auto tree = m_Fractorium->ui.VariationsTree; auto tree = m_Fractorium->ui.VariationsTree;
tree->blockSignals(true); tree->blockSignals(true);
m_Fractorium->Filter(); m_Fractorium->Filter();
@ -385,5 +373,5 @@ void Fractorium::OnVariationsFilterClearButtonClicked(bool checked)
template class FractoriumEmberController<float>; template class FractoriumEmberController<float>;
#ifdef DO_DOUBLE #ifdef DO_DOUBLE
template class FractoriumEmberController<double>; template class FractoriumEmberController<double>;
#endif #endif

View File

@ -13,9 +13,9 @@ GLEmberControllerBase::GLEmberControllerBase(Fractorium* fractorium, GLWidget* g
{ {
m_Fractorium = fractorium; m_Fractorium = fractorium;
m_GL = glWidget; m_GL = glWidget;
m_AffineType = AffinePre; m_AffineType = eAffineType::AffinePre;
m_HoverType = HoverNone; m_HoverType = eHoverType::HoverNone;
m_DragState = DragNone; m_DragState = eDragState::DragNone;
m_DragModifier = 0; m_DragModifier = 0;
} }
@ -37,7 +37,6 @@ GLEmberController<T>::GLEmberController(Fractorium* fractorium, GLWidget* glWidg
{ {
GridStep = T(1.0 / 8.0); GridStep = T(1.0 / 8.0);
m_FractoriumEmberController = controller; m_FractoriumEmberController = controller;
m_HoverXform = nullptr; m_HoverXform = nullptr;
m_SelectedXform = nullptr; m_SelectedXform = nullptr;
m_CenterDownX = 0; m_CenterDownX = 0;
@ -68,7 +67,7 @@ bool GLEmberController<T>::CheckForSizeMismatch(int w, int h)
template <typename T> template <typename T>
void GLEmberController<T>::ResetMouseState() void GLEmberController<T>::ResetMouseState()
{ {
m_HoverType = HoverNone; m_HoverType = eHoverType::HoverNone;
m_HoverXform = nullptr; m_HoverXform = nullptr;
m_SelectedXform = nullptr; m_SelectedXform = nullptr;
} }
@ -86,10 +85,8 @@ T GLEmberController<T>::CalcScale()
v2T windowCenter(T(m_GL->width()) / T(2), T(m_GL->height()) / T(2)); v2T windowCenter(T(m_GL->width()) / T(2), T(m_GL->height()) / T(2));
v2T windowMousePosDistanceFromCenter(m_MousePos.x - windowCenter.x, m_MousePos.y - windowCenter.y); v2T windowMousePosDistanceFromCenter(m_MousePos.x - windowCenter.x, m_MousePos.y - windowCenter.y);
v2T windowMouseDownDistanceFromCenter(m_MouseDownPos.x - windowCenter.x, m_MouseDownPos.y - windowCenter.y); v2T windowMouseDownDistanceFromCenter(m_MouseDownPos.x - windowCenter.x, m_MouseDownPos.y - windowCenter.y);
T lengthMousePosFromCenterInPixels = glm::length(windowMousePosDistanceFromCenter); T lengthMousePosFromCenterInPixels = glm::length(windowMousePosDistanceFromCenter);
T lengthMouseDownFromCenterInPixels = glm::length(windowMouseDownDistanceFromCenter); T lengthMouseDownFromCenterInPixels = glm::length(windowMouseDownDistanceFromCenter);
return lengthMousePosFromCenterInPixels - lengthMouseDownFromCenterInPixels; return lengthMousePosFromCenterInPixels - lengthMouseDownFromCenterInPixels;
} }
@ -103,7 +100,6 @@ T GLEmberController<T>::CalcRotation()
{ {
T rotStart = NormalizeDeg180<T>(T(90) - (atan2(-m_MouseDownWorldPos.y, m_MouseDownWorldPos.x) * RAD_2_DEG_T)); T rotStart = NormalizeDeg180<T>(T(90) - (atan2(-m_MouseDownWorldPos.y, m_MouseDownWorldPos.x) * RAD_2_DEG_T));
T rot = NormalizeDeg180<T>(T(90) - (atan2(-m_MouseWorldPos.y, m_MouseWorldPos.x) * RAD_2_DEG_T)); T rot = NormalizeDeg180<T>(T(90) - (atan2(-m_MouseWorldPos.y, m_MouseWorldPos.x) * RAD_2_DEG_T));
return rotStart - rot; return rotStart - rot;
} }
@ -116,10 +112,8 @@ template <typename T>
typename v3T GLEmberController<T>::SnapToGrid(v3T& vec) typename v3T GLEmberController<T>::SnapToGrid(v3T& vec)
{ {
v3T ret; v3T ret;
ret.x = glm::round(vec.x / GridStep) * GridStep; ret.x = glm::round(vec.x / GridStep) * GridStep;
ret.y = glm::round(vec.y / GridStep) * GridStep; ret.y = glm::round(vec.y / GridStep) * GridStep;
return ret; return ret;
} }
@ -135,7 +129,6 @@ typename v3T GLEmberController<T>::SnapToNormalizedAngle(v3T& vec, uint division
T rsq, theta; T rsq, theta;
T bestRsq = numeric_limits<T>::max(); T bestRsq = numeric_limits<T>::max();
v3T c, best; v3T c, best;
best.x = 1; best.x = 1;
best.y = 0; best.y = 0;
@ -167,7 +160,6 @@ typename v3T GLEmberController<T>::WindowToWorld(v3T& v, bool flip)
{ {
v3T mouse(v.x, flip ? m_Viewport[3] - v.y : v.y, 0);//Must flip y because in OpenGL, 0,0 is bottom left, but in windows, it's top left. v3T mouse(v.x, flip ? m_Viewport[3] - v.y : v.y, 0);//Must flip y because in OpenGL, 0,0 is bottom left, but in windows, it's top left.
v3T newCoords = glm::unProject(mouse, m_Modelview, m_Projection, m_Viewport);//Perform the calculation. v3T newCoords = glm::unProject(mouse, m_Modelview, m_Projection, m_Viewport);//Perform the calculation.
newCoords.z = 0;//For some reason, unProject() always comes back with the z coordinate as something other than 0. It should be 0 at all times. newCoords.z = 0;//For some reason, unProject() always comes back with the z coordinate as something other than 0. It should be 0 at all times.
return newCoords; return newCoords;
} }
@ -234,7 +226,6 @@ void GLEmberController<T>::QueryMatrices(bool print)
{ {
double unitX = fabs(renderer->UpperRightX(false) - renderer->LowerLeftX(false)) / 2.0; double unitX = fabs(renderer->UpperRightX(false) - renderer->LowerLeftX(false)) / 2.0;
double unitY = fabs(renderer->UpperRightY(false) - renderer->LowerLeftY(false)) / 2.0; double unitY = fabs(renderer->UpperRightY(false) - renderer->LowerLeftY(false)) / 2.0;
m_GL->glMatrixMode(GL_PROJECTION); m_GL->glMatrixMode(GL_PROJECTION);
m_GL->glPushMatrix(); m_GL->glPushMatrix();
m_GL->glLoadIdentity(); m_GL->glLoadIdentity();
@ -242,9 +233,7 @@ void GLEmberController<T>::QueryMatrices(bool print)
m_GL->glMatrixMode(GL_MODELVIEW); m_GL->glMatrixMode(GL_MODELVIEW);
m_GL->glPushMatrix(); m_GL->glPushMatrix();
m_GL->glLoadIdentity(); m_GL->glLoadIdentity();
QueryVMP(); QueryVMP();
m_GL->glMatrixMode(GL_PROJECTION); m_GL->glMatrixMode(GL_PROJECTION);
m_GL->glPopMatrix(); m_GL->glPopMatrix();
m_GL->glMatrixMode(GL_MODELVIEW); m_GL->glMatrixMode(GL_MODELVIEW);

View File

@ -9,22 +9,22 @@
/// <summary> /// <summary>
/// Use/draw pre or post affine transform. /// Use/draw pre or post affine transform.
/// </summary> /// </summary>
enum eAffineType { AffinePre, AffinePost }; enum class eAffineType : et { AffinePre, AffinePost };
/// <summary> /// <summary>
/// Hovering over nothing, the x axis, the y axis or the center. /// Hovering over nothing, the x axis, the y axis or the center.
/// </summary> /// </summary>
enum eHoverType { HoverNone, HoverXAxis, HoverYAxis, HoverTranslation }; enum class eHoverType : et { HoverNone, HoverXAxis, HoverYAxis, HoverTranslation };
/// <summary> /// <summary>
/// Dragging an affine transform or panning, rotating or scaling the image. /// Dragging an affine transform or panning, rotating or scaling the image.
/// </summary> /// </summary>
enum eDragState { DragNone, DragPanning, DragDragging, DragRotateScale }; enum class eDragState : et { DragNone, DragPanning, DragDragging, DragRotateScale };
/// <summary> /// <summary>
/// Dragging with no keys pressed, shift, control or alt. /// Dragging with no keys pressed, shift, control or alt.
/// </summary> /// </summary>
enum eDragModifier { DragModNone = 0x00, DragModShift = 0x01, DragModControl = 0x02, DragModAlt = 0x04 }; enum class eDragModifier : et { DragModNone = 0x00, DragModShift = 0x01, DragModControl = 0x02, DragModAlt = 0x04 };
/// <summary> /// <summary>
/// GLController, FractoriumEmberController, GLWidget and Fractorium need each other, but each can't all include the other. /// GLController, FractoriumEmberController, GLWidget and Fractorium need each other, but each can't all include the other.
@ -50,7 +50,15 @@ public:
void ClearDrag(); void ClearDrag();
bool Allocate(bool force = false); bool Allocate(bool force = false);
bool GetAlt();
bool GetShift();
bool GetControl();
void SetAlt();
void SetShift();
void SetControl();
void ClearAlt();
void ClearShift();
void ClearControl();
virtual void DrawImage() { } virtual void DrawImage() { }
virtual void DrawAffines(bool pre, bool post) { } virtual void DrawAffines(bool pre, bool post) { }
virtual void ClearWindow() { } virtual void ClearWindow() { }

View File

@ -13,18 +13,15 @@ GLWidget::GLWidget(QWidget* p)
: QOpenGLWidget(p) : QOpenGLWidget(p)
{ {
QSurfaceFormat qsf; QSurfaceFormat qsf;
m_Init = false; m_Init = false;
m_Drawing = false; m_Drawing = false;
m_TexWidth = 0; m_TexWidth = 0;
m_TexHeight = 0; m_TexHeight = 0;
m_OutputTexID = 0; m_OutputTexID = 0;
m_Fractorium = nullptr; m_Fractorium = nullptr;
qsf.setSwapInterval(1);//Vsync. qsf.setSwapInterval(1);//Vsync.
qsf.setSwapBehavior(QSurfaceFormat::DoubleBuffer); qsf.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
qsf.setVersion(2, 0); qsf.setVersion(2, 0);
setFormat(qsf); setFormat(qsf);
} }
@ -45,11 +42,9 @@ void GLWidget::InitGL()
{ {
int w = m_Fractorium->ui.GLParentScrollArea->width(); int w = m_Fractorium->ui.GLParentScrollArea->width();
int h = m_Fractorium->ui.GLParentScrollArea->height(); int h = m_Fractorium->ui.GLParentScrollArea->height();
SetDimensions(w, h); SetDimensions(w, h);
m_Fractorium->m_WidthSpin->setValue(w); m_Fractorium->m_WidthSpin->setValue(w);
m_Fractorium->m_HeightSpin->setValue(h); m_Fractorium->m_HeightSpin->setValue(h);
//Start with a flock of 10 random embers. Can't do this until now because the window wasn't maximized yet, so the sizes would have been off. //Start with a flock of 10 random embers. Can't do this until now because the window wasn't maximized yet, so the sizes would have been off.
m_Fractorium->OnActionNewFlock(false); m_Fractorium->OnActionNewFlock(false);
m_Fractorium->m_Controller->DelayedStartRenderTimer(); m_Fractorium->m_Controller->DelayedStartRenderTimer();
@ -90,16 +85,14 @@ void GLWidget::DrawQuad()
glLoadIdentity(); glLoadIdentity();
//Copy data from CPU to OpenGL if using a CPU renderer. This is not needed when using OpenCL. //Copy data from CPU to OpenGL if using a CPU renderer. This is not needed when using OpenCL.
if (renderer->RendererType() == CPU_RENDERER) if (renderer->RendererType() == eRendererType::CPU_RENDERER)
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_TexWidth, m_TexHeight, GL_RGBA, GL_UNSIGNED_BYTE, finalImage->data()); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_TexWidth, m_TexHeight, GL_RGBA, GL_UNSIGNED_BYTE, finalImage->data());
glBegin(GL_QUADS);//This will need to be converted to a shader at some point in the future. glBegin(GL_QUADS);//This will need to be converted to a shader at some point in the future.
glTexCoord2f(0.0, 0.0); glVertex2f(0.0, 0.0); glTexCoord2f(0.0, 0.0); glVertex2f(0.0, 0.0);
glTexCoord2f(0.0, 1.0); glVertex2f(0.0, 1.0); glTexCoord2f(0.0, 1.0); glVertex2f(0.0, 1.0);
glTexCoord2f(1.0, 1.0); glVertex2f(1.0, 1.0); glTexCoord2f(1.0, 1.0); glVertex2f(1.0, 1.0);
glTexCoord2f(1.0, 0.0); glVertex2f(1.0, 0.0); glTexCoord2f(1.0, 0.0); glVertex2f(1.0, 0.0);
glEnd(); glEnd();
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glPopMatrix(); glPopMatrix();
@ -120,7 +113,7 @@ void GLWidget::DrawQuad()
void GLEmberControllerBase::ClearDrag() void GLEmberControllerBase::ClearDrag()
{ {
m_DragModifier = 0; m_DragModifier = 0;
m_DragState = DragNone; m_DragState = eDragState::DragNone;
} }
/// <summary> /// <summary>
@ -128,6 +121,20 @@ void GLEmberControllerBase::ClearDrag()
/// </summary> /// </summary>
bool GLEmberControllerBase::Allocate(bool force) { return m_GL->Allocate(force); } bool GLEmberControllerBase::Allocate(bool force) { return m_GL->Allocate(force); }
/// <summary>
/// Helpers to set/get/clear which keys are pressed while dragging.
/// </summary>
/// <returns>bool</returns>
bool GLEmberControllerBase::GetAlt() { return (m_DragModifier & et(eDragModifier::DragModAlt)) == et(eDragModifier::DragModAlt); }
bool GLEmberControllerBase::GetShift() { return (m_DragModifier & et(eDragModifier::DragModShift)) == et(eDragModifier::DragModShift); }
bool GLEmberControllerBase::GetControl() { return (m_DragModifier & et(eDragModifier::DragModControl)) == et(eDragModifier::DragModControl); }
void GLEmberControllerBase::SetAlt() { m_DragModifier |= et(eDragModifier::DragModAlt); }
void GLEmberControllerBase::SetShift() { m_DragModifier |= et(eDragModifier::DragModShift); }
void GLEmberControllerBase::SetControl() { m_DragModifier |= et(eDragModifier::DragModControl); }
void GLEmberControllerBase::ClearAlt() { m_DragModifier &= ~et(eDragModifier::DragModAlt); }
void GLEmberControllerBase::ClearShift() { m_DragModifier &= ~et(eDragModifier::DragModShift); }
void GLEmberControllerBase::ClearControl() { m_DragModifier &= ~et(eDragModifier::DragModControl); }
/// <summary> /// <summary>
/// Clear the OpenGL output window to be the background color of the current ember. /// Clear the OpenGL output window to be the background color of the current ember.
/// Both buffers must be cleared, else artifacts will show up. /// Both buffers must be cleared, else artifacts will show up.
@ -136,7 +143,6 @@ template <typename T>
void GLEmberController<T>::ClearWindow() void GLEmberController<T>::ClearWindow()
{ {
Ember<T>* ember = m_FractoriumEmberController->CurrentEmber(); Ember<T>* ember = m_FractoriumEmberController->CurrentEmber();
m_GL->makeCurrent(); m_GL->makeCurrent();
m_GL->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); m_GL->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_GL->glClearColor(ember->m_Background.r, ember->m_Background.g, ember->m_Background.b, 1.0); m_GL->glClearColor(ember->m_Background.r, ember->m_Background.g, ember->m_Background.b, 1.0);
@ -191,11 +197,9 @@ void GLWidget::initializeGL()
if (!m_Init && initializeOpenGLFunctions() && m_Fractorium) if (!m_Init && initializeOpenGLFunctions() && m_Fractorium)
{ {
glClearColor(0.0, 0.0, 0.0, 1.0); glClearColor(0.0, 0.0, 0.0, 1.0);
glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &m_MaxTexSize); glGetIntegerv(GL_MAX_TEXTURE_SIZE, &m_MaxTexSize);
glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);
m_Fractorium->m_WidthSpin->setMaximum(m_MaxTexSize); m_Fractorium->m_WidthSpin->setMaximum(m_MaxTexSize);
m_Fractorium->m_HeightSpin->setMaximum(m_MaxTexSize); m_Fractorium->m_HeightSpin->setMaximum(m_MaxTexSize);
} }
@ -213,22 +217,18 @@ void GLWidget::paintGL()
if (controller && controller->Renderer() && controller->RenderTimerRunning()) if (controller && controller->Renderer() && controller->RenderTimerRunning())
{ {
RendererBase* renderer = controller->Renderer(); RendererBase* renderer = controller->Renderer();
m_Drawing = true; m_Drawing = true;
controller->GLController()->DrawImage(); controller->GLController()->DrawImage();
//Affine drawing. //Affine drawing.
bool pre = m_Fractorium->ui.PreAffineGroupBox->isChecked(); bool pre = m_Fractorium->ui.PreAffineGroupBox->isChecked();
bool post = m_Fractorium->ui.PostAffineGroupBox->isChecked(); bool post = m_Fractorium->ui.PostAffineGroupBox->isChecked();
float unitX = fabs(renderer->UpperRightX(false) - renderer->LowerLeftX(false)) / 2.0f; float unitX = fabs(renderer->UpperRightX(false) - renderer->LowerLeftX(false)) / 2.0f;
float unitY = fabs(renderer->UpperRightY(false) - renderer->LowerLeftY(false)) / 2.0f; float unitY = fabs(renderer->UpperRightY(false) - renderer->LowerLeftY(false)) / 2.0f;
glEnable(GL_DEPTH_TEST); glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND); glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH); glEnable(GL_LINE_SMOOTH);
glEnable(GL_POINT_SMOOTH); glEnable(GL_POINT_SMOOTH);
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO);
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glPushMatrix(); glPushMatrix();
glLoadIdentity(); glLoadIdentity();
@ -236,21 +236,16 @@ void GLWidget::paintGL()
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
glPushMatrix(); glPushMatrix();
glLoadIdentity(); glLoadIdentity();
glDisable(GL_DEPTH_TEST); glDisable(GL_DEPTH_TEST);
controller->GLController()->DrawAffines(pre, post); controller->GLController()->DrawAffines(pre, post);
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glPopMatrix(); glPopMatrix();
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
glPopMatrix(); glPopMatrix();
glDisable(GL_DEPTH_TEST); glDisable(GL_DEPTH_TEST);
glDisable(GL_BLEND); glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH); glDisable(GL_LINE_SMOOTH);
glDisable(GL_POINT_SMOOTH); glDisable(GL_POINT_SMOOTH);
m_Drawing = false; m_Drawing = false;
} }
} }
@ -263,11 +258,9 @@ void GLEmberController<T>::DrawImage()
{ {
RendererBase* renderer = m_FractoriumEmberController->Renderer(); RendererBase* renderer = m_FractoriumEmberController->Renderer();
Ember<T>* ember = m_FractoriumEmberController->CurrentEmber(); Ember<T>* ember = m_FractoriumEmberController->CurrentEmber();
m_GL->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); m_GL->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_GL->glClearColor(ember->m_Background.r, ember->m_Background.g, ember->m_Background.b, 1.0); m_GL->glClearColor(ember->m_Background.r, ember->m_Background.g, ember->m_Background.b, 1.0);
m_GL->glDisable(GL_DEPTH_TEST); m_GL->glDisable(GL_DEPTH_TEST);
renderer->EnterFinalAccum();//Lock, may not be necessary, but just in case. renderer->EnterFinalAccum();//Lock, may not be necessary, but just in case.
renderer->EnterResize(); renderer->EnterResize();
@ -275,8 +268,8 @@ void GLEmberController<T>::DrawImage()
{ {
vector<byte>* finalImage = m_FractoriumEmberController->FinalImage(); vector<byte>* finalImage = m_FractoriumEmberController->FinalImage();
if (renderer->RendererType() == OPENCL_RENDERER || finalImage)//Final image only matters for CPU renderer. if ((renderer->RendererType() == eRendererType::OPENCL_RENDERER) || finalImage)//Final image only matters for CPU renderer.
if (renderer->RendererType() == OPENCL_RENDERER || finalImage->size() == renderer->FinalBufferSize()) if ((renderer->RendererType() == eRendererType::OPENCL_RENDERER) || finalImage->size() == renderer->FinalBufferSize())
m_GL->DrawQuad();//Output image is drawn here. m_GL->DrawQuad();//Output image is drawn here.
} }
@ -294,10 +287,10 @@ void GLEmberController<T>::DrawAffines(bool pre, bool post)
{ {
QueryVMP();//Resolves to float or double specialization function depending on T. QueryVMP();//Resolves to float or double specialization function depending on T.
Ember<T>* ember = m_FractoriumEmberController->CurrentEmber(); Ember<T>* ember = m_FractoriumEmberController->CurrentEmber();
bool dragging = m_DragState == DragDragging; bool dragging = m_DragState == eDragState::DragDragging;
//Draw grid if control key is pressed. //Draw grid if control key is pressed.
if (m_GL->hasFocus() && ((m_DragModifier & DragModControl) == DragModControl)) if (m_GL->hasFocus() && GetControl())
{ {
m_GL->glLineWidth(1.0f); m_GL->glLineWidth(1.0f);
m_GL->DrawGrid(); m_GL->DrawGrid();
@ -307,7 +300,7 @@ void GLEmberController<T>::DrawAffines(bool pre, bool post)
if (!m_Fractorium->m_Settings->ShowAllXforms() && dragging) if (!m_Fractorium->m_Settings->ShowAllXforms() && dragging)
{ {
if (m_SelectedXform) if (m_SelectedXform)
DrawAffine(m_SelectedXform, m_AffineType == AffinePre, true); DrawAffine(m_SelectedXform, m_AffineType == eAffineType::AffinePre, true);
} }
else//Show all while dragging, or not dragging just hovering/mouse move. else//Show all while dragging, or not dragging just hovering/mouse move.
{ {
@ -317,7 +310,6 @@ void GLEmberController<T>::DrawAffines(bool pre, bool post)
{ {
Xform<T>* xform = ember->GetTotalXform(i); Xform<T>* xform = ember->GetTotalXform(i);
bool selected = dragging ? (m_SelectedXform == xform) : (m_HoverXform == xform); bool selected = dragging ? (m_SelectedXform == xform) : (m_HoverXform == xform);
DrawAffine(xform, true, selected); DrawAffine(xform, true, selected);
} }
} }
@ -332,7 +324,6 @@ void GLEmberController<T>::DrawAffines(bool pre, bool post)
{ {
Xform<T>* xform = ember->GetTotalXform(i); Xform<T>* xform = ember->GetTotalXform(i);
bool selected = dragging ? (m_SelectedXform == xform) : (m_HoverXform == xform); bool selected = dragging ? (m_SelectedXform == xform) : (m_HoverXform == xform);
DrawAffine(xform, false, selected); DrawAffine(xform, false, selected);
} }
} }
@ -351,7 +342,7 @@ void GLEmberController<T>::DrawAffines(bool pre, bool post)
m_GL->glEnd(); m_GL->glEnd();
m_GL->glPointSize(1.0f);//Restore point size. m_GL->glPointSize(1.0f);//Restore point size.
} }
else if (m_HoverType != HoverNone && m_HoverXform == m_SelectedXform)//Draw large turquoise dot on hover if they are hovering over the selected xform. else if (m_HoverType != eHoverType::HoverNone && m_HoverXform == m_SelectedXform)//Draw large turquoise dot on hover if they are hovering over the selected xform.
{ {
m_GL->glPointSize(6.0f); m_GL->glPointSize(6.0f);
m_GL->glBegin(GL_POINTS); m_GL->glBegin(GL_POINTS);
@ -369,24 +360,26 @@ void GLEmberController<T>::DrawAffines(bool pre, bool post)
bool GLEmberControllerBase::KeyPress_(QKeyEvent* e) bool GLEmberControllerBase::KeyPress_(QKeyEvent* e)
{ {
#ifdef OLDDRAG #ifdef OLDDRAG
if (e->key() == Qt::Key_Shift) if (e->key() == Qt::Key_Shift)
m_DragModifier |= DragModShift; SetShift();
else if (e->key() == Qt::Key_Control || e->key() == Qt::Key_C) else if (e->key() == Qt::Key_Control || e->key() == Qt::Key_C)
m_DragModifier |= DragModControl; SetControl();
else if (e->key() == Qt::Key_Alt || e->key() == Qt::Key_A) else if (e->key() == Qt::Key_Alt || e->key() == Qt::Key_A)
m_DragModifier |= DragModAlt; SetAlt();
else else
return false; return false;
return true; return true;
#else #else
if (e->key() == Qt::Key_Control) if (e->key() == Qt::Key_Control)
{ {
m_DragModifier |= DragModControl; SetControl();
return true; return true;
} }
#endif
#endif
return false; return false;
} }
@ -409,24 +402,26 @@ void GLWidget::keyPressEvent(QKeyEvent* e)
bool GLEmberControllerBase::KeyRelease_(QKeyEvent* e) bool GLEmberControllerBase::KeyRelease_(QKeyEvent* e)
{ {
#ifdef OLDDRAG #ifdef OLDDRAG
if (e->key() == Qt::Key_Shift) if (e->key() == Qt::Key_Shift)
m_DragModifier &= ~DragModShift; ClearShift();
else if (e->key() == Qt::Key_Control || e->key() == Qt::Key_C) else if (e->key() == Qt::Key_Control || e->key() == Qt::Key_C)
m_DragModifier &= ~DragModControl; ClearControl();
else if (e->key() == Qt::Key_Alt || e->key() == Qt::Key_A) else if (e->key() == Qt::Key_Alt || e->key() == Qt::Key_A)
m_DragModifier &= ~DragModAlt; ClearAlt();
else else
return false; return false;
return true; return true;
#else #else
if (e->key() == Qt::Key_Control) if (e->key() == Qt::Key_Control)
{ {
m_DragModifier &= ~DragModControl; ClearControl();
return true; return true;
} }
#endif
#endif
return false; return false;
} }
@ -466,18 +461,20 @@ void GLEmberController<T>::MousePress(QMouseEvent* e)
m_BoundsDown.x = renderer->LowerLeftY(false); m_BoundsDown.x = renderer->LowerLeftY(false);
m_BoundsDown.y = renderer->UpperRightX(false); m_BoundsDown.y = renderer->UpperRightX(false);
m_BoundsDown.z = renderer->UpperRightY(false); m_BoundsDown.z = renderer->UpperRightY(false);
#ifndef OLDDRAG #ifndef OLDDRAG
Qt::KeyboardModifiers mod = e->modifiers(); Qt::KeyboardModifiers mod = e->modifiers();
if (mod.testFlag(Qt::ShiftModifier)) if (mod.testFlag(Qt::ShiftModifier))
m_DragModifier |= DragModShift; SetShift();
//if (mod.testFlag(Qt::ControlModifier))// || mod.testFlag(Qt::Key_C)) //if (mod.testFlag(Qt::ControlModifier))// || mod.testFlag(Qt::Key_C))
// m_DragModifier |= DragModControl; // m_DragModifier |= DragModControl;
if (mod.testFlag(Qt::AltModifier))// || mod.testFlag(Qt::Key_A)) if (mod.testFlag(Qt::AltModifier))// || mod.testFlag(Qt::Key_A))
m_DragModifier |= DragModAlt; SetAlt();
#endif #endif
if (m_DragState == DragNone)//Only take action if the user wasn't already dragging.
if (m_DragState == eDragState::DragNone)//Only take action if the user wasn't already dragging.
{ {
m_MouseDownWorldPos = m_MouseWorldPos;//Set the mouse down position to the current position. m_MouseDownWorldPos = m_MouseWorldPos;//Set the mouse down position to the current position.
@ -488,14 +485,12 @@ void GLEmberController<T>::MousePress(QMouseEvent* e)
if (m_HoverXform && xformIndex != -1) if (m_HoverXform && xformIndex != -1)
{ {
m_SelectedXform = m_HoverXform; m_SelectedXform = m_HoverXform;
m_DragSrcTransform = Affine2D<T>(m_AffineType == AffinePre ? m_SelectedXform->m_Affine : m_SelectedXform->m_Post);//Copy the affine of the xform that was selected. m_DragSrcTransform = Affine2D<T>(m_AffineType == eAffineType::AffinePre ? m_SelectedXform->m_Affine : m_SelectedXform->m_Post);//Copy the affine of the xform that was selected.
m_DragHandlePos = m_HoverHandlePos; m_DragHandlePos = m_HoverHandlePos;
m_DragHandleOffset = m_DragHandlePos - m_MouseWorldPos; m_DragHandleOffset = m_DragHandlePos - m_MouseWorldPos;
m_DragState = DragDragging; m_DragState = eDragState::DragDragging;
//The user has selected an xform by clicking on it, so update the main GUI by selecting this xform in the combo box. //The user has selected an xform by clicking on it, so update the main GUI by selecting this xform in the combo box.
m_Fractorium->CurrentXform(xformIndex); m_Fractorium->CurrentXform(xformIndex);
//Draw large yellow dot on select or drag. //Draw large yellow dot on select or drag.
m_GL->glPointSize(6.0f); m_GL->glPointSize(6.0f);
m_GL->glBegin(GL_POINTS); m_GL->glBegin(GL_POINTS);
@ -508,14 +503,14 @@ void GLEmberController<T>::MousePress(QMouseEvent* e)
else//Nothing was selected. else//Nothing was selected.
{ {
//m_SelectedXform = nullptr; //m_SelectedXform = nullptr;
m_DragState = DragNone; m_DragState = eDragState::DragNone;
} }
} }
else if (e->button() == Qt::MiddleButton)//Middle button does whole image translation. else if (e->button() == Qt::MiddleButton)//Middle button does whole image translation.
{ {
m_CenterDownX = ember->m_CenterX;//Capture where the center of the image is because this value will change when panning. m_CenterDownX = ember->m_CenterX;//Capture where the center of the image is because this value will change when panning.
m_CenterDownY = ember->m_CenterY; m_CenterDownY = ember->m_CenterY;
m_DragState = DragPanning; m_DragState = eDragState::DragPanning;
} }
else if (e->button() == Qt::RightButton)//Right button does whole image rotation and scaling. else if (e->button() == Qt::RightButton)//Right button does whole image rotation and scaling.
{ {
@ -525,7 +520,7 @@ void GLEmberController<T>::MousePress(QMouseEvent* e)
m_CenterDownY = ember->m_CenterY; m_CenterDownY = ember->m_CenterY;
m_RotationDown = ember->m_Rotate; m_RotationDown = ember->m_Rotate;
m_ScaleDown = ember->m_PixelsPerUnit; m_ScaleDown = ember->m_PixelsPerUnit;
m_DragState = DragRotateScale; m_DragState = eDragState::DragRotateScale;
} }
} }
} }
@ -553,18 +548,15 @@ template <typename T>
void GLEmberController<T>::MouseRelease(QMouseEvent* e) void GLEmberController<T>::MouseRelease(QMouseEvent* e)
{ {
v3T mouseFlipped(e->x() * m_GL->devicePixelRatio(), m_Viewport[3] - e->y() * m_GL->devicePixelRatio(), 0);//Must flip y because in OpenGL, 0,0 is bottom left, but in windows, it's top left. v3T mouseFlipped(e->x() * m_GL->devicePixelRatio(), m_Viewport[3] - e->y() * m_GL->devicePixelRatio(), 0);//Must flip y because in OpenGL, 0,0 is bottom left, but in windows, it's top left.
m_MouseWorldPos = WindowToWorld(mouseFlipped, false); m_MouseWorldPos = WindowToWorld(mouseFlipped, false);
if (m_DragState == DragDragging && (e->button() & Qt::LeftButton)) if (m_DragState == eDragState::DragDragging && (e->button() & Qt::LeftButton))
UpdateHover(mouseFlipped); UpdateHover(mouseFlipped);
m_DragState = DragNone; m_DragState = eDragState::DragNone;
#ifndef OLDDRAG #ifndef OLDDRAG
m_DragModifier = 0; m_DragModifier = 0;
#endif #endif
m_GL->repaint();//Force immediate redraw. m_GL->repaint();//Force immediate redraw.
} }
@ -607,43 +599,39 @@ void GLEmberController<T>::MouseMove(QMouseEvent* e)
if (m_Fractorium->m_Controller->RenderTimerRunning()) if (m_Fractorium->m_Controller->RenderTimerRunning())
m_Fractorium->SetCoordinateStatus(e->x() * m_GL->devicePixelRatio(), e->y() * m_GL->devicePixelRatio(), m_MouseWorldPos.x, m_MouseWorldPos.y); m_Fractorium->SetCoordinateStatus(e->x() * m_GL->devicePixelRatio(), e->y() * m_GL->devicePixelRatio(), m_MouseWorldPos.x, m_MouseWorldPos.y);
if (m_SelectedXform && m_DragState == DragDragging)//Dragging and affine. if (m_SelectedXform && m_DragState == eDragState::DragDragging)//Dragging and affine.
{ {
bool pre = m_AffineType == AffinePre; bool pre = m_AffineType == eAffineType::AffinePre;
Affine2D<T>* affine = pre ? &m_SelectedXform->m_Affine : &m_SelectedXform->m_Post;//Determine pre or post affine. Affine2D<T>* affine = pre ? &m_SelectedXform->m_Affine : &m_SelectedXform->m_Post;//Determine pre or post affine.
if (m_HoverType == HoverTranslation) if (m_HoverType == eHoverType::HoverTranslation)
*affine = CalcDragTranslation(); *affine = CalcDragTranslation();
else if (m_HoverType == HoverXAxis) else if (m_HoverType == eHoverType::HoverXAxis)
*affine = CalcDragXAxis(); *affine = CalcDragXAxis();
else if (m_HoverType == HoverYAxis) else if (m_HoverType == eHoverType::HoverYAxis)
*affine = CalcDragYAxis(); *affine = CalcDragYAxis();
m_FractoriumEmberController->FillAffineWithXform(m_SelectedXform, pre);//Update the spinners in the affine tab of the main window. m_FractoriumEmberController->FillAffineWithXform(m_SelectedXform, pre);//Update the spinners in the affine tab of the main window.
m_FractoriumEmberController->UpdateRender();//Restart the rendering process. m_FractoriumEmberController->UpdateRender();//Restart the rendering process.
} }
else if (m_DragState == DragPanning)//Translating the whole image. else if (m_DragState == eDragState::DragPanning)//Translating the whole image.
{ {
T x = -(m_MouseWorldPos.x - m_MouseDownWorldPos.x); T x = -(m_MouseWorldPos.x - m_MouseDownWorldPos.x);
T y = (m_MouseWorldPos.y - m_MouseDownWorldPos.y); T y = (m_MouseWorldPos.y - m_MouseDownWorldPos.y);
Affine2D<T> rotMat; Affine2D<T> rotMat;
rotMat.C(m_CenterDownX); rotMat.C(m_CenterDownX);
rotMat.F(m_CenterDownY); rotMat.F(m_CenterDownY);
rotMat.Rotate(ember->m_Rotate); rotMat.Rotate(ember->m_Rotate);
v2T v1(x, y); v2T v1(x, y);
v2T v2 = rotMat.TransformVector(v1); v2T v2 = rotMat.TransformVector(v1);
ember->m_CenterX = v2.x; ember->m_CenterX = v2.x;
ember->m_CenterY = ember->m_RotCenterY = v2.y; ember->m_CenterY = ember->m_RotCenterY = v2.y;
m_FractoriumEmberController->SetCenter(ember->m_CenterX, ember->m_CenterY);//Will restart the rendering process. m_FractoriumEmberController->SetCenter(ember->m_CenterX, ember->m_CenterY);//Will restart the rendering process.
} }
else if (m_DragState == DragRotateScale)//Rotating and scaling the whole image. else if (m_DragState == eDragState::DragRotateScale)//Rotating and scaling the whole image.
{ {
T rot = CalcRotation(); T rot = CalcRotation();
T scale = CalcScale(); T scale = CalcScale();
ember->m_Rotate = NormalizeDeg180<T>(m_RotationDown + rot); ember->m_Rotate = NormalizeDeg180<T>(m_RotationDown + rot);
m_Fractorium->SetRotation(ember->m_Rotate, true); m_Fractorium->SetRotation(ember->m_Rotate, true);
ember->m_PixelsPerUnit = m_ScaleDown + scale; ember->m_PixelsPerUnit = m_ScaleDown + scale;
@ -672,9 +660,10 @@ void GLEmberController<T>::MouseMove(QMouseEvent* e)
//Only update if the user was dragging or hovered over a point. //Only update if the user was dragging or hovered over a point.
//Use repaint() to update immediately for a more responsive feel. //Use repaint() to update immediately for a more responsive feel.
if ((m_DragState != DragNone) || draw) if ((m_DragState != eDragState::DragNone) || draw)
m_GL->update(); m_GL->update();
//m_GL->repaint();
//m_GL->repaint();
} }
/// <summary> /// <summary>
@ -773,7 +762,6 @@ bool GLWidget::Allocate(bool force)
glGenTextures(1, &m_OutputTexID); glGenTextures(1, &m_OutputTexID);
glBindTexture(GL_TEXTURE_2D, m_OutputTexID); glBindTexture(GL_TEXTURE_2D, m_OutputTexID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);//Fractron had this as GL_LINEAR_MIPMAP_LINEAR for OpenCL and Cuda. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);//Fractron had this as GL_LINEAR_MIPMAP_LINEAR for OpenCL and Cuda.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
@ -835,14 +823,13 @@ template <typename T>
bool GLEmberController<T>::SizesMatch() bool GLEmberController<T>::SizesMatch()
{ {
Ember<T>* ember = m_FractoriumEmberController->CurrentEmber(); Ember<T>* ember = m_FractoriumEmberController->CurrentEmber();
return (ember && return (ember &&
ember->m_FinalRasW == m_GL->width() && ember->m_FinalRasW == m_GL->width() &&
ember->m_FinalRasH == m_GL->height() && ember->m_FinalRasH == m_GL->height() &&
m_GL->width() == m_GL->m_TexWidth && m_GL->width() == m_GL->m_TexWidth &&
m_GL->height() == m_GL->m_TexHeight && m_GL->height() == m_GL->m_TexHeight &&
m_GL->m_TexWidth == m_GL->m_ViewWidth && m_GL->m_TexWidth == m_GL->m_ViewWidth &&
m_GL->m_TexHeight == m_GL->m_ViewHeight); m_GL->m_TexHeight == m_GL->m_ViewHeight);
} }
/// <summary> /// <summary>
@ -860,7 +847,6 @@ void GLWidget::DrawGrid()
float xHigh = ceil(unitX); float xHigh = ceil(unitX);
float yLow = floor(-unitY); float yLow = floor(-unitY);
float yHigh = ceil(unitY); float yHigh = ceil(unitY);
glBegin(GL_LINES); glBegin(GL_LINES);
if (rad <= 8.0f) if (rad <= 8.0f)
@ -920,21 +906,19 @@ void GLWidget::DrawUnitSquare()
glLineWidth(1.0f); glLineWidth(1.0f);
glBegin(GL_LINES); glBegin(GL_LINES);
glColor4f(1.0f, 1.0f, 1.0f, 0.25f); glColor4f(1.0f, 1.0f, 1.0f, 0.25f);
glVertex2f(-1,-1); glVertex2f(-1, -1);
glVertex2f( 1,-1); glVertex2f( 1, -1);
glVertex2f(-1, 1); glVertex2f(-1, 1);
glVertex2f( 1, 1); glVertex2f( 1, 1);
glVertex2f(-1, -1);
glVertex2f(-1,-1);
glVertex2f(-1, 1); glVertex2f(-1, 1);
glVertex2f( 1,-1); glVertex2f( 1, -1);
glVertex2f( 1, 1); glVertex2f( 1, 1);
glColor4f(1.0f, 0.0f, 0.0f, 0.5f); glColor4f(1.0f, 0.0f, 0.0f, 0.5f);
glVertex2f(-1, 0); glVertex2f(-1, 0);
glVertex2f( 1, 0); glVertex2f( 1, 0);
glColor4f(0.0f, 1.0f, 0.0f, 0.5f); glColor4f(0.0f, 1.0f, 0.0f, 0.5f);
glVertex2f( 0,-1); glVertex2f( 0, -1);
glVertex2f( 0, 1); glVertex2f( 0, 1);
glEnd(); glEnd();
} }
@ -956,21 +940,17 @@ void GLEmberController<T>::DrawAffine(Xform<T>* xform, bool pre, bool selected)
size_t size = ember->m_Palette.m_Entries.size(); size_t size = ember->m_Palette.m_Entries.size();
v4T color = ember->m_Palette.m_Entries[Clamp<T>(xform->m_ColorX * size, 0, size - 1)]; v4T color = ember->m_Palette.m_Entries[Clamp<T>(xform->m_ColorX * size, 0, size - 1)];
Affine2D<T>* affine = pre ? &xform->m_Affine : &xform->m_Post; Affine2D<T>* affine = pre ? &xform->m_Affine : &xform->m_Post;
//For some incredibly strange reason, even though glm and OpenGL use matrices with a column-major //For some incredibly strange reason, even though glm and OpenGL use matrices with a column-major
//data layout, nothing will work here unless they are flipped to row major order. This is how it was //data layout, nothing will work here unless they are flipped to row major order. This is how it was
//done in Fractron. //done in Fractron.
m4T mat = affine->ToMat4RowMajor(); m4T mat = affine->ToMat4RowMajor();
m_GL->glPushMatrix(); m_GL->glPushMatrix();
m_GL->glLoadIdentity(); m_GL->glLoadIdentity();
MultMatrix(mat); MultMatrix(mat);
m_GL->glLineWidth(3.0f);//One 3px wide, colored black, except green on x axis for post affine. m_GL->glLineWidth(3.0f);//One 3px wide, colored black, except green on x axis for post affine.
m_GL->DrawAffineHelper(index, selected, pre, final, true); m_GL->DrawAffineHelper(index, selected, pre, final, true);
m_GL->glLineWidth(1.0f);//Again 1px wide, colored white, to give a white middle with black outline effect. m_GL->glLineWidth(1.0f);//Again 1px wide, colored white, to give a white middle with black outline effect.
m_GL->DrawAffineHelper(index, selected, pre, final, false); m_GL->DrawAffineHelper(index, selected, pre, final, false);
m_GL->glPointSize(5.0f);//Three black points, one in the center and two on the circle. Drawn big 5px first to give a black outline. m_GL->glPointSize(5.0f);//Three black points, one in the center and two on the circle. Drawn big 5px first to give a black outline.
m_GL->glBegin(GL_POINTS); m_GL->glBegin(GL_POINTS);
m_GL->glColor4f(0.0f, 0.0f, 0.0f, selected ? 1.0f : 0.5f); m_GL->glColor4f(0.0f, 0.0f, 0.0f, selected ? 1.0f : 0.5f);
@ -978,14 +958,12 @@ void GLEmberController<T>::DrawAffine(Xform<T>* xform, bool pre, bool selected)
m_GL->glVertex2f(1.0f, 0.0f); m_GL->glVertex2f(1.0f, 0.0f);
m_GL->glVertex2f(0.0f, 1.0f); m_GL->glVertex2f(0.0f, 1.0f);
m_GL->glEnd(); m_GL->glEnd();
m_GL->glLineWidth(2.0f);//Draw lines again for y axis only, without drawing the circle, using the color of the selected xform. m_GL->glLineWidth(2.0f);//Draw lines again for y axis only, without drawing the circle, using the color of the selected xform.
m_GL->glBegin(GL_LINES); m_GL->glBegin(GL_LINES);
m_GL->glColor4f(color.r, color.g, color.b, 1.0f); m_GL->glColor4f(color.r, color.g, color.b, 1.0f);
m_GL->glVertex2f(0.0f, 0.0f); m_GL->glVertex2f(0.0f, 0.0f);
m_GL->glVertex2f(0.0f, 1.0f); m_GL->glVertex2f(0.0f, 1.0f);
m_GL->glEnd(); m_GL->glEnd();
m_GL->glPointSize(3.0f);//Draw smaller white points, to give a black outline effect. m_GL->glPointSize(3.0f);//Draw smaller white points, to give a black outline effect.
m_GL->glBegin(GL_POINTS); m_GL->glBegin(GL_POINTS);
m_GL->glColor4f(1.0f, 1.0f, 1.0f, selected ? 1.0f : 0.5f); m_GL->glColor4f(1.0f, 1.0f, 1.0f, selected ? 1.0f : 0.5f);
@ -1010,7 +988,6 @@ void GLWidget::DrawAffineHelper(int index, bool selected, bool pre, bool final,
float px = 1.0f; float px = 1.0f;
float py = 0.0f; float py = 0.0f;
QColor col = final ? m_Fractorium->m_FinalXformComboColor : m_Fractorium->m_XformComboColors[index % XFORM_COLOR_COUNT]; QColor col = final ? m_Fractorium->m_FinalXformComboColor : m_Fractorium->m_XformComboColors[index % XFORM_COLOR_COUNT];
glBegin(GL_LINES); glBegin(GL_LINES);
//Circle part. //Circle part.
@ -1030,7 +1007,6 @@ void GLWidget::DrawAffineHelper(int index, bool selected, bool pre, bool final,
float theta = float(M_PI) * 2.0f * float(i % 64) / 64.0f; float theta = float(M_PI) * 2.0f * float(i % 64) / 64.0f;
float fx = float(cos(theta)); float fx = float(cos(theta));
float fy = float(sin(theta)); float fy = float(sin(theta));
glVertex2f(px, py); glVertex2f(px, py);
glVertex2f(fx, fy); glVertex2f(fx, fy);
px = fx; px = fx;
@ -1060,7 +1036,6 @@ void GLWidget::DrawAffineHelper(int index, bool selected, bool pre, bool final,
glVertex2f(0.0f, 0.0f);//Y axis. glVertex2f(0.0f, 0.0f);//Y axis.
glVertex2f(0.0f, 1.0f); glVertex2f(0.0f, 1.0f);
glEnd(); glEnd();
} }
@ -1080,8 +1055,7 @@ int GLEmberController<T>::UpdateHover(v3T& glCoords)
uint bestIndex = -1; uint bestIndex = -1;
T bestDist = 10; T bestDist = 10;
Ember<T>* ember = m_FractoriumEmberController->CurrentEmber(); Ember<T>* ember = m_FractoriumEmberController->CurrentEmber();
m_HoverType = eHoverType::HoverNone;
m_HoverType = HoverNone;
//If there's a selected/current xform, check it first so it gets precedence over the others. //If there's a selected/current xform, check it first so it gets precedence over the others.
if (m_SelectedXform) if (m_SelectedXform)
@ -1154,14 +1128,13 @@ bool GLEmberController<T>::CheckXformHover(Xform<T>* xform, v3T& glCoords, T& be
v3T xAxisScreen = glm::project(translation + xAxis, m_Modelview, m_Projection, m_Viewport); v3T xAxisScreen = glm::project(translation + xAxis, m_Modelview, m_Projection, m_Viewport);
v3T yAxis(xform->m_Affine.B(), xform->m_Affine.E(), 0); v3T yAxis(xform->m_Affine.B(), xform->m_Affine.E(), 0);
v3T yAxisScreen = glm::project(translation + yAxis, m_Modelview, m_Projection, m_Viewport); v3T yAxisScreen = glm::project(translation + yAxis, m_Modelview, m_Projection, m_Viewport);
pos = translation; pos = translation;
dist = glm::distance(glCoords, transScreen); dist = glm::distance(glCoords, transScreen);
if (dist < bestDist) if (dist < bestDist)
{ {
bestDist = dist; bestDist = dist;
m_HoverType = HoverTranslation; m_HoverType = eHoverType::HoverTranslation;
m_HoverHandlePos = pos; m_HoverHandlePos = pos;
preFound = true; preFound = true;
} }
@ -1172,7 +1145,7 @@ bool GLEmberController<T>::CheckXformHover(Xform<T>* xform, v3T& glCoords, T& be
if (dist < bestDist) if (dist < bestDist)
{ {
bestDist = dist; bestDist = dist;
m_HoverType = HoverXAxis; m_HoverType = eHoverType::HoverXAxis;
m_HoverHandlePos = pos; m_HoverHandlePos = pos;
preFound = true; preFound = true;
} }
@ -1183,13 +1156,13 @@ bool GLEmberController<T>::CheckXformHover(Xform<T>* xform, v3T& glCoords, T& be
if (dist < bestDist) if (dist < bestDist)
{ {
bestDist = dist; bestDist = dist;
m_HoverType = HoverYAxis; m_HoverType = eHoverType::HoverYAxis;
m_HoverHandlePos = pos; m_HoverHandlePos = pos;
preFound = true; preFound = true;
} }
if (preFound) if (preFound)
m_AffineType = AffinePre; m_AffineType = eAffineType::AffinePre;
} }
if (post) if (post)
@ -1200,14 +1173,13 @@ bool GLEmberController<T>::CheckXformHover(Xform<T>* xform, v3T& glCoords, T& be
v3T xAxisScreen = glm::project(translation + xAxis, m_Modelview, m_Projection, m_Viewport); v3T xAxisScreen = glm::project(translation + xAxis, m_Modelview, m_Projection, m_Viewport);
v3T yAxis(xform->m_Post.B(), xform->m_Post.E(), 0); v3T yAxis(xform->m_Post.B(), xform->m_Post.E(), 0);
v3T yAxisScreen = glm::project(translation + yAxis, m_Modelview, m_Projection, m_Viewport); v3T yAxisScreen = glm::project(translation + yAxis, m_Modelview, m_Projection, m_Viewport);
pos = translation; pos = translation;
dist = glm::distance(glCoords, transScreen); dist = glm::distance(glCoords, transScreen);
if (dist < bestDist) if (dist < bestDist)
{ {
bestDist = dist; bestDist = dist;
m_HoverType = HoverTranslation; m_HoverType = eHoverType::HoverTranslation;
m_HoverHandlePos = pos; m_HoverHandlePos = pos;
postFound = true; postFound = true;
} }
@ -1218,7 +1190,7 @@ bool GLEmberController<T>::CheckXformHover(Xform<T>* xform, v3T& glCoords, T& be
if (dist < bestDist) if (dist < bestDist)
{ {
bestDist = dist; bestDist = dist;
m_HoverType = HoverXAxis; m_HoverType = eHoverType::HoverXAxis;
m_HoverHandlePos = pos; m_HoverHandlePos = pos;
postFound = true; postFound = true;
} }
@ -1229,13 +1201,13 @@ bool GLEmberController<T>::CheckXformHover(Xform<T>* xform, v3T& glCoords, T& be
if (dist < bestDist) if (dist < bestDist)
{ {
bestDist = dist; bestDist = dist;
m_HoverType = HoverYAxis; m_HoverType = eHoverType::HoverYAxis;
m_HoverHandlePos = pos; m_HoverHandlePos = pos;
postFound = true; postFound = true;
} }
if (postFound) if (postFound)
m_AffineType = AffinePost; m_AffineType = eAffineType::AffinePost;
} }
return preFound || postFound; return preFound || postFound;
@ -1264,21 +1236,19 @@ Affine2D<T> GLEmberController<T>::CalcDragXAxis()
{ {
v3T t3, newAxis, newPos; v3T t3, newAxis, newPos;
Affine2D<T> result = m_DragSrcTransform; Affine2D<T> result = m_DragSrcTransform;
bool worldPivotShiftAlt = !m_Fractorium->LocalPivot() && bool worldPivotShiftAlt = !m_Fractorium->LocalPivot() && GetShift() && GetAlt();
((m_DragModifier & DragModShift) == DragModShift) &&
((m_DragModifier & DragModAlt) == DragModAlt);
if (worldPivotShiftAlt) if (worldPivotShiftAlt)
t3 = v3T(0, 0, 0); t3 = v3T(0, 0, 0);
else else
t3 = v3T(m_DragSrcTransform.O(), 0); t3 = v3T(m_DragSrcTransform.O(), 0);
if ((m_DragModifier & DragModShift) == DragModShift) if (GetShift())
{ {
v3T targetAxis = m_MouseWorldPos - t3; v3T targetAxis = m_MouseWorldPos - t3;
v3T norm = glm::normalize(targetAxis); v3T norm = glm::normalize(targetAxis);
if ((m_DragModifier & DragModControl) == DragModControl) if (GetControl())
norm = SnapToNormalizedAngle(norm, 24); norm = SnapToNormalizedAngle(norm, 24);
if (worldPivotShiftAlt) if (worldPivotShiftAlt)
@ -1288,7 +1258,7 @@ Affine2D<T> GLEmberController<T>::CalcDragXAxis()
} }
else else
{ {
if ((m_DragModifier & DragModControl) == DragModControl) if (GetControl())
newPos = SnapToGrid(m_MouseWorldPos); newPos = SnapToGrid(m_MouseWorldPos);
else else
newPos = m_MouseWorldPos + m_DragHandleOffset; newPos = m_MouseWorldPos + m_DragHandleOffset;
@ -1296,7 +1266,7 @@ Affine2D<T> GLEmberController<T>::CalcDragXAxis()
newAxis = newPos - t3; newAxis = newPos - t3;
} }
if ((m_DragModifier & DragModAlt) == DragModAlt) if (GetAlt())
{ {
if (worldPivotShiftAlt) if (worldPivotShiftAlt)
result.X(v2T(newAxis) - m_DragSrcTransform.O()); result.X(v2T(newAxis) - m_DragSrcTransform.O());
@ -1309,7 +1279,6 @@ Affine2D<T> GLEmberController<T>::CalcDragXAxis()
} }
m_DragHandlePos = v3T(result.O() + result.X(), 0); m_DragHandlePos = v3T(result.O() + result.X(), 0);
return result; return result;
} }
@ -1336,21 +1305,19 @@ Affine2D<T> GLEmberController<T>::CalcDragYAxis()
{ {
v3T t3, newAxis, newPos; v3T t3, newAxis, newPos;
Affine2D<T> result = m_DragSrcTransform; Affine2D<T> result = m_DragSrcTransform;
bool worldPivotShiftAlt = !m_Fractorium->LocalPivot() && bool worldPivotShiftAlt = !m_Fractorium->LocalPivot() && GetShift() && GetAlt();
((m_DragModifier & DragModShift) == DragModShift) &&
((m_DragModifier & DragModAlt) == DragModAlt);
if (worldPivotShiftAlt) if (worldPivotShiftAlt)
t3 = v3T(0, 0, 0); t3 = v3T(0, 0, 0);
else else
t3 = v3T(m_DragSrcTransform.O(), 0); t3 = v3T(m_DragSrcTransform.O(), 0);
if ((m_DragModifier & DragModShift) == DragModShift) if (GetShift())
{ {
v3T targetAxis = m_MouseWorldPos - t3; v3T targetAxis = m_MouseWorldPos - t3;
v3T norm = glm::normalize(targetAxis); v3T norm = glm::normalize(targetAxis);
if ((m_DragModifier & DragModControl) == DragModControl) if (GetControl())
norm = SnapToNormalizedAngle(norm, 24); norm = SnapToNormalizedAngle(norm, 24);
if (worldPivotShiftAlt) if (worldPivotShiftAlt)
@ -1360,7 +1327,7 @@ Affine2D<T> GLEmberController<T>::CalcDragYAxis()
} }
else else
{ {
if ((m_DragModifier & DragModControl) == DragModControl) if (GetControl())
newPos = SnapToGrid(m_MouseWorldPos); newPos = SnapToGrid(m_MouseWorldPos);
else else
newPos = m_MouseWorldPos + m_DragHandleOffset; newPos = m_MouseWorldPos + m_DragHandleOffset;
@ -1368,7 +1335,7 @@ Affine2D<T> GLEmberController<T>::CalcDragYAxis()
newAxis = newPos - t3; newAxis = newPos - t3;
} }
if ((m_DragModifier & DragModAlt) == DragModAlt) if (GetAlt())
{ {
if (worldPivotShiftAlt) if (worldPivotShiftAlt)
result.Y(v2T(newAxis) - m_DragSrcTransform.O()); result.Y(v2T(newAxis) - m_DragSrcTransform.O());
@ -1381,7 +1348,6 @@ Affine2D<T> GLEmberController<T>::CalcDragYAxis()
} }
m_DragHandlePos = v3T(result.O() + result.Y(), 0); m_DragHandlePos = v3T(result.O() + result.Y(), 0);
return result; return result;
} }
@ -1404,13 +1370,13 @@ Affine2D<T> GLEmberController<T>::CalcDragTranslation()
{ {
v3T newPos, newX, newY; v3T newPos, newX, newY;
Affine2D<T> result = m_DragSrcTransform; Affine2D<T> result = m_DragSrcTransform;
bool worldPivotShift = !m_Fractorium->LocalPivot() && ((m_DragModifier & DragModShift) == DragModShift); bool worldPivotShift = !m_Fractorium->LocalPivot() && GetShift();
if ((m_DragModifier & DragModShift) == DragModShift) if (GetShift())
{ {
v3T norm = glm::normalize(m_MouseWorldPos); v3T norm = glm::normalize(m_MouseWorldPos);
if ((m_DragModifier & DragModControl) == DragModControl) if (GetControl())
norm = SnapToNormalizedAngle(norm, 12); norm = SnapToNormalizedAngle(norm, 12);
newPos = glm::length(m_DragSrcTransform.O()) * norm; newPos = glm::length(m_DragSrcTransform.O()) * norm;
@ -1420,13 +1386,12 @@ Affine2D<T> GLEmberController<T>::CalcDragTranslation()
T startAngle = atan2(m_DragSrcTransform.O().y, m_DragSrcTransform.O().x); T startAngle = atan2(m_DragSrcTransform.O().y, m_DragSrcTransform.O().x);
T endAngle = atan2(newPos.y, newPos.x); T endAngle = atan2(newPos.y, newPos.x);
T angle = startAngle - endAngle; T angle = startAngle - endAngle;
result.Rotate(angle * RAD_2_DEG); result.Rotate(angle * RAD_2_DEG);
} }
} }
else else
{ {
if ((m_DragModifier & DragModControl) == DragModControl) if (GetControl())
newPos = SnapToGrid(m_MouseWorldPos); newPos = SnapToGrid(m_MouseWorldPos);
else else
newPos = m_MouseWorldPos + m_DragHandleOffset; newPos = m_MouseWorldPos + m_DragHandleOffset;
@ -1434,7 +1399,6 @@ Affine2D<T> GLEmberController<T>::CalcDragTranslation()
result.O(v2T(newPos)); result.O(v2T(newPos));
m_DragHandlePos = newPos; m_DragHandlePos = newPos;
return result; return result;
} }
@ -1453,5 +1417,5 @@ GLEmberControllerBase* GLWidget::GLController()
template class GLEmberController<float>; template class GLEmberController<float>;
#ifdef DO_DOUBLE #ifdef DO_DOUBLE
template class GLEmberController<double>; template class GLEmberController<double>;
#endif #endif

View File

@ -10,12 +10,10 @@
/// <param name="f">The window flags. Default: 0.</param> /// <param name="f">The window flags. Default: 0.</param>
FractoriumVariationsDialog::FractoriumVariationsDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f) FractoriumVariationsDialog::FractoriumVariationsDialog(FractoriumSettings* settings, QWidget* p, Qt::WindowFlags f)
: QDialog(p, f), : QDialog(p, f),
m_Settings(settings) m_Settings(settings)
{ {
ui.setupUi(this); ui.setupUi(this);
auto table = ui.VariationsTable; auto table = ui.VariationsTable;
m_Vars = m_Settings->Variations(); m_Vars = m_Settings->Variations();
Populate(); Populate();
OnSelectAllButtonClicked(true); OnSelectAllButtonClicked(true);
@ -37,7 +35,6 @@ void FractoriumVariationsDialog::ForEachCell(std::function<void(QTableWidgetItem
auto table = ui.VariationsTable; auto table = ui.VariationsTable;
auto rows = table->rowCount(); auto rows = table->rowCount();
auto cols = table->columnCount(); auto cols = table->columnCount();
table->model()->blockSignals(true); table->model()->blockSignals(true);
for (auto row = 0; row < rows; row++) for (auto row = 0; row < rows; row++)
@ -57,10 +54,9 @@ void FractoriumVariationsDialog::ForEachSelectedCell(std::function<void(QTableWi
{ {
auto table = ui.VariationsTable; auto table = ui.VariationsTable;
QList<QTableWidgetItem*> selectedItems = table->selectedItems(); QList<QTableWidgetItem*> selectedItems = table->selectedItems();
table->model()->blockSignals(true); table->model()->blockSignals(true);
foreach(QTableWidgetItem* item, selectedItems) foreach (QTableWidgetItem* item, selectedItems)
if (item) if (item)
func(item); func(item);
@ -74,13 +70,11 @@ void FractoriumVariationsDialog::ForEachSelectedCell(std::function<void(QTableWi
void FractoriumVariationsDialog::SyncSettings() void FractoriumVariationsDialog::SyncSettings()
{ {
QMap<QString, QVariant> m; QMap<QString, QVariant> m;
ForEachCell([&](QTableWidgetItem * cb)
ForEachCell([&](QTableWidgetItem* cb)
{ {
if (!cb->text().isEmpty()) if (!cb->text().isEmpty())
m[cb->text()] = cb->checkState() == Qt::CheckState::Checked; m[cb->text()] = cb->checkState() == Qt::CheckState::Checked;
}); });
m_Settings->Variations(m); m_Settings->Variations(m);
} }
@ -100,7 +94,7 @@ const QMap<QString, QVariant>& FractoriumVariationsDialog::Map()
/// <param name="checked">Ignored</param> /// <param name="checked">Ignored</param>
void FractoriumVariationsDialog::OnSelectAllButtonClicked(bool checked) void FractoriumVariationsDialog::OnSelectAllButtonClicked(bool checked)
{ {
ForEachCell([&](QTableWidgetItem* cb) { cb->setCheckState(Qt::CheckState::Checked); }); ForEachCell([&](QTableWidgetItem * cb) { cb->setCheckState(Qt::CheckState::Checked); });
} }
/// <summary> /// <summary>
@ -109,7 +103,7 @@ void FractoriumVariationsDialog::OnSelectAllButtonClicked(bool checked)
/// <param name="checked">Ignored</param> /// <param name="checked">Ignored</param>
void FractoriumVariationsDialog::OnInvertSelectionButtonClicked(bool checked) void FractoriumVariationsDialog::OnInvertSelectionButtonClicked(bool checked)
{ {
ForEachCell([&](QTableWidgetItem* cb) ForEachCell([&](QTableWidgetItem * cb)
{ {
if (cb->checkState() != Qt::CheckState::Checked) if (cb->checkState() != Qt::CheckState::Checked)
cb->setCheckState(Qt::CheckState::Checked); cb->setCheckState(Qt::CheckState::Checked);
@ -124,7 +118,7 @@ void FractoriumVariationsDialog::OnInvertSelectionButtonClicked(bool checked)
/// <param name="checked">Ignored</param> /// <param name="checked">Ignored</param>
void FractoriumVariationsDialog::OnSelectNoneButtonClicked(bool checked) void FractoriumVariationsDialog::OnSelectNoneButtonClicked(bool checked)
{ {
ForEachCell([&](QTableWidgetItem* cb) { cb->setCheckState(Qt::CheckState::Unchecked); }); ForEachCell([&](QTableWidgetItem * cb) { cb->setCheckState(Qt::CheckState::Unchecked); });
} }
/// <summary> /// <summary>
@ -134,7 +128,6 @@ void FractoriumVariationsDialog::Populate()
{ {
auto table = ui.VariationsTable; auto table = ui.VariationsTable;
auto size = std::max<size_t>(std::max<size_t>(m_VariationList.RegSize(), m_VariationList.PreSize()), m_VariationList.PostSize()); auto size = std::max<size_t>(std::max<size_t>(m_VariationList.RegSize(), m_VariationList.PreSize()), m_VariationList.PostSize());
table->setRowCount(size); table->setRowCount(size);
for (size_t i = 0; i < size; i++) for (size_t i = 0; i < size; i++)
@ -174,7 +167,7 @@ void FractoriumVariationsDialog::OnVariationsTableItemChanged(QTableWidgetItem*
bool ctrl = QGuiApplication::keyboardModifiers().testFlag(Qt::ControlModifier); bool ctrl = QGuiApplication::keyboardModifiers().testFlag(Qt::ControlModifier);
if (ctrl) if (ctrl)
ForEachSelectedCell([&](QTableWidgetItem* cb) { cb->setCheckState(item->checkState()); }); ForEachSelectedCell([&](QTableWidgetItem * cb) { cb->setCheckState(item->checkState()); });
} }
/// <summary> /// <summary>
@ -213,7 +206,7 @@ void FractoriumVariationsDialog::showEvent(QShowEvent* e)
/// </summary> /// </summary>
void FractoriumVariationsDialog::DataToGui() void FractoriumVariationsDialog::DataToGui()
{ {
ForEachCell([&](QTableWidgetItem* cb) ForEachCell([&](QTableWidgetItem * cb)
{ {
if (auto var = m_VariationList.GetVariation(cb->text().toStdString())) if (auto var = m_VariationList.GetVariation(cb->text().toStdString()))
SetCheckFromMap(cb, var); SetCheckFromMap(cb, var);
@ -225,7 +218,7 @@ void FractoriumVariationsDialog::DataToGui()
/// </summary> /// </summary>
void FractoriumVariationsDialog::GuiToData() void FractoriumVariationsDialog::GuiToData()
{ {
ForEachCell([&](QTableWidgetItem* cb) ForEachCell([&](QTableWidgetItem * cb)
{ {
if (auto var = m_VariationList.GetVariation(cb->text().toStdString())) if (auto var = m_VariationList.GetVariation(cb->text().toStdString()))
m_Vars[cb->text()] = (cb->checkState() == Qt::Checked); m_Vars[cb->text()] = (cb->checkState() == Qt::Checked);
@ -247,7 +240,6 @@ void FractoriumVariationsDialog::SetCheckFromMap(QTableWidgetItem* cb, const Var
else else
{ {
bool chk = m_Vars[var->Name().c_str()].toBool(); bool chk = m_Vars[var->Name().c_str()].toBool();
cb->setCheckState(chk ? Qt::Checked : Qt::Unchecked); cb->setCheckState(chk ? Qt::Checked : Qt::Unchecked);
} }
} }