-Add variations filter/selection dialog.
--Bug fixes
-Fix summary window not properly indicating the presence of pose affine.
-Remove a file named Fractorium.aps which had been erroneously committed a year ago.
--Code changes
-Use qobject_cast instead of dynamic_cast where appropriate.
-Add more override keyword where appropriate.
-Add variations list to settings for filter dialog.
-Add motion support from Simon Detheridge at the ember level instead of just individual xforms:
Add the ability to manipulate camera pitch, yaw and other goodies during flame rotation using a new element specified at the top-level of the flame.
Create a new 'saw' motion function, so that these values can effectively be looped (e.g. yaw -1 to +1) over the course of a rotation.
Add an offset to existing motion elements, to start them partway through their cycle. This would (for example) enable creating circular motion of xform affines, by combining two offset sine waves, one with an offset of 0.25 or 0.75.
Fix loops in EmberGenome (they only had an on/off effect - this was broken in flame-genome as well) and make the loop count floating-point as well. For sequence animations, it's not necessary for clips to loop precisely if they're not designed specifically for the ES project.
Similarly, there's no need for motion_frequency to be an integer value either so this was changed to allow motion that doesn't necessarily start or end at the loop boundary.
I've attempted to keep each bit of functionality in its own commit.
There's an argument as to whether to call the new flame motion elements <flame_motion/> (to differentiate programmatically) or just <motion/> (for consistency within the file) -- I opted for the former because it was easier to modify the xml parser that way.
--Code changes
-Change FlameMotion.h to EmberMotion.h to keep the naming convention consistent.
-Made elements of EmberMotion.m_MotionParams into their own type, MotionParam, which allows for CopyVec() to work.
-Change m_FlameMotionElements to m_EmberMotionElements in Ember.
-Use CopyVec() for EmberMotion instead of manual copy in copy constructors.
-Add exports in Ember.cpp for EmberMotion.
-Format eEmberMotionParam enum with one entry per line since it has many entries.
-Use fabs() in XmlToEmber instead of glm::abs.
-Minor formatting.
Allow for setting rendering thread priorities from the command line and final render dialog. Currently only implemented on Windows.
Show estimated time left on the final render dialog.
Sort palette list by name, instead of by index in the palette file.
Sorting can be flipped by clicking the column headers of the palette table.
--Code changes
Remove unnecessary connect() statement in Variations tab.
More efficient table on the Xaos tab when using xaos on a flame with a large number of xforms.
--Code changes
Use QTableView instead of QTableWidget for the xaos table.
Add custom DoubleSpinBoxTableItemDelegate for this.
Make row and column toggling functions work for QTableView and QTableWidget.
Remove some dead code from Fractorium.h/cpp
Miscellaneous hacks to keep it building on Linux.
Add the ability to apply operations to a selection of xforms, rather than just the current one.
Update tool tips accordingly.
--Bug fixes
Fix NAN in equalized weight calculation when all weights are set to 0.
--Code changes
Clean up strange nested usage of Update([&]()) calls when changing xform color index via either the spinner or scroll bar. Made no sense.
Make ISAAC RandBit() use RandByte() to be slightly more efficient.
Put FillXforms() in the controller where it belongs, rather than the main window class.
Add UpdateXform() function to the controller to handle applying operations to multiple xforms.
Remove the word "Current" out of most xform related functions because they now operate on whatever is selected.
Properly use Update() for various xform operations whereas before it was manually calling UpdateRender().
Also properly use Update() in places where it was erroneously using UpdateXform() for things that did not involve xforms.
Block signals in FillXaosTable().
Add new file named FractoriumXformsSelect.cpp to handle new xform selection code.
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.
-Remove unneeded glFinish() call in GLWidget.
-Remove unneeded AMD_OS_WIN preprocessor in several projects.
-Define NVIDIA in all projects that use the NvidiaRelease build and depend on OpenCL.
--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.
Fix small bug when setting the current ember in the final render dialog when showing it.
Have Wix installer point to proper location for installed vcredist DLLs.
Remove VS2010 builds dir.
--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().
0.4.0.7 Beta 07/26/2014
--User Changes
Color code xforms like Apo does.
Change other aspects of xform color drawing.
Add option to invert the Y axis to both the options final render
dialogs.
Coordinate Y axis setting with preview renders.
Add option to show all xforms when dragging. Previously, only the
current one was shown.
Make final render dialog appear in the middle of the screen.
Immediately draw yellow selection dot on mouse down.
--Bug Fixes
Resize final render dialog vertically if it's taller than the 90% of the
desktop area.
0.4.0.5 Beta 07/18/2014
--User Changes
Allow for vibrancy values > 1.
Add flatten and unflatten menu items.
Automatically flatten like Apophysis does.
Add plugin and new_linear tags to Xml to be compatible with Apophysis.
--Bug Fixes
Fix blur, blur3d, bubble, cropn, cross, curl, curl3d, epispiral, ho,
julia3d, julia3dz, loonie, mirror_x, mirror_y, mirror_z, rotate_x,
sinusoidal, spherical, spherical3d, stripes.
Unique filename on final render was completely broken.
Two severe OpenCL bugs. Random seeds were biased and fusing was being
reset too often leading to results that differ from the CPU.
Subtle, but sometimes severe bug in the setup of the xaos weights.
Use properly defined epsilon by getting the value from
std::numeric_limits, rather than hard coding 1e-6 or 1e-10.
Omit incorrect usage of epsilon everywhere. It should not be
automatically added to denominators. Rather, it should only be used if
the denominator is zero.
Force final render progress bars to 100 on completion. Sometimes they
didn't seem to make it there.
Make variation name and params comparisons be case insensitive.
--Code Changes
Make ForEach and FindIf wrappers around std::for_each and std::find_if.