-Add buttons to copy and paste affine transforms.
-Show xform names on the column headers of the xaos table.
-Add a color-coded third column to the variations tree which shows any properties of each variation which are non-standard.
-Draw a transparent circle over hovered xforms.
-Change how xforms respond to dragging. Rotate only is now the default, and scale will only happen with shift.
--Optionally do scale and rotate when holding shift, via a setting in the options dialog.
--Bug fixes
-Snapping when dragging was wrong sometimes.
-The program would very rarely crash on startup due to some values being in an uninitialized state.
--Code changes
-Change almost every variation to use fma() in OpenCL when doing computations of the form a * b + c. This provides a slight speedup, mostly in double precision mode.
-Also apply fma() to affine calcs.
-Cleanup of OpenGL affine drawing code.
-Separate the concept of hovering and selecting xforms.
-Attempt to preserve xaos when adding xforms. Note this is not an exact copy, but just a preservation of some values based on position.
-Add some acceleration to the changing of spinner values when dragging the right mouse button to adjust.
-Make the pivot be the center of the viewable area when doing drag/rotate/scale with the right mouse button.
--Clamp minimum scale to 10
--Draw a line from the mouse position to the pivot.
-Keep a cache of the last added final xform with each flame so that it can be quickly added, removed, then added back for testing its effect.
--This is not saved with the xml file and is solely for interactive editing.
--Bug fixes
-File filtering in open and save dialogs were broken.
-Right clicking on integer spin boxes was causing the context menu to pop up, when it should be supressed just like double spin boxes.
-Deleting xforms was still broken.
--Code changes
-Refactor the code for adding and pasting xforms into a single global static function called AddXformsWithXaos().
-Give tabs a height of 4px in the qss files. Looks a little large on 4k screens, but just right on HD screens which are much more common.
-Allow for styling of zero and non-zero variation tree nodes via qss.
-Allow for toggling whether to interpolate between colors in the palette editor, or to do hard cuts between colors.
-Allow for adjusting spinner values with the + = or up arrow keys to increase, and - _ or down arrow keys to decrease.
-Allow for responding to global presses of + = and - _ to cycle up or down to specify which xform is set as the current one.
-Allow for adding "layers" via xaos which will add a user-specified number of xforms, and set certain xaos values to 0 or 1.
-Add a new menu item under the Edit menu to copy the OpenCL iteration kernel source to the clipboard.
-Show text on the status bar which indicates that an OpenCL kernel compilation is taking place.
-Show xform name on xform combo box when expanded. Adjust size to fit all names.
-Draw post affine circles using dashed lines.
-Prevent QSS dialog from styling its editor, which makes it easier to see text when creating styles which have custom colors for text boxes.
--Bug fixes
-Fix up some table layouts which seemed to have regressed/decayed over time for reasons unknown.
-Using undo/redo would create a new flame in the library every time.
-Solo was not being preserved when using undo/redo.
--Code changes
-Make the solo flag be a part of the flame data now.
-Fix some tabification in the OpenCL code for EllipticVariation.
-Fix tabification in the varState code for OpenCL.
-Add an event called m_CompileBegun to RendererCL that is called right before an OpenCL compile is begun.
--This required making RendererCLBase not a pure virtual base class. Member functions just return defaults.
-Filter key presses on main window to only process the third one. This is due to Qt triggering three events for every key press.
-The palette preview table was installing an event filter for seemingly no reason. Remove it.
-Mark certain virtual functions as override in SpinBox and DoubleSpinBox.
-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().
-Allow running from outside of the folder the executable is in on Windows, by adding the install folder to the PATH variable. This was needed to properly find the palette file (even though it's mostly unneeded).
-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.
-Allow for pausing and resuming of final renders.
--Code changes
-Only instantiate float version of Palette and PaletteList, no need for double since it's never used.
-Allow for FinalRenderDialog to be queried on whether it's currently rendering.
-Convert OpenGL drawing code to use GLSL. Leave #define in until testing on multiple platforms is done.
-Always use double precision extension defines in OpenCL programs, even if DP is not selected. This is because elliptic now always uses DP.
-Allow 7 decimal places in variations spinners.
-Try to prevent infinite loop that sometimes happens when drawing grid. Unsure if this actually works since it's very hard to reproduce.
-Update /debian/changelog to use a newer version of ubuntu named artful. Users will need to add that PPA to get it via apt.
-Update copyright year to 2018.
-Allow group dragging and floating of dock widgets.
--Note this has a bug where if tabls are grouped while floating, the tab position is placed on the bottom. It restores to the top when dropping on a dock location. I've filed a bug at qt.io
-Make some tables auto size to their contents because some text appeared obscured on Linux.
-The size of the xforms and palette tabs were preventing the main window from being resized to a small size on lower resolution monitors when docked. So rework scroll areas, minimum sizes and layouts to allow for a smaller main window.
-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.
--Added panorama1 and panorama2 variations.
Bug fixes:
--crackle had a bug with Nvidia GPUs.
Code changes:
--crackle now uses real_t* for cache rather than real2. This is what was causing the bug.
--Make the local offsets array used in crackle a precalc since it's the same for all. This reduces register pressure.
--Get rid of all usages of real3, just to be safe since Nvidia doesn't like them.
--#define TOTAL_GLOBAL_SIZE_END in the OpenCL iteration kernel just for debugging purposes to see how large the parvars buffer is.
--Disallow the use of synth when randomly generating xforms if the user has an Nvidia device present on their system.
Code changes:
--Use some CPU defines in CL code.
--Change curves color scaling buffer to be 2^16 per channel instead of 2^17 which was probably overkill.
--Code in RendererClDevice::Init() to detect Nvidia was wrong even thought it technically worked.