-Show image index in the library and sequence trees.
-Add progress bar showing when preview renders are complete.
-Automatically show animation preview when sequence generation is done.
-Add the ability in the final render dialog to start a render within a sequence from a given point, rather than always having to start from the beginning.
--Allow using the image index as its name rather than the file name.
-Add a progress bar for sequence previews.
--Bug fixes
-Attempt to prevent crash when dragging in a new file while the previews from the current file are still rendering.
-Remove the Type field from the variations tree and instead just put the type indicator icon next to the variation name.
-Double clicking to toggle variation parameter spinners now resets the value to the default if there is one, else it uses zero. If it is already using the default, it is toggled to 0.
-Add a new button to toggle xaos on and off.
-When duplicating a flame, insert it immediately after the one being duplicated instead of at the end of the file.
-When switching between flames in a file, keep the same xform index selected rather than resetting it to the first xform each time.
-Create a threaded writer for the final render and EmberAnimate so the rendering process does not get delayed by file saving which may take a long time.
-Remove warning which said "Frames per rot cannot be greater than one while Rotations is zero" when generating a sequence.
-Add the Circle_Rand variation from Chaotica.
-Add tool tips to clarify the following items:
--Auto Unique Filenames checkbox in the options dialog.
--Xaos table headers.
--Bug fixes
-Generating sequences using the following variations would be done incorrectly: circletrans1, collideoscope, crob, curlsp, glynnsim1, glynnsim2, hypercrop, julian, julian, mobiusn, nblur, waves2, wavesn.
-Adding/removing nodes from the color curve had accidentally been disabled.
-The applied xaos weight table was not showing normalized weight values.
-Changing the size of a flame was not observing the Apply To All checkbox.
-Do not clamp the Rotate field to +/-180, because this causes the rotation to switch from CW to CCW during sequence generation. Instead, leave it exactly as the user entered it so the rotations proceed in the same direction.
-Add new preset dimensions to the right click menu of the width and height fields in the editor.
-Change QSS stylesheets to properly handle tabs.
-Make tabs rectangular by default. For some reason, they had always been triangular.
--Bug fixes
-Incremental rendering times in the editor were wrong.
--Code changes
-Migrate to Qt6. There is probably more work to be done here.
-Migrate to VS2022.
-Migrate to Wix 4 installer.
-Change installer to install to program files for all users.
-Fix many VS2022 code analysis warnings.
-No longer use byte typedef, because std::byte is now a type. Revert all back to unsigned char.
-Upgrade OpenCL headers to version 3.0 and keep locally now rather than trying to look for system files.
-No longer link to Nvidia or AMD specific OpenCL libraries. Use the generic installer located at OCL_ROOT too.
-Add the ability to change OpenCL grid dimensions. This was attempted for investigating possible performance improvments, but made no difference.
This has not been verified on Linux or Mac yet.
--User changes
-Allow users to set the Exp value when using the Exp temporal filter type.
-Set the default temporal filter type to be Box, which does not alter the palette values at all during animation. This is done to avoid confusion when using Gaussian or Exp which can produce darkened images.
--Bug fixes
-Sending a sequence to the final render dialog when the keyframes had non zero rotate and center Y values would produce off center animations when rendered.
-Temporal filters were being unnecessarily recreated many times when rendering or generating sequences.
-Exp filter was always treated like a Box filter.
--Code changes
-Add a new member function SaveCurrentAsXml(QString filename = "") to the controllers which is only used for testing.
-Modernize some C++ code.
-Allow dragging in folders which will be recursively traversed for flame files.
-Allow for adjusting scale via keyboard with the < and > keys.
-Show the count of opened flames on the header of the library tree.
--Bug fixes
-Attempt to preserve xaos when pasting xforms.
--Code changes
-Default flam3 compatibility mode to true.
-Fix crash on palette editor when opening it with certain palette files in a particular order.
-An xform with only a post variation in it might have showed up wrong.
-The xforms combo box was obscuring the name of the xforms by not being wide enough.
-Make variation state preservation be a little bit more correct in OpenCL.
--Code changes
-Make all iterators on the CPU use a temporary point.
-Fix variations: blob2 (broken on CPU), epispiral, hole.
-Fix reading variations from Apophysis: supershape.
-Bump render was broken.
--Code changes
-Flip precalc sina/cosa and apply everywhere by flipping the usage. Flam3 had these reversed and it made the code confusing to read.
-Fix xform selection logic to prevent selecting hidden pre and post xforms.
-Add hex_modulus.
--Bug fixes
-starblur was wrong.
--Code changes
-Optimize Truchet_hex_crop, Truchet_hex_fill.
-Cleanup Truchet_inv.
-Add new file Variations08.h, and move Gnarly and inkdrop there.
-Add new variations waves22, waves23, waves42, waves3 and waves4 from user tatasz.
-Add new stylesheet called lightdark.qss which gives a more modern look to the dark theme. Started by Michel Mastriani (triptychaos).
--Included in the qmake and Wix installers.
--Code changes
-Add a new C# project that attempts to convert Apophysis plugins to Fractorium style Variation classes. It's not entirely perfect, but gets most of the job done much more quickly than doing so manually.
-Remove unused OpenCL functions from variations: elliptic, poincare, mask, bMod, bSwirl, bTransform, bCollide, farblur, popcorn2_3D, falloff, falloff2, falloff3, crackle2, waves2b, hypercrop, depth_gaussian2, depth_sine, depth_sine2, dust, asteria, vibration, vibration2, arctanh, smartshape, squares, starblur2, Truchet,.
-Add code in EmberTester to automatically detect such unused functions.
-Show common folder locations such as documents, downloads, pictures in the sidebar in all file dialogs.
-Warning message about exceeding memory in final render dialog now suggests strips as the solution to the problem.
-Strips now has a tooltip explaining what it does.
-Allow more digits in the spinners on the color section the flame tab.
-Add manually adjustable size spinners in the final render dialog. Percentage scale and absolute size are fully synced.
-Default prefix in final render is now the filename when doing animations (coming from sequence section of the library tab).
-Changed the elliptic variation back to using a less precise version for float, and a more precise version for double. The last release had it always using double.
-New applied xaos table that shows a read-only view of actual weights by taking the base xform weights and multiplying them by the xaos values.
-New table in the xaos tab that gives a graphical representation of the probability that each xform is chosen, with and without xaos.
-Add button to transpose the xaos rows and columns.
-Add support for importing .chaos files from Chaotica.
--Pasting back to Chaotica will work for most, but not all, variations due to incompatible parameter names in some.
-Curves are now splines instead of Bezier. This adds compatibility with Chaotica, but breaks it for Apophysis. Xmls are still pastable, but the color curves will look different.
--The curve editor on the palette tab can now add points by clicking on the lines and remove points by clicking on the points themselves, just like Chaotica.
--Splines are saved in four new xml fields: overall_curve, red_curve, green_curve and blue_curve.
-Allow for specifying the percentage of a sub batch each thread should iterate through per kernel call when running with OpenCL. This gives a roughly 1% performance increase due to having to make less kernel calls while iterating.
--This field is present for interactive editing (where it's not very useful) and in the final render dialog.
--On the command line, this is specified as --sbpctth for EmberRender and EmberAnimate.
-Allow double clicking to toggle the supersample field in the flame tab between 1 and 2 for easily checking the effect of the field.
-When showing affine values as polar coordinates, show angles normalized to 360 to match Chaotica.
-Fuse Count spinner now toggles between 15 and 100 when double clicking for easily checking the effect of the field.
-Added field for limiting the range in the x and y direction that the initial points are chosen from.
-Added a field called K2 which is an alternative way to set brightness, ignored when zero.
--This has no effect for many variations, but hs a noticeable effect for some.
-Added new variations:
arcsech
arcsech2
arcsinh
arctanh
asteria
block
bwraps_rand
circlecrop2
coth_spiral
crackle2
depth_blur
depth_blur2
depth_gaussian
depth_gaussian2
depth_ngon
depth_ngon2
depth_sine
depth_sine2
dragonfire
dspherical
dust
excinis
exp2
flipx
flowerdb
foci_p
gaussian
glynnia2
glynnsim4
glynnsim5
henon
henon
hex_rand
hex_truchet
hypershift
lazyjess
lens
lozi
lozi
modulusx
modulusy
oscilloscope2
point_symmetry
pointsymmetry
projective
pulse
rotate
scry2
shift
smartshape
spher
squares
starblur2
swirl3
swirl3r
tanh_spiral
target0
target2
tile_hlp
truchet_glyph
truchet_inv
truchet_knot
unicorngaloshen
vibration
vibration2
--hex_truchet, hex_rand should always use double. They are extremely sensitive.
--Bug fixes:
-Bounds sign was flipped for x coordinate of world space when center was not zero.
-Right clicking and dragging spinner showed menu on mouse up, even if it was very far away.
-Text boxes for size in final render dialog were hard to type in. Same bug as xform weight used to be so fix the same way.
-Fix spelling to be plural in toggle color speed box.
-Stop using the blank user palette to generate flames. Either put colored palettes in it, or exclude it from randoms.
-Clicking the random palette button for a palette file with only one palette in it would freeze the program.
-Clicking none scale in final render did not re-render the preview.
-Use less precision on random xaos. No need for 12 decimal places.
-The term sub batch is overloaded in the options dialog. Change the naming and tooltip of those settings for cpu and opencl.
--Also made clear in the tooltip for the default opencl quality setting that the value is per device.
-The arrows spinner in palette editor appears like a read-only label. Made it look like a spinner.
-Fix border colors for various spin boxes and table headers in the style sheet. Requires reload.
-Fix a bug in the bwraps variation which would produce different results than Chaotica and Apophysis.
-Synth was allowed to be selected for random flame generation when using an Nvidia card but it shouldn't have been because Nvidia has a hard time compiling synth.
-A casting bug in the OpenCL kernels for log scaling and density filtering was preventing successful compilations on Intel iGPUs. Fixed even though we don't support anything other than AMD and Nvidia.
-Palette rotation (click and drag) position was not being reset when loading a new flame.
-When the xform circles were hidden, opening and closing the options dialog would improperly reshow them.
-Double click toggle was broken on integer spin boxes.
-Fixed tab order of some controls.
-Creating a palette from a jpg in the palette editor only produced a single color.
--Needed to package imageformats/qjpeg.dll with the Windows installer.
-The basic memory benchmark test flame was not really testing memory. Make it more spread out.
-Remove the temporal samples field from the flame tab, it was never used because it's only an animation parameter which is specified in the final render dialog or on the command line with EmberAnimate.
--Code changes:
-Add IsEmpty() to Palette to determine if a palette is all black.
-Attempt to avoid selecting a blank palette in PaletteList::GetRandomPalette().
-Add function ScanForChaosNodes() and some associated helper functions in XmlToEmber.
-Make variation param name correction be case insensitive in XmlToEmber.
-Report error when assigning a variation param value in XmlToEmber.
-Add SubBatchPercentPerThread() method to RendererCL.
-Override enterEvent() and leaveEvent() in DoubleSpinBox and SpinBox to prevent the context menu from showing up on right mouse up after already leaving the spinner.
-Filtering the mouse wheel event in TableWidget no longer appears to be needed. It was probably an old Qt bug that has been fixed.
-Gui/ember syncing code in the final render dialog needed to be reworked to accommodate absolute sizes.
-Disable Start button in final render dialog when Pause is clicked.
--Bug fixes
-Rapidly changing spinner values was causing the OpenCL renderer to report a failure, when it was really just aborting.
--Code changes
-Renderers never internally set abort to true due to a failure. Abort is only set to true by the calling code.
-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 new palettes from user Rubydeva.
--Bug fixes
-Avoid an occasional divide by zero in the OpenCL renderer when using the interactive editor.
--Code changes
-Use exact comparisons in IsID() and IsZero() in Affine2D.
-When testing for bad point values while iterating, only test for NaN now.
-For rendering with OpenCL on the command line and in the final render dialog, use an optimized kernel that does a direct assignment for any affines which are ID.
-Further work on the About box.
--Change qss files to make the text box in the About box be the same color as the one in the style dialog, so the link text is easier to see.
--This requires reloading the qss file.
--Bug fixes
-Pre/post assign method was wrong for Sphereblur, Concentric, RandCubes and PixelFlow.
--Code changes
-Make Hypershift2 use MwcNextRange() instead of MwcNext() %.
-Add m_HasPre to Xform similar to m_HasPost, to skip application of the affine if it's the ID matrix (in this case just assign the input x and y points). This gives a 5% speedup.
-New look for the About dialog, it was growing too large before. More work to be done on it in a follow up commit.
--Bug fixes
-Fix build with new glm, no longer uses type_int.hpp.
-Double clicking on width or height spinner resizes both, but scales to the one double clicked.
--Bug fixes
-Show grid setting was not being preserved during program run, only on close.
-Zooming with the mouse wheel was broken for images whose size is greater than the screen area.
-No longer constrain pitch, yaw or depth spinners to -180 - 180.
--Bug fixes
-Properly set color index on padded xforms.
-Adding a padding final xform included a linear variation with a weight of zero to not appear empty. Made it have a weight of 1.
-Always write animate tag on final xform when saving to Xml.
-Motion was being applied to the wrong flame in SheepTools::Edge(), so apply it to the correct one.
-Prevent divide by zero when normalizing variation weights.
-Was accidentally adding the placeholder value of -9999 for motion_offset to varation weights and parameters when applying motion. Set to zero if no value present.
-Clamp flame rotation values to -180 - 180 when reading a flame from Xml.
-Events were not properly wired for user changes in the random rotations per blend controls in the sequencer.
-Fix major UI bugs with sequencer min/max random controls which made it nearly impossible to hand type values.
-Values from rotations per blend and rotations per blend max were not being saved to file between program runs.
-Checking animate for an xform was not applied to all flames even if Apply All was checked.
-Changing interpolation type, temporal filter width, temporal type, and affine interpolation type were not actually saving to the flame when changed.
-Grid on the main window was not being drawn at the right scale initially due to some OpenGL initialization occurring in the wrong order.
-Severe bugs in sequence generation code:
--Improperly detected padding xforms.
--When looking for specific variations during xform aligning, only presence was detected, when it should have been presence plus a weight greater than zero.
--When adding specific variations during xform aligning, must first remove any variations of that type.
--Two variables were unsigned when they should have been signed. This prevented large blocks of code from ever executing.
--When interpolating affines, an EPS that was too small was used, causing affine values to interpolate incorrectly. Instead use 1e-10 to ensure results equal to flam3.
--Code changes
-Modify FractoriumEmberController::UpdateXform() to pass the selected xform index as well as the absolute index to func().
-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.
--Add support for Exr files which use 32-bit floats for each RGBA channel. Seems to come out too washed out.
--Allow for clearing an individual color curve.
--Allow for saving multiple image types in EmberRender and EmberAnimate. All writes are threaded.
--Remove --bpc command line argument. Add format png16 as a replacement.
--Remove --enable_jpg_comments and --enable_png_comments command line arguments, and replace them with --enable_comments which applies to jpg, png and exr.
--Add menu items to variations and affine spinners which allow for easy entry of specific numeric values like pi.
--Make final render dialog be wider rather than so tall.
Bug fixes:
--Fix some OpenCL compile errors on Mac.
--Remove ability to save bitmap files on all platforms but Windows.
Code changes:
--New dependency on OpenEXR.
--Allow Curves class to interact with objects of a different template type.
--Make m_Curves member of Ember always use float as template type.
--Set the length of the curves array to always be 2^17 which should offer enough precision with new 32-bit float pixel types.
--Set pixel types to always be 32-bit float. This results in a major reduction of code in the final accumulation part of Renderer.h/cpp.
--Remove corresponding code from RendererCL and FinalAccumOpenCLKernelCreator.
--Remove Transparency, NumChannels and BytesPerPixel setters from Renderer.h/cpp.
--Add new global functions to format final image buffers and place all alpha calculation and scaling code in them.
--Blending is no longer needed in OpenGLWidget because of the new pixel type.
--Make new class, AffineDoubleSpinBox.
--Attempt to make file save dialog code work the same on all OSes.
--Remove some unused functions.
--Bug fixes
-Fractorium would occasionally freeze after dismissing the final render dialog because some values were not properly re-initialized.
--Code changes
-Remove VS 2013 build files.
-Qualify sqrt with std:: in ColorTriangle.cpp
-Bump to version 1.0.0.3
-Remove all code for opacity adjustment, it's no longer needed.
-Small optimization on accumulating to the histogram on the CPU.
-Add a palette editor.
-Add support for reading .ugr/.gradient/.gradients palette files.
-Allow toggling on spinners whose minimum value is not zero.
-Allow toggling display of image, affines and grid.
-Add new variations: cylinder2, circlesplit, tile_log, truchet_fill, waves2_radial.
--Bug fixes
-cpow2 was wrong.
-Palettes with rapid changes in color would produce slightly different outputs from Apo/Chaotica. This was due to a long standing bug from flam3.
-Use exec() on Apple and show() on all other OSes for dialog boxes.
-Trying to render a sequence with no frames would crash.
-Selecting multiple xforms and rotating them would produce the wrong rotation.
-Better handling when parsing flames using different encoding, such as unicode and UTF-8.
-Switching between SP/DP didn't reselect the selected flame in the Library tab.
--Code changes
-Make all types concerning palettes be floats, including PaletteTableWidgetItem.
-PaletteTableWidgetItem is no longer templated because all palettes are float.
-Include the source colors for user created gradients.
-Change parallel_for() calls to work with very old versions of TBB which are lingering on some systems.
-Split conditional out of accumulation loop on the CPU for better performance.
-Vectorize summing when doing density filter for better performance.
-Make all usage of palettes be of type float, double is pointless.
-Allow palettes to reside in multiple folders, while ensuring only one of each name is added.
-Refactor some palette path searching code.
-Make ReadFile() throw and catch an exception if the file operation fails.
-A little extra safety in foci and foci3D with a call to Zeps().
-Cast to (real_t) in the OpenCL string for the w variation, which was having trouble compiling on Mac.
-Fixing missing comma between paths in InitPaletteList().
-Move Xml and PaletteList classes into cpp to shorten build times when working on them.
-Remove default param values for IterOpenCLKernelCreator<T>::SharedDataIndexDefines in cpp file.
-Change more NULL to nullptr.
--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.
-Better handling of crossed min/max DE filter values on the GUI.
-Changes to spatial and density filter values will no longer restart the entire render.
-Support reading cam_zoom from xml as zoom since JWildfire uses cam_zoom.
-Change drag n drop behavior: the default is now to append, hold Ctrl to overwrite.
-Set max value of zoom to 25 because it will crash with values around 28 or 29 due to numeric overflow when scaling quality.
-Update links in About Dialog.
-Rename some controls in Options Dialog.
-Move the color curves control to the Palette tab.
--Bug fixes
-Remove extra space in info tree text when dealing with a linked xform.
-Update summary xform name field whenever xform name changes.
-Get rid of selection border on summary tab xform tree cells.
-Only add variations from Xml that have a non-zero weight. There seemed to be spurious flattens coming from Apo with a weight of 0.
--Code changes
-Gutters are now a fixed size of 8 * supersample.
-Use stl data() member to get pointer to first element instead of &vec[0].
-Eliminate extra calls in renderer to ComputeBounds(), CreateSpatialFilter() and CreateTemporalFilter() to only be done at the start of a render.
-Another attempt at vectorizing LogScaleDensityFilter(). Vectorizes, but not sure if it helps.
-Some other loop optimizations in Renderer.
-No longer check temporal samples in response to some control changes, they are always 1 in the interactive renderer.
-Add 4 new possible arguments to EmberGenome:
--allvars: Print the names of all supported variations.
--regvars: Print the names of all supported regular variations.
--prevars: Print the names of all supported pre variations.
--postvars: Print the names of all supported post variations.
-Add a new dialog for editing QSS stylesheets. Allow for saving, reloading and setting styles as default.
--Include a dark style with the installation called dark.qss.
--Also add support for themes such as Fusion.
--Resize some controls to better fit with the new style.
-Add an option to specify the number of random embers generated on startup. 1 is the minimum and the default.
--Bug fixes
-Properly enable/disable thread priority label in final render dialog in response to enable/disable of the OpenCL checkbox.
-Remove all inline stylesheets.
-Show xaos spinners with 6 decimal places.
--Code changes
-Remove redundant comparisons to nullptr, use ! instead;
-Give some controls valid names instead of the auto generated ones.
-DoubleSpinBoxTableItemDelegate.h: Add virtual keyword to overridden functions.
--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.