--User changes

-Add post_smartcrop.

--Bug fixes
 -Fix bug in crackle.
 -Wrong point assignment in hexaplay3D, hexnix3D.
 -Improper Z assignment in rblur.
 -Fix inconsistency with original in circlecrop.
 -Put EMBER_ROOT bakc to ./../../../ in default.pri. This is TBD.

--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.
 -Optimize crob, nBlur.
 -Fix weird assignment statement in falloff3.
 -Cleanup in VarFuncs::SimplexNoise3D().
 -Replace fabs() with std::abs().
 -General cleanup.
This commit is contained in:
mfeemster 2016-01-12 20:42:12 -08:00
parent a8688e87b5
commit a3ecbbf690
22 changed files with 1402 additions and 1546 deletions

View File

@ -11,7 +11,10 @@ unix|macx {
} }
# When loaded by QtCreator # When loaded by QtCreator
EMBER_ROOT = $$(PWD)/../../.. #This cannot be this...
#EMBER_ROOT = $$(PWD)/../../..
#It must be this...
EMBER_ROOT = ./../../../
# When compiling from project root # When compiling from project root
autobuild { autobuild {
@ -28,11 +31,11 @@ LOCAL_INCLUDE_DIR = $$(PWD)/../../include
CONFIG(release, debug|release) { CONFIG(release, debug|release) {
CONFIG += warn_off CONFIG += warn_off
DESTDIR = $$(PWD)/../../../Bin/release DESTDIR = $$EMBER_ROOT/Bin/release
} }
CONFIG(debug, debug|release) { CONFIG(debug, debug|release) {
DESTDIR = $$(PWD)/../../../Bin/debug DESTDIR = $$EMBER_ROOT/Bin/debug
} }
macx { macx {

Binary file not shown.

View File

@ -379,6 +379,7 @@ uint Timing::m_ProcessorCount;
EXPORTPREPOSTREGVAR(BubbleT3D, T) \ EXPORTPREPOSTREGVAR(BubbleT3D, T) \
EXPORTPREPOSTREGVAR(Synth, T) \ EXPORTPREPOSTREGVAR(Synth, T) \
EXPORTPREPOSTREGVAR(Crackle, T) \ EXPORTPREPOSTREGVAR(Crackle, T) \
template EMBER_API class PostSmartcropVariation<T>; /*Only implemented as post.*/ \
EXPORTPREPOSTREGVAR(DCBubble, T) \ EXPORTPREPOSTREGVAR(DCBubble, T) \
EXPORTPREPOSTREGVAR(DCCarpet, T) \ EXPORTPREPOSTREGVAR(DCCarpet, T) \
EXPORTPREPOSTREGVAR(DCCube, T) \ EXPORTPREPOSTREGVAR(DCCube, T) \

View File

@ -704,7 +704,7 @@ static inline T Spread(T x, T y)
template <typename T> template <typename T>
static inline T Powq4(T x, T y) static inline T Powq4(T x, T y)
{ {
return std::pow(std::fabs(x), y) * SignNz(x); return std::pow(std::abs(x), y) * SignNz(x);
} }
/// <summary> /// <summary>

View File

@ -92,11 +92,11 @@ public:
T t; // Temp double T t; // Temp double
// Convert input co-ordinates ( x, y, z ) to // Convert input co-ordinates ( x, y, z ) to
// integer-based simplex grid ( i, j, k ) // integer-based simplex grid ( i, j, k )
T skewIn = (v.x + v.y + v.z) * T(0.3333); T skewIn = (v.x + v.y + v.z) * T(0.333333);
intmax_t i = Floor<T>(v.x + skewIn); intmax_t i = Floor<T>(v.x + skewIn);
intmax_t j = Floor<T>(v.y + skewIn); intmax_t j = Floor<T>(v.y + skewIn);
intmax_t k = Floor<T>(v.z + skewIn); intmax_t k = Floor<T>(v.z + skewIn);
t = (i + j + k) * T(0.16666); t = (i + j + k) * T(0.1666666);
// Cell origin co-ordinates in input space (x,y,z) // Cell origin co-ordinates in input space (x,y,z)
T x0 = i - t; T x0 = i - t;
T y0 = j - t; T y0 = j - t;
@ -154,17 +154,17 @@ public:
// A step of 1i in (i,j,k) is a step of (1-T(0.16666), -T(0.16666), -T(0.16666)) in (x,y,z), // A step of 1i in (i,j,k) is a step of (1-T(0.16666), -T(0.16666), -T(0.16666)) in (x,y,z),
// and this is similar for j and k . . . // and this is similar for j and k . . .
// Offsets for second corner in (x,y,z) coords // Offsets for second corner in (x,y,z) coords
c[1].x = c[0].x - i1 + T(0.16666); c[1].x = c[0].x - i1 + T(0.1666666);
c[1].y = c[0].y - j1 + T(0.16666); c[1].y = c[0].y - j1 + T(0.1666666);
c[1].z = c[0].z - k1 + T(0.16666); c[1].z = c[0].z - k1 + T(0.1666666);
// Offsets for third corner in (x,y,z) coords // Offsets for third corner in (x,y,z) coords
c[2].x = c[0].x - i2 + 2 * T(0.16666); c[2].x = c[0].x - i2 + 2 * T(0.1666666);
c[2].y = c[0].y - j2 + 2 * T(0.16666); c[2].y = c[0].y - j2 + 2 * T(0.1666666);
c[2].z = c[0].z - k2 + 2 * T(0.16666); c[2].z = c[0].z - k2 + 2 * T(0.1666666);
// Offsets for last corner in (x,y,z) coords // Offsets for last corner in (x,y,z) coords
c[3].x = c[0].x - 1 + 3 * T(0.16666); c[3].x = c[0].x - 1 + 3 * T(0.1666666);
c[3].y = c[0].y - 1 + 3 * T(0.16666); c[3].y = c[0].y - 1 + 3 * T(0.1666666);
c[3].z = c[0].z - 1 + 3 * T(0.16666); c[3].z = c[0].z - 1 + 3 * T(0.1666666);
// Work out the hashed gradient indices of the four simplex corners // Work out the hashed gradient indices of the four simplex corners
int ii = i & 0x3ff; int ii = i & 0x3ff;
int jj = j & 0x3ff; int jj = j & 0x3ff;
@ -175,9 +175,9 @@ public:
gi[3] = m_P[ii + 1 + m_P[jj + 1 + m_P[kk + 1]]]; gi[3] = m_P[ii + 1 + m_P[jj + 1 + m_P[kk + 1]]];
// Calculate the contribution from the four corners, and add to total // Calculate the contribution from the four corners, and add to total
for (int corner = 0; corner < 4; corner++) for (uint corner = 0u; corner < 4u; corner++)
{ {
t = T(0.6) - c[corner].x * c[corner].x - c[corner].y * c[corner].y - c[corner].z * c[corner].z; t = T(0.6) - Sqr(c[corner].x) - Sqr(c[corner].y) - Sqr(c[corner].z);
if (t > 0) if (t > 0)
{ {
@ -202,13 +202,12 @@ public:
/// <returns>T</returns> /// <returns>T</returns>
T PerlinNoise3D(v3T& v, T aScale, T fScale, int octaves) T PerlinNoise3D(v3T& v, T aScale, T fScale, int octaves)
{ {
int i;
T n = 0, a = 1; T n = 0, a = 1;
v3T u = v; v3T u = v;
for (i = 0; i < octaves; i++) for (int i = 0; i < octaves; i++)
{ {
n += SimplexNoise3D(u) / a; n += SimplexNoise3D(u) / Zeps(a);
a *= aScale; a *= aScale;
u.x *= fScale; u.x *= fScale;
u.y *= fScale; u.y *= fScale;
@ -253,22 +252,20 @@ public:
{ {
v2T pmq = p - q; v2T pmq = p - q;
if (pmq.x == 0 || pmq.y == 0) if (pmq.x == 0 && pmq.y == 0)
return 1; return 1;
return 2 * ((u.x - q.x) * pmq.x + (u.y - q.y) * pmq.y) / (pmq.x * pmq.x + pmq.y * pmq.y); return 2 * ((u.x - q.x) * pmq.x + (u.y - q.y) * pmq.y) / (SQR(pmq.x) + SQR(pmq.y));
} }
/// <summary> /// <summary>
/// Unsure. /// Unsure.
/// </summary> /// </summary>
static T Voronoi(v2T* p, int n, int q, v2T& u) static T Voronoi(v2T* p, int n, int q, const v2T& u)
{ {
T ratio; T ratio, ratiomax = TLOW;
T ratiomax = TLOW;
int i;
for (i = 0; i < n; i++) for (int i = 0; i < n; i++)
{ {
if (i != q) if (i != q)
{ {

View File

@ -914,7 +914,7 @@ enum class eVariationId : et
VAR_POST_SINUS_GRID, VAR_POST_SINUS_GRID,
VAR_POST_SINUSOIDAL, VAR_POST_SINUSOIDAL,
VAR_POST_SINUSOIDAL3D, VAR_POST_SINUSOIDAL3D,
//VAR_POST_SMARTCROP, VAR_POST_SMARTCROP,
VAR_POST_SPHERICAL, VAR_POST_SPHERICAL,
VAR_POST_SPHERICAL3D, VAR_POST_SPHERICAL3D,
VAR_POST_SPHERICALN, VAR_POST_SPHERICALN,

View File

@ -342,6 +342,7 @@ public:
ADDPREPOSTREGVAR(BubbleT3D) ADDPREPOSTREGVAR(BubbleT3D)
ADDPREPOSTREGVAR(Synth) ADDPREPOSTREGVAR(Synth)
ADDPREPOSTREGVAR(Crackle) ADDPREPOSTREGVAR(Crackle)
m_Variations.push_back(new PostSmartcropVariation<T>());//Post only
//ADDPREPOSTREGVAR(LinearXZ) //ADDPREPOSTREGVAR(LinearXZ)
//ADDPREPOSTREGVAR(LinearYZ) //ADDPREPOSTREGVAR(LinearYZ)
//DC are special. //DC are special.

View File

@ -1659,7 +1659,7 @@ public:
virtual void Precalc() override virtual void Precalc() override
{ {
m_Power = Zeps(m_Power); m_Power = Zeps(m_Power);
m_Rn = fabs(m_Power); m_Rn = std::abs(m_Power);
m_Cn = m_Dist / m_Power / 2; m_Cn = m_Dist / m_Power / 2;
} }
@ -1770,7 +1770,7 @@ public:
virtual void Precalc() override virtual void Precalc() override
{ {
m_Rn = fabs(m_Power); m_Rn = std::abs(m_Power);
m_Cn = m_Dist / m_Power / 2; m_Cn = m_Dist / m_Power / 2;
} }
@ -2566,7 +2566,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
{ {
T r = m_Weight / Zeps(fabs((helper.In.x - helper.In.y) * (helper.In.x + helper.In.y))); T r = m_Weight / Zeps(std::abs((helper.In.x - helper.In.y) * (helper.In.x + helper.In.y)));
helper.Out.x = helper.In.x * r; helper.Out.x = helper.In.x * r;
helper.Out.y = helper.In.y * r; helper.Out.y = helper.In.y * r;
helper.Out.z = m_Weight * helper.In.z; helper.Out.z = m_Weight * helper.In.z;
@ -2706,9 +2706,9 @@ 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
{ {
T theta = m_Pm4 * helper.m_PrecalcAtanyx + T(M_PI_4); T theta = m_Pm4 * helper.m_PrecalcAtanyx + T(M_PI_4);
T t1 = fabs(std::cos(theta)); T t1 = std::abs(std::cos(theta));
t1 = std::pow(t1, m_N2); t1 = std::pow(t1, m_N2);
T t2 = fabs(std::sin(theta)); T t2 = std::abs(std::sin(theta));
t2 = std::pow(t2, m_N3); t2 = std::pow(t2, m_N3);
T r = m_Weight * ((m_Rnd * rand.Frand01<T>() + (1 - m_Rnd) * helper.m_PrecalcSqrtSumSquares) - m_Holes) T r = m_Weight * ((m_Rnd * rand.Frand01<T>() + (1 - m_Rnd) * helper.m_PrecalcSqrtSumSquares) - m_Holes)
* std::pow(t1 + t2, m_PNeg1N1) / helper.m_PrecalcSqrtSumSquares; * std::pow(t1 + t2, m_PNeg1N1) / helper.m_PrecalcSqrtSumSquares;
@ -3235,7 +3235,7 @@ public:
} }
else else
{ {
if (fabs(offsetX) >= fabs(offsetY)) if (std::abs(offsetX) >= std::abs(offsetY))
{ {
if (offsetX >= 0.0) if (offsetX >= 0.0)
{ {
@ -3332,7 +3332,7 @@ public:
{ {
T wx = m_Weight * T(1.3029400317411197908970256609023);//This precision came from the original. T wx = m_Weight * T(1.3029400317411197908970256609023);//This precision came from the original.
T y2 = helper.In.y * 2; T y2 = helper.In.y * 2;
T r = wx * std::sqrt(fabs(helper.In.y * helper.In.x) / Zeps(SQR(helper.In.x) + SQR(y2))); T r = wx * std::sqrt(std::abs(helper.In.y * helper.In.x) / Zeps(SQR(helper.In.x) + SQR(y2)));
helper.Out.x = r * helper.In.x; helper.Out.x = r * helper.In.x;
helper.Out.y = r * y2; helper.Out.y = r * y2;
helper.Out.z = m_Weight * helper.In.z; helper.Out.z = m_Weight * helper.In.z;
@ -4263,9 +4263,9 @@ public:
if (m_Damping == 0.0) if (m_Damping == 0.0)
t = m_Amplitude * std::cos(m_2PiFreq * helper.In.x) + m_Separation; t = m_Amplitude * std::cos(m_2PiFreq * helper.In.x) + m_Separation;
else else
t = m_Amplitude * std::exp(-fabs(helper.In.x) * m_Damping) * std::cos(m_2PiFreq * helper.In.x) + m_Separation; t = m_Amplitude * std::exp(-std::abs(helper.In.x) * m_Damping) * std::cos(m_2PiFreq * helper.In.x) + m_Separation;
if (fabs(helper.In.y) <= t) if (std::abs(helper.In.y) <= t)
{ {
helper.Out.x = m_Weight * helper.In.x; helper.Out.x = m_Weight * helper.In.x;
helper.Out.y = -(m_Weight * helper.In.y); helper.Out.y = -(m_Weight * helper.In.y);
@ -4984,7 +4984,7 @@ public:
virtual void Precalc() override virtual void Precalc() override
{ {
m_Cf = 1 - m_Angle * m_Count * T(M_1_PI) * T(0.5); m_Cf = 1 - m_Angle * m_Count * T(M_1_PI) * T(0.5);
m_Rn = fabs(m_Power); m_Rn = std::abs(m_Power);
m_Cn = m_Dist / m_Power / 2; m_Cn = m_Dist / m_Power / 2;
} }
@ -5835,8 +5835,8 @@ public:
{ {
T s = std::sin(m_Freq * helper.In.x); T s = std::sin(m_Freq * helper.In.x);
T t = std::sin(m_Freq * helper.In.y); T t = std::sin(m_Freq * helper.In.y);
T dy = helper.In.y + m_AugerWeight * (m_Scale * s / 2 + fabs(helper.In.y) * s); T dy = helper.In.y + m_AugerWeight * (m_Scale * s / 2 + std::abs(helper.In.y) * s);
T dx = helper.In.x + m_AugerWeight * (m_Scale * t / 2 + fabs(helper.In.x) * t); T dx = helper.In.x + m_AugerWeight * (m_Scale * t / 2 + std::abs(helper.In.x) * t);
helper.Out.x = m_Weight * (helper.In.x + m_Symmetry * (dx - helper.In.x)); helper.Out.x = m_Weight * (helper.In.x + m_Symmetry * (dx - helper.In.x));
helper.Out.y = m_Weight * dy; helper.Out.y = m_Weight * dy;
helper.Out.z = m_Weight * helper.In.z; helper.Out.z = m_Weight * helper.In.z;

File diff suppressed because it is too large Load Diff

View File

@ -428,7 +428,7 @@ public:
} }
else else
{ {
T alpha = fabs(m_Radius / Zeps(helper.m_PrecalcSqrtSumSquares));//Original did not fabs(). T alpha = std::abs(m_Radius / Zeps(helper.m_PrecalcSqrtSumSquares));//Original did not std::abs().
if (rand.Frand01<T>() > m_Contrast * std::pow(alpha, m_Pow)) if (rand.Frand01<T>() > m_Contrast * std::pow(alpha, m_Pow))
{ {
@ -543,7 +543,7 @@ public:
T val = DEG_2_RAD_T * m_Phi1; T val = DEG_2_RAD_T * m_Phi1;
T sinPhi1 = std::sin(val); T sinPhi1 = std::sin(val);
T cosPhi1 = std::cos(val); T cosPhi1 = std::cos(val);
m_Pow = fabs(m_Pow); m_Pow = std::abs(m_Pow);
m_X1 = m_Radius * cosPhi1; m_X1 = m_Radius * cosPhi1;
m_Y1 = m_Radius * sinPhi1; m_Y1 = m_Radius * sinPhi1;
} }
@ -610,7 +610,7 @@ public:
} }
else else
{ {
T alpha = fabs(m_Radius / Zeps(helper.m_PrecalcSqrtSumSquares));//Original did not fabs(). T alpha = std::abs(m_Radius / Zeps(helper.m_PrecalcSqrtSumSquares));//Original did not std::abs().
if (rand.Frand01<T>() > m_Contrast * std::pow(alpha, m_Pow)) if (rand.Frand01<T>() > m_Contrast * std::pow(alpha, m_Pow))
{ {
@ -696,7 +696,7 @@ public:
virtual void Precalc() override virtual void Precalc() override
{ {
m_Pow = fabs(m_Pow); m_Pow = std::abs(m_Pow);
m_Phi10 = T(M_PI) * m_Phi1 / 180; m_Phi10 = T(M_PI) * m_Phi1 / 180;
m_Phi20 = T(M_PI) * m_Phi2 / 180; m_Phi20 = T(M_PI) * m_Phi2 / 180;
m_Gamma = m_Thickness * (2 * m_Radius + m_Thickness) / Zeps(m_Radius + m_Thickness); m_Gamma = m_Thickness * (2 * m_Radius + m_Thickness) / Zeps(m_Radius + m_Thickness);
@ -769,7 +769,7 @@ public:
} }
else else
{ {
T alpha = fabs(m_Radius / Zeps(helper.m_PrecalcSqrtSumSquares));//Original did not fabs(). T alpha = std::abs(m_Radius / Zeps(helper.m_PrecalcSqrtSumSquares));//Original did not std::abs().
if (rand.Frand01<T>() > m_Contrast * std::pow(alpha, m_Pow)) if (rand.Frand01<T>() > m_Contrast * std::pow(alpha, m_Pow))
{ {
@ -1108,7 +1108,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
{ {
T coeff = fabs(helper.In.z); T coeff = std::abs(helper.In.z);
if (coeff != 0 && m_Power != 1) if (coeff != 0 && m_Power != 1)
coeff = std::exp(log(coeff) * m_Power); coeff = std::exp(log(coeff) * m_Power);
@ -1492,7 +1492,7 @@ public:
virtual void Precalc() override virtual void Precalc() override
{ {
m_AbsN = fabs(m_N); m_AbsN = std::abs(m_N);
m_Cn = (1 / m_N - 1) / 2; m_Cn = (1 / m_N - 1) / 2;
} }
@ -1565,7 +1565,7 @@ public:
virtual void Precalc() override virtual void Precalc() override
{ {
m_AbsN = fabs(m_N); m_AbsN = std::abs(m_N);
m_Cn = 1 / m_N / 2; m_Cn = 1 / m_N / 2;
} }
@ -1609,8 +1609,8 @@ 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
{ {
helper.Out.x = SignNz<T>(helper.In.x) * std::pow(fabs(helper.In.x), m_PowX) * m_Weight; helper.Out.x = SignNz<T>(helper.In.x) * std::pow(std::abs(helper.In.x), m_PowX) * m_Weight;
helper.Out.y = SignNz<T>(helper.In.y) * std::pow(fabs(helper.In.y), m_PowY) * m_Weight; helper.Out.y = SignNz<T>(helper.In.y) * std::pow(std::abs(helper.In.y), m_PowY) * m_Weight;
helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z; helper.Out.z = (m_VarType == eVariationType::VARTYPE_REG) ? 0 : helper.In.z;
} }
@ -1665,9 +1665,9 @@ 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
{ {
helper.Out.x = T(helper.In.x < 0 ? -1 : 1) * std::pow(fabs(helper.In.x), m_PowX) * m_Weight; helper.Out.x = T(helper.In.x < 0 ? -1 : 1) * std::pow(std::abs(helper.In.x), m_PowX) * m_Weight;
helper.Out.y = T(helper.In.y < 0 ? -1 : 1) * std::pow(fabs(helper.In.y), m_PowY) * m_Weight; helper.Out.y = T(helper.In.y < 0 ? -1 : 1) * std::pow(std::abs(helper.In.y), m_PowY) * m_Weight;
helper.Out.z = T(helper.In.z < 0 ? -1 : 1) * std::pow(fabs(helper.In.z), m_PowZ) * m_Weight; helper.Out.z = T(helper.In.z < 0 ? -1 : 1) * std::pow(std::abs(helper.In.z), m_PowZ) * m_Weight;
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -2592,7 +2592,7 @@ public:
virtual void Precalc() override virtual void Precalc() override
{ {
if (fabs(m_Power) < 1) if (std::abs(m_Power) < 1)
m_Power = 1; m_Power = 1;
} }
@ -2951,7 +2951,7 @@ public:
if (t < 0) if (t < 0)
t -= m_SizeDiv2; t -= m_SizeDiv2;
t = fmod(fabs(t), m_Size); t = fmod(std::abs(t), m_Size);
if (t < m_SizeDiv2) if (t < m_SizeDiv2)
a += m_Even; a += m_Even;
@ -3556,15 +3556,15 @@ public:
{ {
T x, c2; T x, c2;
if (fabs(helper.In.y) <= m_Weight) if (std::abs(helper.In.y) <= m_Weight)
{ {
c2 = std::sqrt(SQR(m_Weight) - SQR(helper.In.y)); c2 = std::sqrt(SQR(m_Weight) - SQR(helper.In.y));
if (fabs(helper.In.x) <= c2) if (std::abs(helper.In.x) <= c2)
{ {
x = helper.In.x + m_Shift * m_Weight; x = helper.In.x + m_Shift * m_Weight;
if (fabs(x) >= c2) if (std::abs(x) >= c2)
helper.Out.x = -(m_Weight * helper.In.x); helper.Out.x = -(m_Weight * helper.In.x);
else else
helper.Out.x = m_Weight * x; helper.Out.x = m_Weight * x;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -42,7 +42,7 @@ public:
T tempX = helper.Out.x + sumX; T tempX = helper.Out.x + sumX;
T tempY = helper.Out.y + sumY; T tempY = helper.Out.y + sumY;
outPoint.m_ColorX = fmod(fabs(m_Bdcs * (Sqr<T>(tempX + m_CenterX) + Sqr<T>(tempY + m_CenterY))), T(1.0)); outPoint.m_ColorX = fmod(std::abs(m_Bdcs * (Sqr<T>(tempX + m_CenterX) + Sqr<T>(tempY + m_CenterY))), T(1.0));
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -141,7 +141,7 @@ public:
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 == eVariationType::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(std::abs(outPoint.m_ColorX * T(0.5) * (1 + h) + x0_xor_y0 * (1 - h) * T(0.5)), T(1.0));
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -415,7 +415,7 @@ public:
T tempX = helper.Out.x + sumX; T tempX = helper.Out.x + sumX;
T tempY = helper.Out.y + sumY; T tempY = helper.Out.y + sumY;
outPoint.m_ColorX = fmod(fabs(T(0.5) * (m_Ldcs * ((m_Cosa * tempX + m_Sina * tempY + m_Offset)) + 1)), T(1.0)); outPoint.m_ColorX = fmod(std::abs(T(0.5) * (m_Ldcs * ((m_Cosa * tempX + m_Sina * tempY + m_Offset)) + 1)), T(1.0));
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -715,7 +715,7 @@ public:
T tempX = helper.Out.x + sumX; T tempX = helper.Out.x + sumX;
T tempY = helper.Out.y + sumY; T tempY = helper.Out.y + sumY;
outPoint.m_ColorX = fmod(fabs(T(0.5) * (m_Ldcs * ((m_Cosa * tempX + m_Sina * tempY + m_Offset)) + T(1.0))), T(1.0)); outPoint.m_ColorX = fmod(std::abs(T(0.5) * (m_Ldcs * ((m_Cosa * tempX + m_Sina * tempY + m_Offset)) + T(1.0))), T(1.0));
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override
@ -885,7 +885,7 @@ public:
helper.Out.x = m_Weight * (ox + u * xx + v * yx); helper.Out.x = m_Weight * (ox + u * xx + v * yx);
helper.Out.y = m_Weight * (oy + u * xy + v * yy); helper.Out.y = m_Weight * (oy + u * xy + v * yy);
helper.Out.z = m_Weight * helper.In.z; helper.Out.z = m_Weight * helper.In.z;
outPoint.m_ColorX = fmod(fabs(u + v), T(1.0)); outPoint.m_ColorX = fmod(std::abs(u + v), T(1.0));
} }
virtual string OpenCLString() const override virtual string OpenCLString() const override

View File

@ -174,6 +174,17 @@ public:
m_BadParamNames["exponentZ"] = "bubbleT3D_exponentZ"; m_BadParamNames["exponentZ"] = "bubbleT3D_exponentZ";
m_BadParamNames["_symmetryZ"] = "bubbleT3D_symmetryZ"; m_BadParamNames["_symmetryZ"] = "bubbleT3D_symmetryZ";
m_BadParamNames["_modusBlur"] = "bubbleT3D_modusBlur"; m_BadParamNames["_modusBlur"] = "bubbleT3D_modusBlur";
m_BadParamNames["post_scrop_power"] = "post_smartcrop_power";
m_BadParamNames["post_scrop_radius"] = "post_smartcrop_radius";
m_BadParamNames["post_scrop_roundstr"] = "post_smartcrop_roundstr";
m_BadParamNames["post_scrop_roundwidth"] = "post_smartcrop_roundwidth";
m_BadParamNames["post_scrop_distortion"] = "post_smartcrop_distortion";
m_BadParamNames["post_scrop_edge"] = "post_smartcrop_edge";
m_BadParamNames["post_scrop_scatter"] = "post_smartcrop_scatter";
m_BadParamNames["post_scrop_offset"] = "post_smartcrop_offset";
m_BadParamNames["post_scrop_rotation"] = "post_smartcrop_rotation";
m_BadParamNames["post_scrop_cropmode"] = "post_smartcrop_cropmode";
m_BadParamNames["post_scrop_static"] = "post_smartcrop_static";
m_FlattenNames.reserve(24); m_FlattenNames.reserve(24);
m_FlattenNames.push_back("pre_crop"); m_FlattenNames.push_back("pre_crop");
m_FlattenNames.push_back("pre_falloff2"); m_FlattenNames.push_back("pre_falloff2");
@ -201,7 +212,7 @@ public:
m_FlattenNames.push_back("curl3D_cz"); m_FlattenNames.push_back("curl3D_cz");
//This is a vector of the param names as they are in the legacy, badly named flam3/Apophysis code. //This is a vector of the param names as they are in the legacy, badly named flam3/Apophysis code.
vector<string> badParams; vector<string> badParams;
badParams.reserve(6); badParams.reserve(11);
badParams.push_back("bwraps7_cellsize"); badParams.push_back("bwraps7_cellsize");
badParams.push_back("bwraps7_space"); badParams.push_back("bwraps7_space");
badParams.push_back("bwraps7_gain"); badParams.push_back("bwraps7_gain");
@ -245,6 +256,19 @@ public:
badParams.push_back("post_dcztransl_clamp"); badParams.push_back("post_dcztransl_clamp");
m_BadVariationNames.push_back(make_pair(make_pair(string("post_dcztransl"), string("post_dc_ztransl")), badParams)); m_BadVariationNames.push_back(make_pair(make_pair(string("post_dcztransl"), string("post_dc_ztransl")), badParams));
badParams.clear(); badParams.clear();
badParams.push_back("post_scrop_power");
badParams.push_back("post_scrop_radius");
badParams.push_back("post_scrop_roundstr");
badParams.push_back("post_scrop_roundwidth");
badParams.push_back("post_scrop_distortion");
badParams.push_back("post_scrop_edge");
badParams.push_back("post_scrop_scatter");
badParams.push_back("post_scrop_offset");
badParams.push_back("post_scrop_rotation");
badParams.push_back("post_scrop_cropmode");
badParams.push_back("post_scrop_static");
m_BadVariationNames.push_back(make_pair(make_pair(string("post_scrop"), string("post_smartcrop")), badParams));
badParams.clear();
m_BadVariationNames.push_back(make_pair(make_pair(string("pre_blur"), string("pre_gaussian_blur")), badParams));//No other special params for these. m_BadVariationNames.push_back(make_pair(make_pair(string("pre_blur"), string("pre_gaussian_blur")), badParams));//No other special params for these.
m_BadVariationNames.push_back(make_pair(make_pair(string("pre_spin_z"), string("pre_rotate_z")), badParams)); m_BadVariationNames.push_back(make_pair(make_pair(string("pre_spin_z"), string("pre_rotate_z")), badParams));
m_BadVariationNames.push_back(make_pair(make_pair(string("post_spin_z"), string("post_rotate_z")), badParams)); m_BadVariationNames.push_back(make_pair(make_pair(string("post_spin_z"), string("post_rotate_z")), badParams));

View File

@ -120,15 +120,12 @@ FunctionMapper::FunctionMapper()
m_GlobalMap["Vratio"] = m_GlobalMap["Vratio"] =
"inline real_t Vratio(real2* p, real2* q, real2* u)\n" "inline real_t Vratio(real2* p, real2* q, real2* u)\n"
"{\n" "{\n"
" real_t pmQx, pmQy;\n" " real2 pmq = *p - *q;\n"
"\n" "\n"
" pmQx = (*p).x - (*q).x;\n" " if (pmq.x == 0 && pmq.y == 0)\n"
" pmQy = (*p).y - (*q).y;\n"
"\n"
" if (pmQx == 0 && pmQy == 0)\n"
" return 1.0;\n" " return 1.0;\n"
"\n" "\n"
" return 2 * (((*u).x - (*q).x) * pmQx + ((*u).y - (*q).y) * pmQy) / (pmQx * pmQx + pmQy * pmQy);\n" " return 2 * (((*u).x - (*q).x) * pmq.x + ((*u).y - (*q).y) * pmq.y) / (SQR(pmq.x) + SQR(pmq.y));\n"
"}\n"; "}\n";
m_GlobalMap["Closest"] = m_GlobalMap["Closest"] =
"inline int Closest(real2* p, int n, real2* u)\n" "inline int Closest(real2* p, int n, real2* u)\n"
@ -177,11 +174,11 @@ FunctionMapper::FunctionMapper()
" real_t n = 0;\n" " real_t n = 0;\n"
" int gi[4];\n" " int gi[4];\n"
" real_t t;\n" " real_t t;\n"
" real_t skewIn = ((*v).x + (*v).y + (*v).z) * 0.3333;\n" " real_t skewIn = ((*v).x + (*v).y + (*v).z) * 0.333333;\n"
" int i = (int)floor((*v).x + skewIn);\n" " int i = (int)floor((*v).x + skewIn);\n"
" int j = (int)floor((*v).y + skewIn);\n" " int j = (int)floor((*v).y + skewIn);\n"
" int k = (int)floor((*v).z + skewIn);\n" " int k = (int)floor((*v).z + skewIn);\n"
" t = (i + j + k) * 0.16666;\n" " t = (i + j + k) * 0.1666666;\n"
" real_t x0 = i - t;\n" " real_t x0 = i - t;\n"
" real_t y0 = j - t;\n" " real_t y0 = j - t;\n"
" real_t z0 = k - t;\n" " real_t z0 = k - t;\n"
@ -228,15 +225,15 @@ FunctionMapper::FunctionMapper()
" }\n" " }\n"
" }\n" " }\n"
"\n" "\n"
" c[1].x = c[0].x - i1 + 0.16666;\n" " c[1].x = c[0].x - i1 + 0.1666666;\n"
" c[1].y = c[0].y - j1 + 0.16666;\n" " c[1].y = c[0].y - j1 + 0.1666666;\n"
" c[1].z = c[0].z - k1 + 0.16666;\n" " c[1].z = c[0].z - k1 + 0.1666666;\n"
" c[2].x = c[0].x - i2 + 2 * 0.16666;\n" " c[2].x = c[0].x - i2 + 2 * 0.1666666;\n"
" c[2].y = c[0].y - j2 + 2 * 0.16666;\n" " c[2].y = c[0].y - j2 + 2 * 0.1666666;\n"
" c[2].z = c[0].z - k2 + 2 * 0.16666;\n" " c[2].z = c[0].z - k2 + 2 * 0.1666666;\n"
" c[3].x = c[0].x - 1 + 3 * 0.16666;\n" " c[3].x = c[0].x - 1 + 3 * 0.1666666;\n"
" c[3].y = c[0].y - 1 + 3 * 0.16666;\n" " c[3].y = c[0].y - 1 + 3 * 0.1666666;\n"
" c[3].z = c[0].z - 1 + 3 * 0.16666;\n" " c[3].z = c[0].z - 1 + 3 * 0.1666666;\n"
" int ii = i & 0x3ff;\n" " int ii = i & 0x3ff;\n"
" int jj = j & 0x3ff;\n" " int jj = j & 0x3ff;\n"
" int kk = k & 0x3ff;\n" " int kk = k & 0x3ff;\n"
@ -246,7 +243,7 @@ FunctionMapper::FunctionMapper()
" gi[3] = (int)p[ii + 1 + (int)p[jj + 1 + (int)p[kk + 1]]];\n" " gi[3] = (int)p[ii + 1 + (int)p[jj + 1 + (int)p[kk + 1]]];\n"
" for (uint corner = 0; corner < 4; corner++)\n" " for (uint corner = 0; corner < 4; corner++)\n"
" {\n" " {\n"
" t = 0.6 - c[corner].x * c[corner].x - c[corner].y * c[corner].y - c[corner].z * c[corner].z;\n" " t = 0.6 - Sqr(c[corner].x) - Sqr(c[corner].y) - Sqr(c[corner].z);\n"
"\n" "\n"
" if (t > 0)\n" " if (t > 0)\n"
" {\n" " {\n"
@ -267,7 +264,7 @@ FunctionMapper::FunctionMapper()
"\n" "\n"
" for (i = 0; i < octaves; i++)\n" " for (i = 0; i < octaves; i++)\n"
" {\n" " {\n"
" n += SimplexNoise3D(&u, p, grad) / a;\n" " n += SimplexNoise3D(&u, p, grad) / Zeps(a);\n"
" a *= aScale;\n" " a *= aScale;\n"
" u.x *= fScale;\n" " u.x *= fScale;\n"
" u.y *= fScale;\n" " u.y *= fScale;\n"

View File

@ -651,11 +651,8 @@ void IterOpenCLKernelCreator<T>::ParVarIndexDefines(const Ember<T>& ember, pair<
{ {
for (auto l = 0; l < elements; l++) for (auto l = 0; l < elements; l++)
params.second.push_back(*(parVar->Params()[k].Param() + l)); params.second.push_back(*(parVar->Params()[k].Param() + l));
//params.second.push_back(parVar->Params()[k].ParamVal());
} }
//size++;
size += elements; size += elements;
} }
} }

View File

@ -979,6 +979,7 @@ bool OpenCLWrapper::CreateSPK(const string& name, const string& program, const s
//err = spk.m_Program.build(m_DeviceVec, "-cl-single-precision-constant"); //err = spk.m_Program.build(m_DeviceVec, "-cl-single-precision-constant");
//err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-single-precision-constant"); //err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-single-precision-constant");
//err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-no-signed-zeros -cl-fast-relaxed-math -cl-single-precision-constant");//This can cause some rounding. //err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-no-signed-zeros -cl-fast-relaxed-math -cl-single-precision-constant");//This can cause some rounding.
//err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-no-signed-zeros -cl-single-precision-constant -cl-denorms-are-zero");
//err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-single-precision-constant"); //err = spk.m_Program.build(m_DeviceVec, "-cl-mad-enable -cl-single-precision-constant");
if (m_Info->CheckCL(err, "cl::Program::build()")) if (m_Info->CheckCL(err, "cl::Program::build()"))

View File

@ -1445,9 +1445,9 @@ void TestVarsSimilar()
varComp->Precalc(); varComp->Precalc();
varComp->Func(helper, pComp, rand); varComp->Func(helper, pComp, rand);
v4T varCompOut = helper.Out; v4T varCompOut = helper.Out;
xdiff += fabs(varOut.x - varCompOut.x); xdiff += std::abs(varOut.x - varCompOut.x);
ydiff += fabs(varOut.y - varCompOut.y); ydiff += std::abs(varOut.y - varCompOut.y);
zdiff += fabs(varOut.z - varCompOut.z); zdiff += std::abs(varOut.z - varCompOut.z);
} }
sum = (xdiff + ydiff + zdiff) / iters; sum = (xdiff + ydiff + zdiff) / iters;
@ -1578,9 +1578,9 @@ void TestCpuGpuResults(size_t platform, size_t device)
renderer.WritePoints(points); renderer.WritePoints(points);
renderer.Iterate(1, 0, 1); renderer.Iterate(1, 0, 1);
renderer.ReadPoints(points); renderer.ReadPoints(points);
T xdiff = fabs(p2.m_X - points[0].m_X); T xdiff = std::abs(p2.m_X - points[0].m_X);
T ydiff = fabs(p2.m_Y - points[0].m_Y); T ydiff = std::abs(p2.m_Y - points[0].m_Y);
T zdiff = fabs(p2.m_Z - points[0].m_Z); T zdiff = std::abs(p2.m_Z - points[0].m_Z);
if (xdiff > thresh || ydiff > thresh || zdiff > thresh) if (xdiff > thresh || ydiff > thresh || zdiff > thresh)
{ {
@ -1744,7 +1744,7 @@ void TestCross(T x, T y, T weight)
T outX = x * r; T outX = x * r;
T outY = y * r; T outY = y * r;
cout << "First way, outX, outY == " << outX << ", " << outY << endl; cout << "First way, outX, outY == " << outX << ", " << outY << endl;
r = fabs((x - y) * (x + y) + EPS); r = std::abs((x - y) * (x + y) + EPS);
if (r < 0) if (r < 0)
r = -r; r = -r;
@ -2015,7 +2015,7 @@ int _tmain(int argc, _TCHAR* argv[])
//cout << pow(-1, 5.1) << endl; //cout << pow(-1, 5.1) << endl;
/* for (i = 0; i < 2500000000; i++) /* for (i = 0; i < 2500000000; i++)
{ {
double d = fabs(RandD(rand)); double d = std::abs(RandD(rand));
if (d >= 0.5) if (d >= 0.5)
cout << d << endl; cout << d << endl;

View File

@ -224,8 +224,8 @@ void GLEmberController<T>::QueryMatrices(bool print)
if (renderer) if (renderer)
{ {
double unitX = fabs(renderer->UpperRightX(false) - renderer->LowerLeftX(false)) / 2.0; double unitX = std::abs(renderer->UpperRightX(false) - renderer->LowerLeftX(false)) / 2.0;
double unitY = fabs(renderer->UpperRightY(false) - renderer->LowerLeftY(false)) / 2.0; double unitY = std::abs(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();

View File

@ -222,8 +222,8 @@ void GLWidget::paintGL()
//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 = std::abs(renderer->UpperRightX(false) - renderer->LowerLeftX(false)) / 2.0f;
float unitY = fabs(renderer->UpperRightY(false) - renderer->LowerLeftY(false)) / 2.0f; float unitY = std::abs(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);
@ -840,8 +840,8 @@ bool GLEmberController<T>::SizesMatch()
void GLWidget::DrawGrid() void GLWidget::DrawGrid()
{ {
RendererBase* renderer = m_Fractorium->m_Controller->Renderer(); RendererBase* renderer = m_Fractorium->m_Controller->Renderer();
float unitX = fabs(renderer->UpperRightX(false) - renderer->LowerLeftX(false)) / 2.0f; float unitX = std::abs(renderer->UpperRightX(false) - renderer->LowerLeftX(false)) / 2.0f;
float unitY = fabs(renderer->UpperRightY(false) - renderer->LowerLeftY(false)) / 2.0f; float unitY = std::abs(renderer->UpperRightY(false) - renderer->LowerLeftY(false)) / 2.0f;
float rad = std::max(unitX, unitY); float rad = std::max(unitX, unitY);
float xLow = floor(-unitX); float xLow = floor(-unitX);
float xHigh = ceil(unitX); float xHigh = ceil(unitX);

View File

@ -57,7 +57,6 @@ private:
double weight1 = 0, weight2 = 0; double weight1 = 0, weight2 = 0;
VariationTreeWidgetItem* varItemWidget; VariationTreeWidgetItem* varItemWidget;
VariationTreeDoubleSpinBox* spinBox1, *spinBox2; VariationTreeDoubleSpinBox* spinBox1, *spinBox2;
auto itemWidget1 = treeWidget()->itemWidget(const_cast<VariationTreeWidgetItem*>(this), 1);//Get the widget for the second column. auto itemWidget1 = treeWidget()->itemWidget(const_cast<VariationTreeWidgetItem*>(this), 1);//Get the widget for the second column.
if ((spinBox1 = dynamic_cast<VariationTreeDoubleSpinBox*>(itemWidget1)))//Cast the widget to the VariationTreeDoubleSpinBox type. if ((spinBox1 = dynamic_cast<VariationTreeDoubleSpinBox*>(itemWidget1)))//Cast the widget to the VariationTreeDoubleSpinBox type.
@ -83,7 +82,7 @@ private:
if (IsNearZero(weight1) && IsNearZero(weight2)) if (IsNearZero(weight1) && IsNearZero(weight2))
return index1 > index2; return index1 > index2;
else else
return fabs(weight1) < fabs(weight2); return std::abs(weight1) < fabs(weight2);
} }
} }
} }