From 99cc597abc5eaedc23f15fbc3a720aa0bd37fb54 Mon Sep 17 00:00:00 2001 From: Person Date: Thu, 30 Jul 2020 19:55:37 -0700 Subject: [PATCH] --Code changes -Add vignette variation. --- .../Installer/FractoriumInstaller.wixproj | 2 +- Builds/MSVC/Installer/Product.wxs | 4 +- Builds/MSVC/VS2019/Ember.rc | Bin 4522 -> 4522 bytes Builds/MSVC/VS2019/EmberAnimate.rc | 8 +- Builds/MSVC/VS2019/EmberCL.rc | Bin 4548 -> 4548 bytes Builds/MSVC/VS2019/EmberGenome.rc | 8 +- Builds/MSVC/VS2019/EmberRender.rc | 8 +- Builds/MSVC/VS2019/Fractorium.rc | Bin 4490 -> 4490 bytes Data/Version History.txt | 2 +- Source/Ember/Ember.cpp | 1 + Source/Ember/EmberDefines.h | 2 +- Source/Ember/Variation.h | 3 + Source/Ember/VariationList.cpp | 1 + Source/Ember/Variations07.h | 194 ++++++++++++++++++ Source/Fractorium/AboutDialog.ui | 2 +- 15 files changed, 217 insertions(+), 18 deletions(-) diff --git a/Builds/MSVC/Installer/FractoriumInstaller.wixproj b/Builds/MSVC/Installer/FractoriumInstaller.wixproj index 1036aa8..fb456da 100644 --- a/Builds/MSVC/Installer/FractoriumInstaller.wixproj +++ b/Builds/MSVC/Installer/FractoriumInstaller.wixproj @@ -6,7 +6,7 @@ 3.7 {c8096c47-e358-438c-a520-146d46b0637d} 2.0 - Fractorium_1.0.0.20 + Fractorium_1.0.0.21 Package $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets diff --git a/Builds/MSVC/Installer/Product.wxs b/Builds/MSVC/Installer/Product.wxs index 9aceebb..f8693f9 100644 --- a/Builds/MSVC/Installer/Product.wxs +++ b/Builds/MSVC/Installer/Product.wxs @@ -1,6 +1,6 @@ - + @@ -13,7 +13,7 @@ - + dIsgCw diff --git a/Builds/MSVC/VS2019/EmberAnimate.rc b/Builds/MSVC/VS2019/EmberAnimate.rc index 9873293..8d4bbfd 100644 --- a/Builds/MSVC/VS2019/EmberAnimate.rc +++ b/Builds/MSVC/VS2019/EmberAnimate.rc @@ -49,8 +49,8 @@ // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1, 0, 0, 20 - PRODUCTVERSION 1, 0, 0, 20 + FILEVERSION 1, 0, 0, 21 + PRODUCTVERSION 1, 0, 0, 21 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -67,12 +67,12 @@ BEGIN VALUE "CompanyName", "Open Source" VALUE "FileDescription", "Renders fractal flames as animations with motion blur" - VALUE "FileVersion", "1, 0, 0, 20" + VALUE "FileVersion", "1, 0, 0, 21" VALUE "InternalName", "EmberAnimate.exe" VALUE "LegalCopyright", "Copyright (C) Matt Feemster 2020, GPL v3" VALUE "OriginalFilename", "EmberAnimate.exe" VALUE "ProductName", "Ember Animate" - VALUE "ProductVersion", "1, 0, 0, 20" + VALUE "ProductVersion", "1, 0, 0, 21" END END BLOCK "VarFileInfo" diff --git a/Builds/MSVC/VS2019/EmberCL.rc b/Builds/MSVC/VS2019/EmberCL.rc index ec61563d132505f13753033315093498ac010482..0021d942d978d725128aacd48eac7f55724fa4a0 100644 GIT binary patch delta 44 zcmX@2d_;M}7Y;_l$zM4v84WkwH(%o3#>i;6xs#WX1pqvX B4B7wy delta 46 zcmeBD?o!@xj)T!)@_7zRRs#lJ2Cm8doT8hRIA<^c1q->wH(%o3#>i-}xs#WX1pquP B4AuYu diff --git a/Data/Version History.txt b/Data/Version History.txt index 6172a3f..0fab215 100644 --- a/Data/Version History.txt +++ b/Data/Version History.txt @@ -1,4 +1,4 @@ -1.0.0.20 4/11/2020 +1.0.0.21 4/11/2020 --Bug fixes -ETA time was wrong with incremental final renders after waiting for a period of time. -Fix possible OpenCL bugs in cubic3D, cubicLattice_3D, dc_cube, falloff, falloff2, falloff3, waffle. diff --git a/Source/Ember/Ember.cpp b/Source/Ember/Ember.cpp index 6e22e18..41beacf 100644 --- a/Source/Ember/Ember.cpp +++ b/Source/Ember/Ember.cpp @@ -496,6 +496,7 @@ uint Timing::m_ProcessorCount; EXPORTPREPOSTREGVAR(Gnarly, T) \ EXPORTPREPOSTREGVAR(Inkdrop, T) \ EXPORTPREPOSTREGVAR(HexModulus, T) \ + EXPORTPREPOSTREGVAR(Vignette, T) \ template EMBER_API class VariationList; \ template EMBER_API class SpatialFilter; \ template EMBER_API class GaussianFilter; \ diff --git a/Source/Ember/EmberDefines.h b/Source/Ember/EmberDefines.h index 13544cd..e50087c 100644 --- a/Source/Ember/EmberDefines.h +++ b/Source/Ember/EmberDefines.h @@ -37,7 +37,7 @@ static void sincos(float x, float* s, float* c) namespace EmberNs { -#define EMBER_VERSION "1.0.0.20" +#define EMBER_VERSION "1.0.0.21" //#define FLAM3_COMPAT 1//Uncomment this if you want full compatibility with flam3 regarding some of the trig-based variations in Variations01.h #define EPS6 T(1e-6) #define EPS std::numeric_limits::epsilon()//Apoplugin.h uses -20, but it's more mathematically correct to do it this way. diff --git a/Source/Ember/Variation.h b/Source/Ember/Variation.h index 5c1e4c0..aeae69a 100644 --- a/Source/Ember/Variation.h +++ b/Source/Ember/Variation.h @@ -433,6 +433,7 @@ enum class eVariationId : glm::uint VAR_UNPOLAR , VAR_VIBRATION, VAR_VIBRATION2, + VAR_VIGNETTE, VAR_VORON, VAR_W , VAR_WAFFLE, @@ -849,6 +850,7 @@ enum class eVariationId : glm::uint VAR_PRE_UNPOLAR, VAR_PRE_VIBRATION, VAR_PRE_VIBRATION2, + VAR_PRE_VIGNETTE, VAR_PRE_VORON, VAR_PRE_W, VAR_PRE_WAFFLE, @@ -1265,6 +1267,7 @@ enum class eVariationId : glm::uint VAR_POST_UNPOLAR, VAR_POST_VIBRATION, VAR_POST_VIBRATION2, + VAR_POST_VIGNETTE, VAR_POST_VORON, VAR_POST_W, VAR_POST_WAFFLE, diff --git a/Source/Ember/VariationList.cpp b/Source/Ember/VariationList.cpp index 18dfd34..5a0067f 100644 --- a/Source/Ember/VariationList.cpp +++ b/Source/Ember/VariationList.cpp @@ -439,6 +439,7 @@ VariationList::VariationList() ADDPREPOSTREGVAR(Gnarly) ADDPREPOSTREGVAR(Inkdrop) ADDPREPOSTREGVAR(HexModulus) + ADDPREPOSTREGVAR(Vignette) //ADDPREPOSTREGVAR(LinearXZ) //ADDPREPOSTREGVAR(LinearYZ) //DC are special. diff --git a/Source/Ember/Variations07.h b/Source/Ember/Variations07.h index 708be70..f1946ed 100644 --- a/Source/Ember/Variations07.h +++ b/Source/Ember/Variations07.h @@ -7564,6 +7564,199 @@ private: T m_Yfact001;//Precalc. }; +/// +/// vignette by Bezo97. +/// +template +class VignetteVariation : public ParametricVariation +{ +public: + VignetteVariation(T weight = 1.0) : ParametricVariation("vignette", eVariationId::VAR_VIGNETTE, weight) + { + Init(); + } + + PARVARCOPY(VignetteVariation) + + virtual void Func(IteratorHelper& helper, Point& outPoint, QTIsaac& rand) override + { + T px = helper.In.x; + T py = helper.In.y; + T dist = std::sqrt((px - m_Posx) * (px - m_Posx) + (py - m_Posy) * (py - m_Posy)); + + if (dist < m_InnerabsPrecalc) + { + helper.Out.z = DefaultZ(helper); + + //middle part + if (m_Innerradius < 0.0) + { + helper.Out.x = 0; + helper.Out.y = 0; + return; + } + + helper.Out.x = px * m_Weight; + helper.Out.y = py * m_Weight; + return; + } + + //map to 0-1 + dist = (dist - m_InnerabsPrecalc) / m_FadeabsPrecalc; + T fade = T(1.0) - std::pow(rand.Frand01(), m_PowerhelperPrecalc); + T blur_r = m_Blur * std::pow(dist * rand.Frand01(), T(2.0)); + T blur_a = rand.Frand01() * M_2PI; + + if (m_Faderadius > 0) + { + //vignette + if (fade < dist) + { + px = 0; + py = 0; + } + else + { + px += blur_r * std::cos(blur_a); + py += blur_r * std::sin(blur_a); + } + } + else + { + //inverse vignette + if (1 - fade > dist) + { + px = 0; + py = 0; + } + else + { + px += blur_r * std::cos(blur_a); + py += blur_r * std::sin(blur_a); + } + } + + helper.Out.x = px * m_Weight; + helper.Out.y = py * m_Weight; + helper.Out.z = DefaultZ(helper); + } + + virtual string OpenCLString() const override + { + ostringstream ss, ss2; + intmax_t i = 0, varIndex = IndexInXform(); + ss2 << "_" << XformIndexInEmber() << "]"; + string index = ss2.str(); + string weight = WeightDefineString(); + string posx = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string posy = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string innerradius = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string faderadius = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string power = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string blur = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string innerabsprecalc = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string fadeabsprecalc = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + string powerhelperprecalc = "parVars[" + ToUpper(m_Params[i++].Name()) + index; + ss << "\t{\n" + << "\t\treal_t px = vIn.x;\n" + << "\t\treal_t py = vIn.y;\n" + << "\t\treal_t dist = sqrt((px - " << posx << ") * (px - " << posx << ") + (py - " << posy << ") * (py - " << posy << "));\n" + << "\n" + << "\t\tif (dist < " << innerabsprecalc << ")\n" + << "\t\t{\n" + << "\t\t\tvOut.z = " << DefaultZCl() + << "\n" + << "\t\t\tif (" << innerradius << " < (real_t)(0.0))\n" + << "\t\t\t{\n" + << "\t\t\t\tvOut.x = (real_t)(0.0);\n" + << "\t\t\t\tvOut.y = (real_t)(0.0);\n" + << "\t\t\t\treturn;\n" + << "\t\t\t}\n" + << "\n" + << "\t\t\tvOut.x = px * " << weight << ";\n" + << "\t\t\tvOut.y = py * " << weight << ";\n" + << "\t\t}\n" + << "\n" + << "\t\tdist = (dist - " << innerabsprecalc << ") / " << fadeabsprecalc << ";\n" + << "\n" + << "\t\treal_t fade = (real_t)(1.0) - pow(MwcNext01(mwc), " << powerhelperprecalc << ");\n" + << "\t\treal_t blur_r = " << blur << " * pow(dist * MwcNext01(mwc), (real_t)(2.0));\n" + << "\t\treal_t blur_a = MwcNext01(mwc) * M_2PI;\n" + << "\n" + << "\t\tif (" << faderadius << " > 0.0)\n" + << "\t\t{\n" + << "\t\t\tif (fade < dist)\n" + << "\t\t\t{\n" + << "\t\t\t\tpx = (real_t)(0.0);\n" + << "\t\t\t\tpy = (real_t)(0.0);\n" + << "\t\t\t}\n" + << "\t\t\telse\n" + << "\t\t\t{\n" + << "\t\t\t\tpx += blur_r * cos(blur_a);\n" + << "\t\t\t\tpy += blur_r * sin(blur_a);\n" + << "\t\t\t}\n" + << "\t\t}\n" + << "\t\telse\n" + << "\t\t{\n" + << "\t\t\tif (1 - fade > dist)\n" + << "\t\t\t{\n" + << "\t\t\t\tpx = (real_t)(0.0);\n" + << "\t\t\t\tpy = (real_t)(0.0);\n" + << "\t\t\t}\n" + << "\t\t\telse\n" + << "\t\t\t{\n" + << "\t\t\t\tpx += blur_r * cos(blur_a);\n" + << "\t\t\t\tpy += blur_r * sin(blur_a);\n" + << "\t\t\t}\n" + << "\t\t}\n" + << "\n" + << "\t\tvOut.x = px * " << weight << ";\n" + << "\t\tvOut.y = py * " << weight << ";\n" + << "\t\tvOut.z = " << DefaultZCl() + << "\t}\n"; + return ss.str(); + } + + virtual void Precalc() override + { + m_InnerabsPrecalc = std::abs(m_Innerradius); + m_FadeabsPrecalc = std::abs(m_Faderadius); + m_PowerhelperPrecalc = T(1.0) / std::abs(m_Power); + } + + virtual vector OpenCLGlobalFuncNames() const override + { + return vector { "Zeps" }; + } + +protected: + void Init() + { + string prefix = Prefix(); + m_Params.clear(); + m_Params.push_back(ParamWithName(&m_Posx, prefix + "vignette_posx")); + m_Params.push_back(ParamWithName(&m_Posy, prefix + "vignette_posy")); + m_Params.push_back(ParamWithName(&m_Innerradius, prefix + "vignette_inner_radius", T(0.5))); + m_Params.push_back(ParamWithName(&m_Faderadius, prefix + "vignette_fade_radius", T(0.5), eParamType::REAL_NONZERO)); + m_Params.push_back(ParamWithName(&m_Power, prefix + "vignette_power", T(4.0), eParamType::REAL_NONZERO)); + m_Params.push_back(ParamWithName(&m_Blur, prefix + "vignette_blur", T(1.0))); + m_Params.push_back(ParamWithName(true, &m_InnerabsPrecalc, prefix + "vignette_inner_abs_precalc"));//Precalc. + m_Params.push_back(ParamWithName(true, &m_FadeabsPrecalc, prefix + "vignette_fade_abs_precalc")); + m_Params.push_back(ParamWithName(true, &m_PowerhelperPrecalc, prefix + "vignette_power_helper_precalc")); + } + +private: + T m_Posx; + T m_Posy; + T m_Innerradius; + T m_Faderadius; + T m_Power; + T m_Blur; + T m_InnerabsPrecalc;//Precalc. + T m_FadeabsPrecalc; + T m_PowerhelperPrecalc; +}; + MAKEPREPOSTPARVAR(Splits3D, splits3D, SPLITS3D) MAKEPREPOSTPARVAR(Waves2B, waves2b, WAVES2B) MAKEPREPOSTPARVAR(JacCn, jac_cn, JAC_CN) @@ -7634,4 +7827,5 @@ MAKEPREPOSTPARVAR(Waves23, waves23, WAVES23) MAKEPREPOSTPARVAR(Waves42, waves42, WAVES42) MAKEPREPOSTPARVAR(Waves3, waves3, WAVES3) MAKEPREPOSTPARVAR(Waves4, waves4, WAVES4) +MAKEPREPOSTPARVAR(Vignette, vignette, VIGNETTE) } diff --git a/Source/Fractorium/AboutDialog.ui b/Source/Fractorium/AboutDialog.ui index 1c40021..3bf07b0 100644 --- a/Source/Fractorium/AboutDialog.ui +++ b/Source/Fractorium/AboutDialog.ui @@ -58,7 +58,7 @@ QFrame::NoFrame - <html><head/><body><p align="center"><span style=" font-size:10pt;">Fractorium 1.0.0.20</span></p><p align="center"><span style=" font-size:10pt;">A Qt-based fractal flame editor which uses a C++ re-write of the flam3 algorithm named Ember and a GPU capable version named EmberCL which implements a portion of the cuburn algorithm in OpenCL.</span></p><p align="center"><a href="http://fractorium.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">fractorium.com</span></a></p></body></html> + <html><head/><body><p align="center"><span style=" font-size:10pt;">Fractorium 1.0.0.21</span></p><p align="center"><span style=" font-size:10pt;">A Qt-based fractal flame editor which uses a C++ re-write of the flam3 algorithm named Ember and a GPU capable version named EmberCL which implements a portion of the cuburn algorithm in OpenCL.</span></p><p align="center"><a href="http://fractorium.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">fractorium.com</span></a></p></body></html> Qt::RichText