From b12cdc5da3fe7a5e73c13a99319a1ac04720ea72 Mon Sep 17 00:00:00 2001 From: Person Date: Wed, 15 May 2019 23:42:52 -0700 Subject: [PATCH] --Bug fixes -The variation unicorngaloshen was wrong. --Code changes -Add precalc optimizations for the following variations: starblur2, modulusx, modulusy, rotate, shift, waves3, waves4, waves23, waves42. --- Source/Ember/Variations07.h | 191 ++++++++++++++++++++++-------------- 1 file changed, 119 insertions(+), 72 deletions(-) diff --git a/Source/Ember/Variations07.h b/Source/Ember/Variations07.h index 5cae791..3a75df7 100644 --- a/Source/Ember/Variations07.h +++ b/Source/Ember/Variations07.h @@ -5160,7 +5160,7 @@ public: ff = f; T x = ff * m_Length; - T z = std::sqrt(1 + x * x - 2 * x * m_CosAlpha); + T z = Zeps(std::sqrt(1 + x * x - x * m_CosAlpha)); T angle_sign = (int_angle - Floor(k / 2) * 2) == 1 ? T(1) : T(-1); T final_angle = m_TwopiPower * int_angle + angle_sign * std::asin(m_SinAlpha * x / z) - T(M_PI_2); T z_scaled = z * std::sqrt(rand.Frand01() * m_OnemHoleSq + m_HoleSq); @@ -5211,7 +5211,7 @@ public: << "\t\t ff = f;\n" << "\n" << "\t\treal_t x = ff * " << length << ";\n" - << "\t\treal_t z = sqrt(1 + x * x - 2.0 * x * " << cosalpha << ");\n" + << "\t\treal_t z = Zeps(sqrt(1 + x * x - x * " << cosalpha << "));\n" << "\t\treal_t angle_sign = (int_angle - floor(k/2) * 2) == 1.0 ? 1.0 : -1.0;\n" << "\t\treal_t final_angle = " << twopipower << " * int_angle + angle_sign * asin(" << sinalpha << " * x / z) - MPI2;\n" << "\t\treal_t z_scaled = z * sqrt(fma(MwcNext01(mwc), " << onemholesq << ", " << holesq << "));\n" @@ -5232,7 +5232,12 @@ public: m_TwopiPower = (M_2PI / m_Power) * T(0.5); m_Power2 = m_Power * 2; m_SinAlpha = std::sin(m_Alpha); - m_CosAlpha = std::cos(m_Alpha); + m_CosAlpha = std::cos(m_Alpha) * 2; + } + + virtual vector OpenCLGlobalFuncNames() const override + { + return vector { "Zeps" }; } protected: @@ -5373,8 +5378,8 @@ public: virtual void Precalc() override { - T m_SinXFreqPi = T(M_PI) * m_SinXFreq; - T m_SinYFreqPi = T(M_PI) * m_SinYFreq; + m_SinXFreqPi = T(M_PI) * m_SinXFreq; + m_SinYFreqPi = T(M_PI) * m_SinYFreq; } virtual vector OpenCLGlobalFuncNames() const override @@ -6349,7 +6354,7 @@ public: virtual void Func(IteratorHelper& helper, Point& outPoint, QTIsaac& rand) override { - T fx = std::fmod(helper.In.x + m_X + m_Shift, 2 * m_X); + T fx = std::fmod(helper.In.x + m_X + m_Shift, m_X2); if (fx >= 0) helper.Out.x = m_Weight * (fx - m_X); @@ -6369,8 +6374,9 @@ public: string weight = WeightDefineString(); string x = "parVars[" + ToUpper(m_Params[i++].Name()) + index; string shift = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string x2 = "parVars[" + ToUpper(m_Params[i++].Name()) + index; ss << "\t{\n" - << "\t\treal_t fx = fmod(vIn.x + " << x << " + " << shift << ", 2 * " << x << ");\n" + << "\t\treal_t fx = fmod(vIn.x + " << x << " + " << shift << ", " << x2 << ");\n" << "\n" << "\t\tif (fx >= 0)\n" << "\t\t vOut.x = " << weight << " * (fx - " << x << ");\n" @@ -6383,18 +6389,25 @@ public: return ss.str(); } + virtual void Precalc() override + { + m_X2 = 2 * m_X; + } + protected: void Init() { string prefix = Prefix(); m_Params.clear(); - m_Params.push_back(ParamWithName(&m_X, prefix + "modulusx_x", 1)); - m_Params.push_back(ParamWithName(&m_Shift, prefix + "modulusx_shift")); + m_Params.push_back(ParamWithName(&m_X, prefix + "modulusx_x", 1)); + m_Params.push_back(ParamWithName(&m_Shift, prefix + "modulusx_shift")); + m_Params.push_back(ParamWithName(true, &m_X2, prefix + "modulusx_x2"));//Precalc. } private: T m_X; T m_Shift; + T m_X2;//Precalc. }; /// @@ -6414,7 +6427,7 @@ public: virtual void Func(IteratorHelper& helper, Point& outPoint, QTIsaac& rand) override { - T fy = std::fmod(helper.In.y + m_Y + m_Shift, 2 * m_Y); + T fy = std::fmod(helper.In.y + m_Y + m_Shift, m_Y2); if (fy >= 0) helper.Out.y = m_Weight * (fy - m_Y); @@ -6434,8 +6447,9 @@ public: string weight = WeightDefineString(); string y = "parVars[" + ToUpper(m_Params[i++].Name()) + index; string shift = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string y2 = "parVars[" + ToUpper(m_Params[i++].Name()) + index; ss << "\t{\n" - << "\t\treal_t fy = fmod(vIn.y + " << y << " + " << shift << ", 2 * " << y << ");\n" + << "\t\treal_t fy = fmod(vIn.y + " << y << " + " << shift << ", " << y2 << ");\n" << "\n" << "\t\tif (fy >= 0)\n" << "\t\t vOut.y = " << weight << " * (fy - " << y << ");\n" @@ -6448,18 +6462,25 @@ public: return ss.str(); } + virtual void Precalc() override + { + m_Y2 = 2 * m_Y; + } + protected: void Init() { string prefix = Prefix(); m_Params.clear(); - m_Params.push_back(ParamWithName(&m_Y, prefix + "modulusy_y", 1)); - m_Params.push_back(ParamWithName(&m_Shift, prefix + "modulusy_shift")); + m_Params.push_back(ParamWithName(&m_Y, prefix + "modulusy_y", 1)); + m_Params.push_back(ParamWithName(&m_Shift, prefix + "modulusy_shift")); + m_Params.push_back(ParamWithName(true, &m_Y2, prefix + "modulusy_y2"));//Precalc. } private: T m_Y; T m_Shift; + T m_Y2; }; /// @@ -6479,10 +6500,8 @@ public: virtual void Func(IteratorHelper& helper, Point& outPoint, QTIsaac& rand) override { - T sn = std::sin(m_AngleRad); - T cs = std::cos(m_AngleRad); - helper.Out.x = m_Weight * (helper.In.x * cs - helper.In.y * sn); - helper.Out.y = m_Weight * (helper.In.x * sn + helper.In.y * cs); + helper.Out.x = m_Weight * (helper.In.x * m_AngleCos - helper.In.y * m_AngleSin); + helper.Out.y = m_Weight * (helper.In.x * m_AngleSin + helper.In.y * m_AngleCos); helper.Out.z = DefaultZ(helper); } @@ -6494,12 +6513,11 @@ public: string index = ss2.str(); string weight = WeightDefineString(); string angle = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string anglerad = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string anglesin = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string anglecos = "parVars[" + ToUpper(m_Params[i++].Name()) + index; ss << "\t{\n" - << "\t\treal_t sn = sin(" << anglerad << ");\n" - << "\t\treal_t cs = cos(" << anglerad << ");\n" - << "\t\tvOut.x = " << weight << " * (vIn.x * cs - vIn.y * sn);\n" - << "\t\tvOut.y = " << weight << " * (vIn.x * sn + vIn.y * cs);\n" + << "\t\tvOut.x = " << weight << " * (vIn.x * " << anglecos << " - vIn.y * " << anglesin << ");\n" + << "\t\tvOut.y = " << weight << " * (vIn.x * " << anglesin << " + vIn.y * " << anglecos << ");\n" << "\t\tvOut.z = " << DefaultZCl() << "\t}\n"; return ss.str(); @@ -6507,7 +6525,9 @@ public: virtual void Precalc() override { - m_AngleRad = m_Angle / 180 * T(M_PI); + auto rad = m_Angle / 180 * T(M_PI); + m_AngleSin = std::sin(rad); + m_AngleCos = std::cos(rad); } protected: @@ -6516,12 +6536,14 @@ protected: string prefix = Prefix(); m_Params.clear(); m_Params.push_back(ParamWithName(&m_Angle, prefix + "rotate_angle")); - m_Params.push_back(ParamWithName(true, &m_AngleRad, prefix + "rotate_angle_rad")); + m_Params.push_back(ParamWithName(true, &m_AngleSin, prefix + "rotate_angle_sin"));//Precalc. + m_Params.push_back(ParamWithName(true, &m_AngleCos, prefix + "rotate_angle_cos")); } private: T m_Angle; - T m_AngleRad;//Precalc. + T m_AngleSin;//Precalc. + T m_AngleCos; }; /// @@ -6541,10 +6563,8 @@ public: virtual void Func(IteratorHelper& helper, Point& outPoint, QTIsaac& rand) override { - T sn = std::sin(m_AngleRad); - T cs = std::cos(m_AngleRad); - helper.Out.x = m_Weight * (helper.In.x + cs * m_X - sn * m_Y); - helper.Out.y = m_Weight * (helper.In.y - cs * m_Y - sn * m_X); + helper.Out.x = m_Weight * (helper.In.x + m_AngleCos * m_X - m_AngleSin * m_Y); + helper.Out.y = m_Weight * (helper.In.y - m_AngleCos * m_Y - m_AngleSin * m_X); helper.Out.z = DefaultZ(helper); } @@ -6558,12 +6578,11 @@ public: string x = "parVars[" + ToUpper(m_Params[i++].Name()) + index; string y = "parVars[" + ToUpper(m_Params[i++].Name()) + index; string angle = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string anglerad = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string anglesin = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string anglecos = "parVars[" + ToUpper(m_Params[i++].Name()) + index; ss << "\t{\n" - << "\t\treal_t sn = sin(" << anglerad << ");\n" - << "\t\treal_t cs = cos(" << anglerad << ");\n" - << "\t\tvOut.x = " << weight << " * (vIn.x + cs * " << x << " - sn * " << y << ");\n" - << "\t\tvOut.y = " << weight << " * (vIn.y - cs * " << y << " - sn * " << x << ");\n" + << "\t\tvOut.x = " << weight << " * (vIn.x + " << anglecos << " * " << x << " - " << anglesin << " * " << y << ");\n" + << "\t\tvOut.y = " << weight << " * (vIn.y - " << anglecos << " * " << y << " - " << anglesin << " * " << x << ");\n" << "\t\tvOut.z = " << DefaultZCl() << "\t}\n"; return ss.str(); @@ -6571,7 +6590,9 @@ public: virtual void Precalc() override { - m_AngleRad = m_Angle / 180 * T(M_PI); + auto rad = m_Angle / 180 * T(M_PI); + m_AngleSin = std::sin(rad); + m_AngleCos = std::cos(rad); } protected: @@ -6582,14 +6603,16 @@ protected: m_Params.push_back(ParamWithName(&m_X, prefix + "shift_x")); m_Params.push_back(ParamWithName(&m_Y, prefix + "shift_y")); m_Params.push_back(ParamWithName(&m_Angle, prefix + "shift_angle")); - m_Params.push_back(ParamWithName(true, &m_AngleRad, prefix + "shift_angle_rad")); + m_Params.push_back(ParamWithName(true, &m_AngleSin, prefix + "shift_angle_sin"));//Precalc. + m_Params.push_back(ParamWithName(true, &m_AngleCos, prefix + "shift_angle_cos")); } private: T m_X; T m_Y; T m_Angle; - T m_AngleRad;//Precalc. + T m_AngleSin;//Precalc. + T m_AngleCos; }; /// @@ -6609,8 +6632,8 @@ public: virtual void Func(IteratorHelper& helper, Point& outPoint, QTIsaac& rand) override { - T scalex = T(0.5) * m_Scalex * (T(1.0) + std::sin(helper.In.y * m_Sxfreq)); - T scaley = T(0.5) * m_Scaley * (T(1.0) + std::sin(helper.In.x * m_Syfreq)); + T scalex = m_HalfScalex * (T(1.0) + std::sin(helper.In.y * m_Sxfreq)); + T scaley = m_HalfScaley * (T(1.0) + std::sin(helper.In.x * m_Syfreq)); helper.Out.x = m_Weight * (helper.In.x + std::sin(helper.In.y * m_Freqx) * scalex); helper.Out.y = m_Weight * (helper.In.y + std::sin(helper.In.x * m_Freqy) * scaley); helper.Out.z = DefaultZ(helper); @@ -6623,15 +6646,17 @@ public: ss2 << "_" << XformIndexInEmber() << "]"; string index = ss2.str(); string weight = WeightDefineString(); - string scalex = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string scaley = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string freqx = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string freqy = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string sxfreq = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string syfreq = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string scalex = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string scaley = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string freqx = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string freqy = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string sxfreq = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string syfreq = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string halfscalex = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string halfscaley = "parVars[" + ToUpper(m_Params[i++].Name()) + index; ss << "\t{\n" - << "\t\treal_t scalex = (real_t)(0.5) * " << scalex << " * ((real_t)(1.0) + sin(vIn.y * " << sxfreq << "));\n" - << "\t\treal_t scaley = (real_t)(0.5) * " << scaley << " * ((real_t)(1.0) + sin(vIn.x * " << syfreq << "));\n" + << "\t\treal_t scalex = " << halfscalex << " * ((real_t)(1.0) + sin(vIn.y * " << sxfreq << "));\n" + << "\t\treal_t scaley = " << halfscaley << " * ((real_t)(1.0) + sin(vIn.x * " << syfreq << "));\n" << "\n" << "\t\tvOut.x = " << weight << " * fma(sin(vIn.y * " << freqx << "), scalex, vIn.x);\n" << "\t\tvOut.y = " << weight << " * fma(sin(vIn.x * " << freqy << "), scaley, vIn.y);\n" @@ -6643,6 +6668,8 @@ public: virtual void Precalc() override { + m_HalfScalex = m_Scalex * T(0.5); + m_HalfScaley = m_Scaley * T(0.5); } protected: @@ -6656,6 +6683,8 @@ protected: m_Params.push_back(ParamWithName(&m_Freqy, prefix + "waves3_freqy", T(13.0))); m_Params.push_back(ParamWithName(&m_Sxfreq, prefix + "waves3_sx_freq")); m_Params.push_back(ParamWithName(&m_Syfreq, prefix + "waves3_sy_freq", T(2.0))); + m_Params.push_back(ParamWithName(true, &m_HalfScalex, prefix + "waves3_half_scalex"));//Precalc. + m_Params.push_back(ParamWithName(true, &m_HalfScaley, prefix + "waves3_half_scaley")); } private: @@ -6665,6 +6694,8 @@ private: T m_Freqy; T m_Sxfreq; T m_Syfreq; + T m_HalfScalex;//Precalc. + T m_HalfScaley; }; /// @@ -6685,7 +6716,7 @@ public: virtual void Func(IteratorHelper& helper, Point& outPoint, QTIsaac& rand) override { T ax = T(Floor(helper.In.y * m_Freqx / M_2PI)); - ax = std::sin(ax * T(12.9898) + ax * T(78.233) + T(1.0) + helper.In.y * T(0.001) * m_Yfact) * T(43758.5453); + ax = std::sin(ax * T(12.9898) + ax * T(78.233) + T(1.0) + helper.In.y * m_Yfact001) * T(43758.5453); ax = ax - (int)ax; if (m_Cont == 1) ax = (ax > T(0.5)) ? T(1.0) : T(0.0); @@ -6702,15 +6733,16 @@ public: ss2 << "_" << XformIndexInEmber() << "]"; string index = ss2.str(); string weight = WeightDefineString(); - string scalex = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string scaley = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string freqx = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string freqy = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string cont = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string yfact = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string scalex = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string scaley = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string freqx = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string freqy = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string cont = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string yfact = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string yfact001 = "parVars[" + ToUpper(m_Params[i++].Name()) + index; ss << "\t{\n" << "\t\treal_t ax = floor(vIn.y * " << freqx << " / M_2PI);\n" - << "\t\tax = sin(ax * (real_t)(12.9898) + ax * (real_t)(78.233) + (real_t)(1.0) + vIn.y * (real_t)(0.001) * " << yfact << ") * (real_t)(43758.5453);\n" + << "\t\tax = sin(ax * (real_t)(12.9898) + ax * (real_t)(78.233) + (real_t)(1.0) + vIn.y * " << yfact001 << ") * (real_t)(43758.5453);\n" << "\t\tax = ax - (int) ax;\n" << "\t\tif (" << cont << " == 1) ax = (ax > (real_t)(0.5)) ? (real_t)(1.0) : 0.0;\n" << "\n" @@ -6724,6 +6756,7 @@ public: virtual void Precalc() override { + m_Yfact001 = m_Yfact * T(0.001); } protected: @@ -6737,6 +6770,7 @@ protected: m_Params.push_back(ParamWithName(&m_Freqy, prefix + "waves4_freqy", T(13.0))); m_Params.push_back(ParamWithName(&m_Cont, prefix + "waves4_cont", T(0), eParamType::INTEGER, T(0), T(1))); m_Params.push_back(ParamWithName(&m_Yfact, prefix + "waves4_yfact", T(0.1))); + m_Params.push_back(ParamWithName(true, &m_Yfact001, prefix + "waves4_yfact001"));//Precalc. } private: @@ -6746,6 +6780,7 @@ private: T m_Freqy; T m_Cont; T m_Yfact; + T m_Yfact001;//Precalc. }; /// @@ -6882,12 +6917,12 @@ public: virtual void Func(IteratorHelper& helper, Point& outPoint, QTIsaac& rand) override { - T mx = helper.In.y * m_Freqx * M_1_2PI; + T mx = helper.In.y * m_Freqx12Pi; T fx = mx - Floor(mx); if (fx > T(0.5)) fx = T(0.5) - fx; - T my = helper.In.x * m_Freqy * M_1_2PI; + T my = helper.In.x * m_Freqy12Pi; T fy = my - Floor(my); if (fy > T(0.5)) fy = T(0.5) - fy; @@ -6904,15 +6939,17 @@ public: ss2 << "_" << XformIndexInEmber() << "]"; string index = ss2.str(); string weight = WeightDefineString(); - string scalex = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string scaley = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string freqx = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string freqy = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string scalex = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string scaley = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string freqx = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string freqy = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string freqx12pi = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string freqy12pi = "parVars[" + ToUpper(m_Params[i++].Name()) + index; ss << "\t{\n" - << "\t\treal_t mx = vIn.y * " << freqx << " * M_1_2PI;\n" + << "\t\treal_t mx = vIn.y * " << freqx12pi << ";\n" << "\t\treal_t fx = mx - floor(mx);\n" << "\t\tif (fx > (real_t)(0.5)) fx = (real_t)(0.5) - fx;\n" - << "\t\treal_t my = vIn.x * " << freqy << " * M_1_2PI;\n" + << "\t\treal_t my = vIn.x * " << freqy12pi << ";\n" << "\t\treal_t fy = my - floor(my);\n" << "\t\tif (fy > (real_t)(0.5)) fy = (real_t)(0.5) - fy;\n" << "\t\tvOut.x = " << weight << " * fma(fx, " << scalex << ", vIn.x);\n" @@ -6925,6 +6962,8 @@ public: virtual void Precalc() override { + m_Freqx12Pi = m_Freqx * M_1_2PI; + m_Freqy12Pi = m_Freqy * M_1_2PI; } protected: @@ -6936,6 +6975,8 @@ protected: m_Params.push_back(ParamWithName(&m_Scaley, prefix + "waves23_scaley", T(0.05))); m_Params.push_back(ParamWithName(&m_Freqx, prefix + "waves23_freqx", T(7.0))); m_Params.push_back(ParamWithName(&m_Freqy, prefix + "waves23_freqy", T(13.0))); + m_Params.push_back(ParamWithName(true, &m_Freqx12Pi, prefix + "waves23_freqx_12pi")); + m_Params.push_back(ParamWithName(true, &m_Freqy12Pi, prefix + "waves23_freqy_12pi")); } private: @@ -6943,6 +6984,8 @@ private: T m_Scaley; T m_Freqx; T m_Freqy; + T m_Freqx12Pi;//Precalc. + T m_Freqy12Pi; }; /// @@ -6963,7 +7006,7 @@ public: virtual void Func(IteratorHelper& helper, Point& outPoint, QTIsaac& rand) override { T ax = T(Floor(helper.In.y * m_Freqx2)); - ax = std::sin(ax * T(12.9898) + ax * T(78.233) + T(1.0) + helper.In.y * T(0.001) * m_Yfact) * T(43758.5453); + ax = std::sin(ax * T(12.9898) + ax * T(78.233) + T(1.0) + helper.In.y * m_Yfact001) * T(43758.5453); ax = ax - int(ax); if (m_Cont == 1) ax = (ax > T(0.5)) ? T(1.0) : T(0.0); @@ -6980,16 +7023,17 @@ public: ss2 << "_" << XformIndexInEmber() << "]"; string index = ss2.str(); string weight = WeightDefineString(); - string scalex = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string scaley = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string freqx = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string freqy = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string cont = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string yfact = "parVars[" + ToUpper(m_Params[i++].Name()) + index; - string freqx2 = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string scalex = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string scaley = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string freqx = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string freqy = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string cont = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string yfact = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string freqx2 = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string yfact001 = "parVars[" + ToUpper(m_Params[i++].Name()) + index; ss << "\t{\n" << "\t\treal_t ax = floor(vIn.y * " << freqx2 << ");\n" - << "\t\tax = sin(ax * (real_t)(12.9898) + ax * (real_t)(78.233) + (real_t)(1.0) + vIn.y * (real_t)(0.001) * " << yfact << ") * (real_t)(43758.5453);\n" + << "\t\tax = sin(ax * (real_t)(12.9898) + ax * (real_t)(78.233) + (real_t)(1.0) + vIn.y * " << yfact001 << ") * (real_t)(43758.5453);\n" << "\t\tax = ax - (int) ax;\n" << "\t\tif (" << cont << " == 1) ax = (ax > (real_t)(0.5)) ? (real_t)(1.0) : 0.0;\n" << "\n" @@ -7003,6 +7047,7 @@ public: virtual void Precalc() override { + m_Yfact001 = m_Yfact * T(0.001); } protected: @@ -7017,6 +7062,7 @@ protected: m_Params.push_back(ParamWithName(&m_Cont, prefix + "waves42_cont", T(0), eParamType::INTEGER, T(0), T(1))); m_Params.push_back(ParamWithName(&m_Yfact, prefix + "waves42_yfact", T(0.1))); m_Params.push_back(ParamWithName(&m_Freqx2, prefix + "waves42_freqx2", T(1.0))); + m_Params.push_back(ParamWithName(true, &m_Yfact001, prefix + "waves42_yfact001"));//Precalc. } private: @@ -7027,6 +7073,7 @@ private: T m_Cont; T m_Yfact; T m_Freqx2; + T m_Yfact001;//Precalc. }; MAKEPREPOSTPARVAR(Splits3D, splits3D, SPLITS3D)