|  |  | @ -5160,7 +5160,7 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  | 			ff = f; |  |  |  | 			ff = f; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		T x = ff * m_Length; |  |  |  | 		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<T>(k / 2) * 2) == 1 ? T(1) : T(-1); |  |  |  | 		T angle_sign = (int_angle - Floor<T>(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 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<T>() * m_OnemHoleSq + m_HoleSq); |  |  |  | 		T z_scaled = z * std::sqrt(rand.Frand01<T>() * m_OnemHoleSq + m_HoleSq); | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -5211,7 +5211,7 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\t	ff = f;\n" |  |  |  | 		   << "\t\t	ff = f;\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  | 		   << "\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t x = ff * " << length << ";\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 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 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" |  |  |  | 		   << "\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_TwopiPower = (M_2PI / m_Power) * T(0.5); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Power2 = m_Power * 2; |  |  |  | 		m_Power2 = m_Power * 2; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_SinAlpha = std::sin(m_Alpha); |  |  |  | 		m_SinAlpha = std::sin(m_Alpha); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_CosAlpha = std::cos(m_Alpha); |  |  |  | 		m_CosAlpha = std::cos(m_Alpha) * 2; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	virtual vector<string> OpenCLGlobalFuncNames() const override | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		return vector<string> { "Zeps" }; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | protected: |  |  |  | protected: | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -5373,8 +5378,8 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	virtual void Precalc() override |  |  |  | 	virtual void Precalc() override | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		T m_SinXFreqPi = T(M_PI) * m_SinXFreq; |  |  |  | 		m_SinXFreqPi = T(M_PI) * m_SinXFreq; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		T m_SinYFreqPi = T(M_PI) * m_SinYFreq; |  |  |  | 		m_SinYFreqPi = T(M_PI) * m_SinYFreq; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	virtual vector<string> OpenCLGlobalFuncNames() const override |  |  |  | 	virtual vector<string> OpenCLGlobalFuncNames() const override | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6349,7 +6354,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 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) |  |  |  | 		if (fx >= 0) | 
			
		
	
		
		
			
				
					
					|  |  |  | 			helper.Out.x = m_Weight * (fx - m_X); |  |  |  | 			helper.Out.x = m_Weight * (fx - m_X); | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6369,8 +6374,9 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string weight = WeightDefineString(); |  |  |  | 		string weight = WeightDefineString(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string x     = "parVars[" + ToUpper(m_Params[i++].Name()) + index; |  |  |  | 		string x     = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string shift = "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" |  |  |  | 		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" |  |  |  | 		   << "\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tif (fx >= 0)\n" |  |  |  | 		   << "\t\tif (fx >= 0)\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\t	vOut.x = " << weight << " * (fx - " << x << ");\n" |  |  |  | 		   << "\t\t	vOut.x = " << weight << " * (fx - " << x << ");\n" | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6383,18 +6389,25 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return ss.str(); |  |  |  | 		return ss.str(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	virtual void Precalc() override | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_X2 = 2 * m_X; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | protected: |  |  |  | protected: | 
			
		
	
		
		
			
				
					
					|  |  |  | 	void Init() |  |  |  | 	void Init() | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string prefix = Prefix(); |  |  |  | 		string prefix = Prefix(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.clear(); |  |  |  | 		m_Params.clear(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_X,     prefix + "modulusx_x", 1)); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_X,        prefix + "modulusx_x", 1)); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Shift, prefix + "modulusx_shift")); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Shift,    prefix + "modulusx_shift")); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Params.push_back(ParamWithName<T>(true, &m_X2, prefix + "modulusx_x2"));//Precalc. | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | private: |  |  |  | private: | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_X; |  |  |  | 	T m_X; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Shift; |  |  |  | 	T m_Shift; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	T m_X2;//Precalc. | 
			
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | /// <summary> |  |  |  | /// <summary> | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6414,7 +6427,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 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) |  |  |  | 		if (fy >= 0) | 
			
		
	
		
		
			
				
					
					|  |  |  | 			helper.Out.y = m_Weight * (fy - m_Y); |  |  |  | 			helper.Out.y = m_Weight * (fy - m_Y); | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6434,8 +6447,9 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string weight = WeightDefineString(); |  |  |  | 		string weight = WeightDefineString(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string y     = "parVars[" + ToUpper(m_Params[i++].Name()) + index; |  |  |  | 		string y     = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string shift = "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" |  |  |  | 		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" |  |  |  | 		   << "\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tif (fy >= 0)\n" |  |  |  | 		   << "\t\tif (fy >= 0)\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\t	vOut.y = " << weight << " * (fy - " << y << ");\n" |  |  |  | 		   << "\t\t	vOut.y = " << weight << " * (fy - " << y << ");\n" | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6448,18 +6462,25 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return ss.str(); |  |  |  | 		return ss.str(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	virtual void Precalc() override | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Y2 = 2 * m_Y; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | protected: |  |  |  | protected: | 
			
		
	
		
		
			
				
					
					|  |  |  | 	void Init() |  |  |  | 	void Init() | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string prefix = Prefix(); |  |  |  | 		string prefix = Prefix(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.clear(); |  |  |  | 		m_Params.clear(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Y,     prefix + "modulusy_y", 1)); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Y,        prefix + "modulusy_y", 1)); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Shift, prefix + "modulusy_shift")); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Shift,    prefix + "modulusy_shift")); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Params.push_back(ParamWithName<T>(true, &m_Y2, prefix + "modulusy_y2"));//Precalc. | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | private: |  |  |  | private: | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Y; |  |  |  | 	T m_Y; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Shift; |  |  |  | 	T m_Shift; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	T m_Y2; | 
			
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | /// <summary> |  |  |  | /// <summary> | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6479,10 +6500,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 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		T sn = std::sin(m_AngleRad); |  |  |  | 		helper.Out.x = m_Weight * (helper.In.x * m_AngleCos - helper.In.y * m_AngleSin); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		T cs = std::cos(m_AngleRad); |  |  |  | 		helper.Out.y = m_Weight * (helper.In.x * m_AngleSin + helper.In.y * m_AngleCos); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		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.z = DefaultZ(helper); |  |  |  | 		helper.Out.z = DefaultZ(helper); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6494,12 +6513,11 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string index = ss2.str(); |  |  |  | 		string index = ss2.str(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string weight = WeightDefineString(); |  |  |  | 		string weight = WeightDefineString(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string angle    = "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" |  |  |  | 		ss << "\t{\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t sn = sin(" << anglerad << ");\n" |  |  |  | 		   << "\t\tvOut.x = " << weight << " * (vIn.x * " << anglecos << " - vIn.y * " << anglesin << ");\n" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t cs = cos(" << anglerad << ");\n" |  |  |  | 		   << "\t\tvOut.y = " << weight << " * (vIn.x * " << anglesin << " + vIn.y * " << anglecos << ");\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.z = " << DefaultZCl() |  |  |  | 		   << "\t\tvOut.z = " << DefaultZCl() | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t}\n"; |  |  |  | 		   << "\t}\n"; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return ss.str(); |  |  |  | 		return ss.str(); | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6507,7 +6525,9 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	virtual void Precalc() override |  |  |  | 	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: |  |  |  | protected: | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6516,12 +6536,14 @@ protected: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string prefix = Prefix(); |  |  |  | 		string prefix = Prefix(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.clear(); |  |  |  | 		m_Params.clear(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Angle,          prefix + "rotate_angle")); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Angle,          prefix + "rotate_angle")); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(true, &m_AngleRad, prefix + "rotate_angle_rad")); |  |  |  | 		m_Params.push_back(ParamWithName<T>(true, &m_AngleSin, prefix + "rotate_angle_sin"));//Precalc. | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Params.push_back(ParamWithName<T>(true, &m_AngleCos, prefix + "rotate_angle_cos")); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | private: |  |  |  | private: | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Angle; |  |  |  | 	T m_Angle; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_AngleRad;//Precalc. |  |  |  | 	T m_AngleSin;//Precalc. | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	T m_AngleCos; | 
			
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | /// <summary> |  |  |  | /// <summary> | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6541,10 +6563,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 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		T sn = std::sin(m_AngleRad); |  |  |  | 		helper.Out.x = m_Weight * (helper.In.x + m_AngleCos * m_X - m_AngleSin * m_Y); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		T cs = std::cos(m_AngleRad); |  |  |  | 		helper.Out.y = m_Weight * (helper.In.y - m_AngleCos * m_Y - m_AngleSin * m_X); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		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.z = DefaultZ(helper); |  |  |  | 		helper.Out.z = DefaultZ(helper); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6558,12 +6578,11 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string x        = "parVars[" + ToUpper(m_Params[i++].Name()) + index; |  |  |  | 		string x        = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string y        = "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 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" |  |  |  | 		ss << "\t{\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t sn = sin(" << anglerad << ");\n" |  |  |  | 		   << "\t\tvOut.x = " << weight << " * (vIn.x + " << anglecos << " * " << x << " - " << anglesin << " * " << y << ");\n" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t cs = cos(" << anglerad << ");\n" |  |  |  | 		   << "\t\tvOut.y = " << weight << " * (vIn.y - " << anglecos << " * " << y << " - " << anglesin << " * " << x << ");\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.z = " << DefaultZCl() |  |  |  | 		   << "\t\tvOut.z = " << DefaultZCl() | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t}\n"; |  |  |  | 		   << "\t}\n"; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return ss.str(); |  |  |  | 		return ss.str(); | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6571,7 +6590,9 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	virtual void Precalc() override |  |  |  | 	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: |  |  |  | protected: | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6582,14 +6603,16 @@ protected: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_X,              prefix + "shift_x")); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_X,              prefix + "shift_x")); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Y,              prefix + "shift_y")); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Y,              prefix + "shift_y")); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Angle,          prefix + "shift_angle")); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Angle,          prefix + "shift_angle")); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(true, &m_AngleRad, prefix + "shift_angle_rad")); |  |  |  | 		m_Params.push_back(ParamWithName<T>(true, &m_AngleSin, prefix + "shift_angle_sin"));//Precalc. | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Params.push_back(ParamWithName<T>(true, &m_AngleCos, prefix + "shift_angle_cos")); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | private: |  |  |  | private: | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_X; |  |  |  | 	T m_X; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Y; |  |  |  | 	T m_Y; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Angle; |  |  |  | 	T m_Angle; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_AngleRad;//Precalc. |  |  |  | 	T m_AngleSin;//Precalc. | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	T m_AngleCos; | 
			
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | /// <summary> |  |  |  | /// <summary> | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6609,12 +6632,10 @@ 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 x0 = helper.In.x; |  |  |  | 		T scalex = m_HalfScalex * (T(1.0) + std::sin(helper.In.y * m_Sxfreq)); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		T y0 = helper.In.y; |  |  |  | 		T scaley = m_HalfScaley * (T(1.0) + std::sin(helper.In.x * m_Syfreq)); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		T scalex = T(0.5) * m_Scalex * (T(1.0) + std::sin(y0 * m_Sxfreq)); |  |  |  | 		helper.Out.x = m_Weight * (helper.In.x + std::sin(helper.In.y * m_Freqx) * scalex); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		T scaley = T(0.5) * m_Scaley * (T(1.0) + std::sin(x0 * m_Syfreq)); |  |  |  | 		helper.Out.y = m_Weight * (helper.In.y + std::sin(helper.In.x * m_Freqy) * scaley); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.x = m_Weight * (x0 + std::sin(y0 * m_Freqx) * scalex); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.y = m_Weight * (y0 + std::sin(x0 * m_Freqy) * scaley); |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.z = DefaultZ(helper); |  |  |  | 		helper.Out.z = DefaultZ(helper); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6625,21 +6646,20 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		ss2 << "_" << XformIndexInEmber() << "]"; |  |  |  | 		ss2 << "_" << XformIndexInEmber() << "]"; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string index = ss2.str(); |  |  |  | 		string index = ss2.str(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string weight = WeightDefineString(); |  |  |  | 		string weight = WeightDefineString(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string scalex = "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 scaley     = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		string freqx = "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 freqy      = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		string sxfreq = "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 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" |  |  |  | 		ss << "\t{\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t x0 = vIn.x;\n" |  |  |  | 		   << "\t\treal_t scalex = " << halfscalex << " * ((real_t)(1.0) + sin(vIn.y * " << sxfreq << "));\n" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t y0 = vIn.y;\n" |  |  |  | 		   << "\t\treal_t scaley = " << halfscaley << " * ((real_t)(1.0) + sin(vIn.x * " << syfreq << "));\n" | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  | 		   << "\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t scalex = (real_t)(0.5) * " << scalex << " * ((real_t)(1.0) + sin(y0 * " << sxfreq << "));\n" |  |  |  | 		   << "\t\tvOut.x = " << weight << " * fma(sin(vIn.y * " << freqx << "), scalex, vIn.x);\n" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t scaley = (real_t)(0.5) * " << scaley << " * ((real_t)(1.0) + sin(x0 * " << syfreq << "));\n" |  |  |  | 		   << "\t\tvOut.y = " << weight << " * fma(sin(vIn.x * " << freqy << "), scaley, vIn.y);\n" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.x = " << weight << " * (x0 + sin(y0 * " << freqx << ") * scalex);\n" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.y = " << weight << " * (y0 + sin(x0 * " << freqy << ") * scaley);\n" |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  | 		   << "\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.z = " << DefaultZCl() |  |  |  | 		   << "\t\tvOut.z = " << DefaultZCl() | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t}\n"; |  |  |  | 		   << "\t}\n"; | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6648,6 +6668,8 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	virtual void Precalc() override |  |  |  | 	virtual void Precalc() override | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_HalfScalex = m_Scalex * T(0.5); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_HalfScaley = m_Scaley * T(0.5); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | protected: |  |  |  | protected: | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6657,10 +6679,12 @@ protected: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.clear(); |  |  |  | 		m_Params.clear(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scalex, prefix + "waves3_scalex", T(0.05))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scalex, prefix + "waves3_scalex", T(0.05))); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scaley, prefix + "waves3_scaley", T(0.05))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scaley, prefix + "waves3_scaley", T(0.05))); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqx, prefix + "waves3_freqx", T(7.0))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqx,  prefix + "waves3_freqx", T(7.0))); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqy, prefix + "waves3_freqy", T(13.0))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqy,  prefix + "waves3_freqy", T(13.0))); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Sxfreq, prefix + "waves3_sx_freq")); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Sxfreq, prefix + "waves3_sx_freq")); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Syfreq, prefix + "waves3_sy_freq", T(2.0))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Syfreq, prefix + "waves3_sy_freq", T(2.0))); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Params.push_back(ParamWithName<T>(true, &m_HalfScalex, prefix + "waves3_half_scalex"));//Precalc. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Params.push_back(ParamWithName<T>(true, &m_HalfScaley, prefix + "waves3_half_scaley")); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | private: |  |  |  | private: | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6670,6 +6694,8 @@ private: | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Freqy; |  |  |  | 	T m_Freqy; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Sxfreq; |  |  |  | 	T m_Sxfreq; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Syfreq; |  |  |  | 	T m_Syfreq; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	T m_HalfScalex;//Precalc. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	T m_HalfScaley; | 
			
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | /// <summary> |  |  |  | /// <summary> | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6689,16 +6715,14 @@ 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 x0 = helper.In.x; |  |  |  | 		T ax = T(Floor<T>(helper.In.y * m_Freqx / M_2PI)); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		T y0 = helper.In.y; |  |  |  | 		ax = std::sin(ax * T(12.9898) + ax * T(78.233) + T(1.0) + helper.In.y * m_Yfact001) * T(43758.5453); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		T ax = T(Floor<T>(y0 * m_Freqx / M_2PI)); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		ax = std::sin(ax * T(12.9898) + ax * T(78.233) + T(1.0) + y0 * T(0.001) * m_Yfact) * T(43758.5453); |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		ax = ax - (int)ax; |  |  |  | 		ax = ax - (int)ax; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (m_Cont == 1) ax = (ax > T(0.5)) ? T(1.0) : T(0.0); |  |  |  | 		if (m_Cont == 1) ax = (ax > T(0.5)) ? T(1.0) : T(0.0); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.x = m_Weight * (x0 + std::sin(y0 * m_Freqx) * ax * ax * m_Scalex); |  |  |  | 		helper.Out.x = m_Weight * (helper.In.x + std::sin(helper.In.y * m_Freqx) * ax * ax * m_Scalex); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.y = m_Weight * (y0 + std::sin(x0 * m_Freqy) * m_Scaley); |  |  |  | 		helper.Out.y = m_Weight * (helper.In.y + std::sin(helper.In.x * m_Freqy) * m_Scaley); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.z = DefaultZ(helper); |  |  |  | 		helper.Out.z = DefaultZ(helper); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6709,23 +6733,21 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		ss2 << "_" << XformIndexInEmber() << "]"; |  |  |  | 		ss2 << "_" << XformIndexInEmber() << "]"; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string index = ss2.str(); |  |  |  | 		string index = ss2.str(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string weight = WeightDefineString(); |  |  |  | 		string weight = WeightDefineString(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string scalex = "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 scaley    = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		string freqx = "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 freqy     = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		string cont = "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 yfact     = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		string yfact001  = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		ss << "\t{\n" |  |  |  | 		ss << "\t{\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t x0 = vIn.x;\n" |  |  |  | 		   << "\t\treal_t ax = floor(vIn.y * " << freqx << " / M_2PI);\n" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t y0 = vIn.y;\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" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t ax = floor(y0 * " << freqx << " / M_2PI);\n" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tax = sin(ax * (real_t)(12.9898) + ax * (real_t)(78.233) + (real_t)(1.0) + y0 * (real_t)(0.001) * " << yfact << ") * (real_t)(43758.5453);\n" |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tax = ax - (int) ax;\n" |  |  |  | 		   << "\t\tax = ax - (int) ax;\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tif (" << cont << " == 1) ax = (ax > (real_t)(0.5)) ? (real_t)(1.0) : 0.0;\n" |  |  |  | 		   << "\t\tif (" << cont << " == 1) ax = (ax > (real_t)(0.5)) ? (real_t)(1.0) : 0.0;\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  | 		   << "\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.x = " << weight << " * (x0 + sin(y0 * " << freqx << ") * ax * ax * " << scalex << ");\n" |  |  |  | 		   << "\t\tvOut.x = " << weight << " * fma(sin(vIn.y * " << freqx << "), ax * ax * " << scalex << ", vIn.x);\n" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.y = " << weight << " * (y0 + sin(x0 * " << freqy << ") * " << scaley << ");\n" |  |  |  | 		   << "\t\tvOut.y = " << weight << " * fma(sin(vIn.x * " << freqy << "), " << scaley << ", vIn.y);\n" | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  | 		   << "\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.z = " << DefaultZCl() |  |  |  | 		   << "\t\tvOut.z = " << DefaultZCl() | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t}\n"; |  |  |  | 		   << "\t}\n"; | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6734,6 +6756,7 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	virtual void Precalc() override |  |  |  | 	virtual void Precalc() override | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Yfact001 = m_Yfact * T(0.001); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | protected: |  |  |  | protected: | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6743,10 +6766,11 @@ protected: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.clear(); |  |  |  | 		m_Params.clear(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scalex, prefix + "waves4_scalex", T(0.05))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scalex, prefix + "waves4_scalex", T(0.05))); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scaley, prefix + "waves4_scaley", T(0.05))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scaley, prefix + "waves4_scaley", T(0.05))); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqx, prefix + "waves4_freqx", T(7.0))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqx,  prefix + "waves4_freqx", T(7.0))); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqy, prefix + "waves4_freqy", T(13.0))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqy,  prefix + "waves4_freqy", T(13.0))); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Cont, prefix + "waves4_cont", T(0), eParamType::INTEGER, T(0), T(1))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Cont,   prefix + "waves4_cont", T(0), eParamType::INTEGER, T(0), T(1))); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Yfact, prefix + "waves4_yfact", T(0.1))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Yfact,  prefix + "waves4_yfact", T(0.1))); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Params.push_back(ParamWithName<T>(true, &m_Yfact001, prefix + "waves4_yfact001"));//Precalc. | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | private: |  |  |  | private: | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6756,6 +6780,7 @@ private: | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Freqy; |  |  |  | 	T m_Freqy; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Cont; |  |  |  | 	T m_Cont; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Yfact; |  |  |  | 	T m_Yfact; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	T m_Yfact001;//Precalc. | 
			
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | /// <summary> |  |  |  | /// <summary> | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6775,35 +6800,33 @@ 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 x0 = helper.In.x; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		T y0 = helper.In.y; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		T sinx, siny; |  |  |  | 		T sinx, siny; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		int px = (int)m_Powerx; |  |  |  | 		int px = (int)m_Powerx; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		int py = (int)m_Powery; |  |  |  | 		int py = (int)m_Powery; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (m_Modex < T(0.5)) |  |  |  | 		if (m_Modex < T(0.5)) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		{ |  |  |  | 		{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 			sinx = std::sin(y0 * m_Freqx); |  |  |  | 			sinx = std::sin(helper.In.y * m_Freqx); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		else |  |  |  | 		else | 
			
		
	
		
		
			
				
					
					|  |  |  | 		{ |  |  |  | 		{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 			sinx = T(0.5) * (T(1.0) + std::sin(y0 * m_Freqx)); |  |  |  | 			sinx = T(0.5) * (T(1.0) + std::sin(helper.In.y * m_Freqx)); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		T offsetx = std::pow(sinx, px) * m_Scalex; |  |  |  | 		T offsetx = std::pow(sinx, px) * m_Scalex; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (m_Modey < T(0.5)) |  |  |  | 		if (m_Modey < T(0.5)) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		{ |  |  |  | 		{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 			siny = std::sin(x0 * m_Freqy); |  |  |  | 			siny = std::sin(helper.In.x * m_Freqy); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		else |  |  |  | 		else | 
			
		
	
		
		
			
				
					
					|  |  |  | 		{ |  |  |  | 		{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 			siny = T(0.5) * (T(1.0) + std::sin(x0 * m_Freqy)); |  |  |  | 			siny = T(0.5) * (T(1.0) + std::sin(helper.In.x * m_Freqy)); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		T offsety = std::pow(siny, py) * m_Scaley; |  |  |  | 		T offsety = std::pow(siny, py) * m_Scaley; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.x = m_Weight * (x0 + offsetx); |  |  |  | 		helper.Out.x = m_Weight * (helper.In.x + offsetx); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.y = m_Weight * (y0 + offsety); |  |  |  | 		helper.Out.y = m_Weight * (helper.In.y + offsety); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.z = DefaultZ(helper); |  |  |  | 		helper.Out.z = DefaultZ(helper); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6816,34 +6839,31 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string weight = WeightDefineString(); |  |  |  | 		string weight = WeightDefineString(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string scalex = "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 scaley = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string freqx = "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 freqy  = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		string modex = "parVars[" + ToUpper(m_Params[i++].Name()) + index; |  |  |  | 		string modex  = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		string modey = "parVars[" + ToUpper(m_Params[i++].Name()) + index; |  |  |  | 		string modey  = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		string powerx = "parVars[" + ToUpper(m_Params[i++].Name()) + index; |  |  |  | 		string powerx = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string powery = "parVars[" + ToUpper(m_Params[i++].Name()) + index; |  |  |  | 		string powery = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		ss << "\t{\n" |  |  |  | 		ss << "\t{\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t x0 = vIn.x;\n" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t y0 = vIn.y;\n" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t sinx, siny;\n" |  |  |  | 		   << "\t\treal_t sinx, siny;\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  | 		   << "\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tint px = (int) " << powerx << ";\n" |  |  |  | 		   << "\t\tint px = (int) " << powerx << ";\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tint py = (int) " << powery << ";\n" |  |  |  | 		   << "\t\tint py = (int) " << powery << ";\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tif (" << modex << " < (real_t)(0.5)){\n" |  |  |  | 		   << "\t\tif (" << modex << " < (real_t)(0.5)){\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tsinx = sin(y0 * " << freqx << ");\n" |  |  |  | 		   << "\t\tsinx = sin(vIn.y * " << freqx << ");\n" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\t} else {\n" |  |  |  | 		   << "\t\t} else {\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tsinx = (real_t)(0.5) * ((real_t)(1.0) + sin(y0 * " << freqx << "));\n" |  |  |  | 		   << "\t\tsinx = (real_t)(0.5) * ((real_t)(1.0) + sin(vIn.y * " << freqx << "));\n" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\t}\n" |  |  |  | 		   << "\t\t}\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t offsetx = pow(sinx, px) * " << scalex << ";\n" |  |  |  | 		   << "\t\treal_t offsetx = pow(sinx, px) * " << scalex << ";\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tif (" << modey << " < (real_t)(0.5)){\n" |  |  |  | 		   << "\t\tif (" << modey << " < (real_t)(0.5)){\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tsiny = sin(x0 * " << freqy << ");\n" |  |  |  | 		   << "\t\tsiny = sin(vIn.x * " << freqy << ");\n" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\t} else {\n" |  |  |  | 		   << "\t\t} else {\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tsiny = (real_t)(0.5) * ((real_t)(1.0) + sin(x0 * " << freqy << "));\n" |  |  |  | 		   << "\t\tsiny = (real_t)(0.5) * ((real_t)(1.0) + sin(vIn.x * " << freqy << "));\n" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\t}\n" |  |  |  | 		   << "\t\t}\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t offsety = pow(siny, py) * " << scaley << ";\n" |  |  |  | 		   << "\t\treal_t offsety = pow(siny, py) * " << scaley << ";\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.x = " << weight << " * (x0 + offsetx);\n" |  |  |  | 		   << "\t\tvOut.x = " << weight << " * (vIn.x + offsetx);\n" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.y = " << weight << " * (y0 + offsety);\n" |  |  |  | 		   << "\t\tvOut.y = " << weight << " * (vIn.y + offsety);\n" | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  | 		   << "\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.z = " << DefaultZCl() |  |  |  | 		   << "\t\tvOut.z = " << DefaultZCl() | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t}\n"; |  |  |  | 		   << "\t}\n"; | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6861,10 +6881,10 @@ protected: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.clear(); |  |  |  | 		m_Params.clear(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scalex, prefix + "waves22_scalex", T(0.05))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scalex, prefix + "waves22_scalex", T(0.05))); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scaley, prefix + "waves22_scaley", T(0.05))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scaley, prefix + "waves22_scaley", T(0.05))); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqx, prefix + "waves22_freqx", T(7.0))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqx,  prefix + "waves22_freqx", T(7.0))); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqy, prefix + "waves22_freqy", T(13.0))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqy,  prefix + "waves22_freqy", T(13.0))); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Modex, prefix + "waves22_modex", T(0), eParamType::INTEGER, T(0), T(1))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Modex,  prefix + "waves22_modex", T(0), eParamType::INTEGER, T(0), T(1))); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Modey, prefix + "waves22_modey", T(0), eParamType::INTEGER, T(0), T(1))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Modey,  prefix + "waves22_modey", T(0), eParamType::INTEGER, T(0), T(1))); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Powerx, prefix + "waves22_powerx", T(2.0))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Powerx, prefix + "waves22_powerx", T(2.0))); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Powery, prefix + "waves22_powery", T(2.0))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Powery, prefix + "waves22_powery", T(2.0))); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6897,20 +6917,18 @@ 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 x0 = helper.In.x; |  |  |  | 		T mx = helper.In.y * m_Freqx12Pi; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		T y0 = helper.In.y; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		T mx = y0 * m_Freqx * M_1_2PI; |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		T fx = mx - Floor<T>(mx); |  |  |  | 		T fx = mx - Floor<T>(mx); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (fx > T(0.5)) fx = T(0.5) - fx; |  |  |  | 		if (fx > T(0.5)) fx = T(0.5) - fx; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		T my = x0 * m_Freqy * M_1_2PI; |  |  |  | 		T my = helper.In.x * m_Freqy12Pi; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		T fy = my - Floor<T>(my); |  |  |  | 		T fy = my - Floor<T>(my); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (fy > T(0.5)) fy = T(0.5) - fy; |  |  |  | 		if (fy > T(0.5)) fy = T(0.5) - fy; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.x = m_Weight * (x0 + fx * m_Scalex); |  |  |  | 		helper.Out.x = m_Weight * (helper.In.x + fx * m_Scalex); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.y = m_Weight * (y0 + fy * m_Scaley); |  |  |  | 		helper.Out.y = m_Weight * (helper.In.y + fy * m_Scaley); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.z = DefaultZ(helper); |  |  |  | 		helper.Out.z = DefaultZ(helper); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6921,22 +6939,21 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		ss2 << "_" << XformIndexInEmber() << "]"; |  |  |  | 		ss2 << "_" << XformIndexInEmber() << "]"; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string index = ss2.str(); |  |  |  | 		string index = ss2.str(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string weight = WeightDefineString(); |  |  |  | 		string weight = WeightDefineString(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string scalex = "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 scaley    = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		string freqx = "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 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" |  |  |  | 		ss << "\t{\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t x0 = vIn.x;\n" |  |  |  | 		   << "\t\treal_t mx = vIn.y * " << freqx12pi << ";\n" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t y0 = vIn.y;\n" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t mx = y0 * " << freqx << " * M_1_2PI;\n" |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t fx = mx - floor(mx);\n" |  |  |  | 		   << "\t\treal_t fx = mx - floor(mx);\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tif (fx > (real_t)(0.5)) fx = (real_t)(0.5) - fx;\n" |  |  |  | 		   << "\t\tif (fx > (real_t)(0.5)) fx = (real_t)(0.5) - fx;\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t my = x0 * " << freqy << " * M_1_2PI;\n" |  |  |  | 		   << "\t\treal_t my = vIn.x * " << freqy12pi << ";\n" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t fy = my - floor(my);\n" |  |  |  | 		   << "\t\treal_t fy = my - floor(my);\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tif (fy > (real_t)(0.5)) fy = (real_t)(0.5) - fy;\n" |  |  |  | 		   << "\t\tif (fy > (real_t)(0.5)) fy = (real_t)(0.5) - fy;\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.x = " << weight << " * (x0 + fx * " << scalex << ");\n" |  |  |  | 		   << "\t\tvOut.x = " << weight << " * fma(fx, " << scalex << ", vIn.x);\n" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.y = " << weight << " * (y0 + fy * " << scaley << ");\n" |  |  |  | 		   << "\t\tvOut.y = " << weight << " * fma(fy, " << scaley << ", vIn.y);\n" | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  | 		   << "\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.z = " << DefaultZCl() |  |  |  | 		   << "\t\tvOut.z = " << DefaultZCl() | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t}\n"; |  |  |  | 		   << "\t}\n"; | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6945,6 +6962,8 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	virtual void Precalc() override |  |  |  | 	virtual void Precalc() override | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Freqx12Pi = m_Freqx * M_1_2PI; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Freqy12Pi = m_Freqy * M_1_2PI; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | protected: |  |  |  | protected: | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6954,8 +6973,10 @@ protected: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.clear(); |  |  |  | 		m_Params.clear(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scalex, prefix + "waves23_scalex", T(0.05))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scalex, prefix + "waves23_scalex", T(0.05))); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scaley, prefix + "waves23_scaley", T(0.05))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scaley, prefix + "waves23_scaley", T(0.05))); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqx, prefix + "waves23_freqx", T(7.0))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqx,  prefix + "waves23_freqx", T(7.0))); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqy, prefix + "waves23_freqy", T(13.0))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqy,  prefix + "waves23_freqy", T(13.0))); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Params.push_back(ParamWithName<T>(true, &m_Freqx12Pi, prefix + "waves23_freqx_12pi")); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Params.push_back(ParamWithName<T>(true, &m_Freqy12Pi, prefix + "waves23_freqy_12pi")); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | private: |  |  |  | private: | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6963,6 +6984,8 @@ private: | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Scaley; |  |  |  | 	T m_Scaley; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Freqx; |  |  |  | 	T m_Freqx; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Freqy; |  |  |  | 	T m_Freqy; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	T m_Freqx12Pi;//Precalc. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	T m_Freqy12Pi; | 
			
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | /// <summary> |  |  |  | /// <summary> | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -6982,16 +7005,14 @@ 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 x0 = helper.In.x; |  |  |  | 		T ax = T(Floor<T>(helper.In.y * m_Freqx2)); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		T y0 = helper.In.y; |  |  |  | 		ax = std::sin(ax * T(12.9898) + ax * T(78.233) + T(1.0) + helper.In.y * m_Yfact001) * T(43758.5453); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		T ax = T(Floor<T>(y0 * m_Freqx2)); |  |  |  | 		ax = ax - int(ax); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		ax = std::sin(ax * T(12.9898) + ax * T(78.233) + T(1.0) + y0 * T(0.001) * m_Yfact) * T(43758.5453); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		ax = ax - (int)ax; |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (m_Cont == 1) ax = (ax > T(0.5)) ? T(1.0) : T(0.0); |  |  |  | 		if (m_Cont == 1) ax = (ax > T(0.5)) ? T(1.0) : T(0.0); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.x = m_Weight * (x0 + std::sin(y0 * m_Freqx) * ax * ax * m_Scalex); |  |  |  | 		helper.Out.x = m_Weight * (helper.In.x + std::sin(helper.In.y * m_Freqx) * ax * ax * m_Scalex); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.y = m_Weight * (y0 + std::sin(x0 * m_Freqy) * m_Scaley); |  |  |  | 		helper.Out.y = m_Weight * (helper.In.y + std::sin(helper.In.x * m_Freqy) * m_Scaley); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		helper.Out.z = DefaultZ(helper); |  |  |  | 		helper.Out.z = DefaultZ(helper); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -7002,24 +7023,22 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		ss2 << "_" << XformIndexInEmber() << "]"; |  |  |  | 		ss2 << "_" << XformIndexInEmber() << "]"; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string index = ss2.str(); |  |  |  | 		string index = ss2.str(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string weight = WeightDefineString(); |  |  |  | 		string weight = WeightDefineString(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		string scalex = "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 scaley   = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		string freqx = "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 freqy    = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		string cont = "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 yfact    = "parVars[" + ToUpper(m_Params[i++].Name()) + index; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		string freqx2 = "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" |  |  |  | 		ss << "\t{\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t x0 = vIn.x;\n" |  |  |  | 		   << "\t\treal_t ax = floor(vIn.y * " << freqx2 << ");\n" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t y0 = vIn.y;\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" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\treal_t ax = floor(y0 * " << freqx2 << ");\n" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tax = sin(ax * (real_t)(12.9898) + ax * (real_t)(78.233) + (real_t)(1.0) + y0 * (real_t)(0.001) * " << yfact << ") * (real_t)(43758.5453);\n" |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tax = ax - (int) ax;\n" |  |  |  | 		   << "\t\tax = ax - (int) ax;\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tif (" << cont << " == 1) ax = (ax > (real_t)(0.5)) ? (real_t)(1.0) : 0.0;\n" |  |  |  | 		   << "\t\tif (" << cont << " == 1) ax = (ax > (real_t)(0.5)) ? (real_t)(1.0) : 0.0;\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  | 		   << "\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.x = " << weight << " * (x0 + sin(y0 * " << freqx << ") * ax * ax * " << scalex << ");\n" |  |  |  | 		   << "\t\tvOut.x = " << weight << " * fma(sin(vIn.y * " << freqx << "), ax * ax * " << scalex << ", vIn.x);\n" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.y = " << weight << " * (y0 + sin(x0 * " << freqy << ") * " << scaley << ");\n" |  |  |  | 		   << "\t\tvOut.y = " << weight << " * fma(sin(vIn.x * " << freqy << "), " << scaley << ", vIn.y);\n" | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		   << "\n" |  |  |  | 		   << "\n" | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t\tvOut.z = " << DefaultZCl() |  |  |  | 		   << "\t\tvOut.z = " << DefaultZCl() | 
			
		
	
		
		
			
				
					
					|  |  |  | 		   << "\t}\n"; |  |  |  | 		   << "\t}\n"; | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -7028,6 +7047,7 @@ public: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	virtual void Precalc() override |  |  |  | 	virtual void Precalc() override | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Yfact001 = m_Yfact * T(0.001); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | protected: |  |  |  | protected: | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -7037,11 +7057,12 @@ protected: | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.clear(); |  |  |  | 		m_Params.clear(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scalex, prefix + "waves42_scalex", T(0.05))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scalex, prefix + "waves42_scalex", T(0.05))); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scaley, prefix + "waves42_scaley", T(0.05))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Scaley, prefix + "waves42_scaley", T(0.05))); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqx, prefix + "waves42_freqx", T(7.0))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqx,  prefix + "waves42_freqx", T(7.0))); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqy, prefix + "waves42_freqy", T(13.0))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqy,  prefix + "waves42_freqy", T(13.0))); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Cont, prefix + "waves42_cont", T(0), eParamType::INTEGER, T(0), T(1))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Cont,   prefix + "waves42_cont", T(0), eParamType::INTEGER, T(0), T(1))); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Yfact, prefix + "waves42_yfact", T(0.1))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Yfact,  prefix + "waves42_yfact", T(0.1))); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqx2, prefix + "waves42_freqx2", T(1.0))); |  |  |  | 		m_Params.push_back(ParamWithName<T>(&m_Freqx2, prefix + "waves42_freqx2", T(1.0))); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_Params.push_back(ParamWithName<T>(true, &m_Yfact001, prefix + "waves42_yfact001"));//Precalc. | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | private: |  |  |  | private: | 
			
		
	
	
		
		
			
				
					
					|  |  | @ -7052,6 +7073,7 @@ private: | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Cont; |  |  |  | 	T m_Cont; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Yfact; |  |  |  | 	T m_Yfact; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	T m_Freqx2; |  |  |  | 	T m_Freqx2; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	T m_Yfact001;//Precalc. | 
			
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | MAKEPREPOSTPARVAR(Splits3D, splits3D, SPLITS3D) |  |  |  | MAKEPREPOSTPARVAR(Splits3D, splits3D, SPLITS3D) | 
			
		
	
	
		
		
			
				
					
					|  |  | 
 |