--Bug fixes
-File saving was broken.
--Code changes
-File saving and opening dialogs were shared between a single object which was causing trouble. Make them all use their own objects.
-Add a button to swap the pre and post affine values for all selected xforms.
--Bug fixes
-Remove the ability to change spinner values with +=-=, it was conflicting with other things and added no real value.
-All file dialog opening in Linux would freeze. No longer using native file dialogs, they are broken.
-Set default open path to the desktop if there is no settings file present, which will be the case on the first run.
-Amphibole_Supergroup.ugr palette had an invalid character in two of the palette names.
--Code changes
-Change some table header padding styles to work with new Qt. Qss reload is required.
-Ensure the open folder path setting always has a valid string in it before opening a folder.
-Add two new variations, hyperbolic and hypershift2.
-Allow for animating final xforms.
-More detailed diagnostics when any action in the OpenCL renderer fails.
-Allow for creating an OpenCL renderer which does not share a texture with the main window, and instead manually copies its final output image from GPU to CPU then back to GPU.
--Bug fixes
-Text was not properly being copied out of the Info | Bounds text box.
--Code changes
-Remove Renderer::AccumulatorToFinalImage(v4F* pixels, size_t finalOffset), it's no longer needed or makes sense.
-Controllers no longer keep track of shared status, it's kept inside the renderers.
-Make getter functions in FractoriumOptionsDialog be public.
-Support 4k monitors, and in general, properly scale any monitor that is not HD.
-Allow for a spatial filter of radius zero, which means do not use a spatial filter.
-Add new variations: concentric, cpow3, helicoid, helix, rand_cubes, sphereblur.
-Use a new method for computing elliptic which is more precise. Developed by Discord user Claude.
-Remove the 8 variation per xform limitation on the GPU.
-Allow for loading the last flame file on startup, rather than randoms.
-Use two different default quality values in the interactive renderer, one each for CPU and GPU.
-Creating linked xforms was using non-standard behavior. Make it match Apo and also support creating multiple linked xforms at once.
--Bug fixes
-No variations in an xform used to have the same behavior as a single linear variation with weight 1. While sensible, this breaks backward compatibility. No variations now sets the output point to zeroes.
-Prevent crashing the program when adjusting a value on the main window while a final render is in progress.
-The xaos table was inverted.
--Code changes
-Convert projects to Visual Studio 2017.
-Change bad vals from +- 1e10 to +-1e20.
-Reintroduce the symmetry tag in xforms for legacy support in programs that do not use color_speed.
-Compiler will not let us use default values in templated member functions anymore.
--Bug fixes
-Strips renders crashed.
-Better handling of large memory allocations by forcing a free of previous allocations.
-Final render dialog did not properly save last used extension setting.
-Density filtering progress bar in final render dialog did not update if only log scaling was being used.
--User changes
-Add many tooltips to help clarify functionality.
-Select multiple flames in library for del/move. Still only one allowed to be set as the current.
-Show checkbox for current flame. Remember this is not necessarily what's selected.
-User can now drag a square to select xforms, which keeps in sync with checkboxes.
-Remove --nframes from command line. Replace with new params: --loopframes, --interpframes, --interploops.
-Add two new options to EmberGenome: --cwloops --cwinterploops to specify whether rotation should go clockwise instead of the default counter clockwise.
-Add these to Fractorium as checkboxes.
-Apply All now also works for toggling animate flag on xforms.
-Options dialog now allows user to set whether double click toggles spinners, or right click does.
--Bug fixes
-Selecting final and non-final xforms, and then dragging the non-final did not drag the final with it.
-Selecting all xforms when a final was present, then deleting crashed the program.
-Remove support for ppm files in the command line programs, it's an outdated format.
-Switching between SP and DP kept reapplying the palette adjustments.
--Code changes
-Move build system to Visual Studio 2015 and Qt 5.6.
-SSE used during addition of points to the histogram.
-Remove last remnants of old flam3 C code and replace with C++.
-Remove unused code involving tbb::task_group.
-Make settings object a global shared_ptr singleton, so it doesn't have to be passed around.
--User changes
Thread image writing in EmberAnimate and when doing animation sequence in final render dialog.
Add total time output for verbose mode in EmberAnimate to match EmberRender.
--Bug Fixes
Fix incorrect parsing of legacy "symmetry" xform Xml element.
Fix incorrect iters ran/requested percentage in EmberAnimate to match EmberRender.
Fix motion blur being disabled when doing animations in final render dialog.
Allow for boolean command line options which default to true to be set to false.
--Code Changes
Add resource files for Ember and EmberCL.
Capture work since the last release in VersionHistory.txt.
Add Curves.h, and CurvesGraphicsView.h/cpp to support bezier color curves.
Add Curves member to Ember.
Add curves capability to EmberCL.
Remove some unused variables in the kernel created in RendererCL::CreateFinalAccumKernelString().
Use glm namespace for vec classes if GLM_VERSION >= 96, else use glm::detail.
As a result of using glm namespace, all instances of min and max had to be qualified with std::
Split ComputeCamera into that and ComputeQuality().
Reduce the amount of ComputeCamera() and MakeDmap() calls on each incremental iter that doesn't use temporal samples.
Fix clamping bug with DE filter widths.
Provide functions to return the kernels from RendererCL to assist with diagnostics and debugging.
Prevent extra newline in EmberRender when only rendering a single image.
Add the ability to delete an ember at a given index in EmberFile.
Allow deleting/focusing ember in library tab with delete and enter keys.
Reorder some code in Fractorium.h to match the tabs order.
Add and call ClearFinalImages() to clear buffers in controller to fix bug where previous CPU render would be shown for a split second when switching from OpenCL back to CPU.
Refactor ember library pointer syncing to a function SyncPointers().
Add the ability to save ember Xmls to an unique automatically generated name after the first time the user has specified a name.
--User changes
Thread image writing in EmberAnimate and when doing animation sequence in final render dialog.
Add total time output for verbose mode in EmberAnimate to match EmberRender.
--Bug Fixes
Fix incorrect iters ran/requested percentage in EmberAnimate to match EmberRender.
Fix motion blur being disabled when doing animations in final render dialog.
Allow for boolean command line options which default to true to be set to false.
--Code Changes
Minor changes to enable a Mac build.
Double the memory required for the final output buffer in RendererBase::MemoryRequired() when threading image writing.
Reuse same buffer for RgbaToRgb() in EmberRender and EmberAnimate.
Only resize in RgbaToRgb() if the two vectors are not the same.
Add a final output buffer ping-ponging mechanism to facilitate threaded writes in controllers.
--User changes
Use actual strips count when computing memory requirements in the final render dialog.
Output CL_DEVICE_ADDRESS_BITS when passing --openclinfo to command line programs.
Warn if single/total allocations are greater than the max allowed for OpenCL in the final render dialog.
Make about box properly sized for different fonts.
Dock widget is slightly resizable now.
Center scroll area when loading a new ember.
--Bug Fixes
Fix bad values left in an ember when a render with strips > 1 fails in the final render dialog.
Fix incorrect calculation in dc_cube variation when using OpenCL.
--Code Changes
Major work to get it running on Linux.
Migrate from QGLWidget to QOpenGLWidget.
Delayed init due to QOpenGLWidget.
Break RendererBase::MemoryRequired() into two functions, it and HistMemRequired() and return a tuple.
Add GlobalMemSize() and MaxAllocSize() functions in OpenCLWrapper.
Change CHOOSE_XFORM_GRAIN to be 16384, so we can & with 16383 instead of using modulo when selecting an xform. This results in a 9% speed increase on the CPU.
Save each newly loaded ember in a file called "last.flame" in the executable folder. This will help diagnose crashes that occur when switching embers.
Use nullptr instead of NULL in the Fractorium project. It had previously been done in all other places.
--User Changes
None.
--Bug Fixes
Fix broken continuity of randomness in OpenCL when using strips, broken in last build.
Fix broken density filtering dimensions in OpenCL which left black lines, broken in last build.
Fix broken preview update on when the only change is scale.
Update density filtering progress bar to 100% in final render dialog when DE radius is 0 (disabled).
--Code Changes
Make RendererBase::RandVec() virtual.
--User Changes
Remove limit on the number of xforms allowable on the GPU. This was previously 21.
Show actual strips count to be used in parens outside of user specified strips count on final render dialog.
Allow for adjustment of iteration depth and fuse count per ember and save/read these values with the xml.
Iteration optimizations on both CPU and GPU.
Automatically adjust default quality spinner value when using CPU/GPU to 10/30, respectively.
--Bug Fixes
Fix severe randomization bug with OpenCL.
Fix undo list off by one error when doing a new edit anywhere but the end of the undo list.
Make integer variation parameters use 4 decimal places in the variations list like all the others.
New build of the latest Qt to fix scroll bar drawing bug.
Prevent grid from showing as much when pressing control to increase a spinner's increment speed. Still shows sometimes, but better than before.
--Code Changes
Pass count and fuse to iterator as a structure now to allow for passing more params in the future.
Slightly different grid/block logic when running DE filtering on the GPU.
Attempt a different way of doing DE, but #define out because it ended up not being faster.
Restructure some things to allow for a variable length xforms buffer to be passed to the GPU.
Add sub batch size and fuse count as ember members, and remove them from the renderer classes.
Remove m_LastPass from Renderer. It should have been removed with passes.
Pass seeds as a buffer to the OpenCL iteration kernel, rather than a single seed that gets modified.
Slight optimization on CPU accum.
Use case statement instead of if/else for xform chosing in OpenCL for a 2% speedup on params with large numbers of xforms.
Add SizeOf() wrapper around sizeof(vec[0]) * vec.size().
Remove LogScaleSum() functions from the CPU and GPU because they're no longer used since passes were removed.
Make some OpenCLWrapper getters const.
Better ogranize RendererCL methods that return grid dimensions.
--User Changes
Size is no longer fixed to the window size.
Size scaling is done differently in the final render dialog. This fixes several bugs.
Remove Xml saving size from settings and options dialog, it no longer applies.
Final render can be broken into strips.
Set default save path to the desktop if none is found in the settings file.
Set default output size to 1920x1080 if none is found in the settings file.
--Bug Fixes
Better memory size reporting in final render dialog.
--Code Changes
Migrate to C++11, Qt 5.3.1, and Visual Studio 2013.
Change most instances of unsigned int to size_t, and int to intmax_t.
Add m_OrigPixPerUnit and m_ScaleType to Ember for scaling purposes.
Replace some sprintf_s() calls in XmlToEmber with ostringstream.
Move more non-templated members into RendererBase.
Add CopyVec() overload that takes a per element function pointer.
Add vector Memset().
Replace '&' with '+' instead of "&" in XmlToEmber for much faster parsing.
Break strips rendering out into EmberCommon and call from EmberRender and Fractorium.
Make AddAndWriteBuffer() just call WriteBuffer().
Make AddAndWriteImage() delete the existing image first before replacing it.
Add SetOutputTexture() to RendererCL to support making new textures in response to resize events.
Remove multiple return statements in RendererCL, and replace with a bool that tracks results.
Add ToDouble(), MakeEnd(), ToString() and Exists() wrappers in Fractorium.
Add Size() wrapper in EmberFile.
Make QString function arguments const QString&, and string with const string&.
Make ShowCritical() wrapper for invoking a message box from another thread.
Add combo box to TwoButtonWidget and rename.
--User Changes
Add --yaxisup and --supersample options for command line programs.
--Bug Fixes
Make certain options available only to the command line programs in
which they make sense. Most were good, some were misplaced.
--Code Changes
Include pure render time as part of stats.
Output iters/sec measurement in EmberRender and EmberAnimate.
--Bug Fixes
Spatial filter would not be correctly recreated on subsequent runs of
differing supersample values during final render.
Fix DCBubble, Funnel, SphericalN,
Wrong logic with some usage of DO_DOUBLE. Only relevant for testing.
Use uint64 for iters/sec calculation on final render dialog. int was
overflowing on extremely fast GPU renders.
--Code Changes
Make density, spatial and temporal filters preserve the values they were
created with. This helps in determining when a new instance is needed.
Better NULL checks when copying embers and xforms.
Rename members in FractoriumEmberControllerBase.h to omit duplicating
the members declared in the base.
0.4.0.9 Beta 07/27/2014
--User Changes
Properly set tab order on all controls.
Calculate and report iters/second in the final render dialog.
Immediately draw yellow dot on xform mouse down on previously unselected
xform.
--Bug Fixes
Fix GlynnSim1, GlynnSim2, GlynnSim3 and juliaNab by ensuring the first
argument to pow() is >= 0.
Ensure OpenCL platform and device combo boxes in the final render dialog
expand as needed.
--Code Changes
Make VariationTreeSpinbox take its parent VariationTreeWidgetItem as a
constructor argument. This makes SetupVariationTree() and
VariationSpinBoxValueChanged() more efficient.
Make Interference2 and ho use fabs().