mirror of
https://bitbucket.org/mfeemster/fractorium.git
synced 2025-06-30 13:26:02 -04:00
--User changes
-Add new variations: bubbleT3D, crob, hexaplay3D, hexcrop, hexes, hexnix3D, loonie2, loonie3, nBlur, octapol and synth. -Allow for pre/post versions of dc_bubble, dc_cylinder and dc_linear whereas before they were omitted. -When saving a file with multiple embers in it, detect if time values are all the same and if so, start them at zero and increment by 1 for each ember. -Allow for numerous quality increases to be coalesced into one. It will pick up at the end of the current render. -Show selection highlight on variations tree in response to mouse hover. This makes it easier to see for which variation or param the current mouse wheel action will apply. -Make default temporal samples be 100, whereas before it was 1000 which was overkill. -Require the shift key to be held with delete for deleting an ember to prevent it from triggering when the user enters delete in the edit box. -This wasn't otherwise fixable without writing a lot more code. --Bug fixes -EmberGenome was crashing when generating a sequence from a source file with more than 2 embers in it. -EmberGenome was improperly handling the first frame of a merge after the last frame of the loop. -These bugs were due to a previous commit. Revert parts of that commit. -Prevent a zoom value of less than 0 when reading from xml. -Slight optimization of the crescents, and mask variations, if the compiler wasn't doing it already. -Unique file naming was broken because it was looking for _# and the default names ended with -#. -Disallow renaming of an ember in the library tree to an empty string. -Severe bug that prevented some variations from being read correctly from params generated outside this program. -Severe OpenCL randomization bug. The first x coordinates of the first points in the first kernel call of the first ember of a render since the OpenCL renderer object was created were not random and were mostly -1. -Severe bug when populating xform selection distributions that could sometimes cause a crash due to roundoff error. Fix by using double. -Limit the max number of variations in a random ember to MAX_CL_VARS, which is 8. This ensures they'll look the same on CPU and GPU. -Prevent user from saving stylesheet to default.qss, it's a special reserved filename. --Code changes -Generalize using the running sum output point inside of a variation for all cases: pre, reg and post. -Allow for array variables in variations where the address of each element is stored in m_Params. -Qualify all math functions with std:: -No longer use our own Clamp() in OpenCL, instead use the standard clamp(). -Redesign how functions are used in the variations OpenCL code. -Add tests to EmberTester to verify some of the new functionality. -Place more const and override qualifiers on functions where appropriate. -Add a global rand with a lock to be used very sparingly. -Use a map instead of a vector for bad param names in Xml parsing. -Prefix affine interpolation mode defines with "AFFINE_" to make their purpose more clear. -Allow for variations that change state during iteration by sending a separate copy of the ember to each rendering thread. -Implement this same functionality with a local struct in OpenCL. It's members are the total of all variables that need to change state within an ember. -Add Contains() function to Utils.h. -EmberRender: print names of kernels being printed with --dump_kernel option. -Clean up EmberTester to handle some of the recent changes. -Fix various casts. -Replace % 2 with & 1, even though the compiler was likely doing this already. -Add new file Variations06.h to accommodate new variations. -General cleanup.
This commit is contained in:
@ -114,7 +114,7 @@ public:
|
||||
{
|
||||
if (i != j && m_Embers[i].m_Name == m_Embers[j].m_Name)
|
||||
{
|
||||
m_Embers[j].m_Name = m_Embers[j].m_Name + "_" + ToString(++x).toStdString();
|
||||
m_Embers[j].m_Name = IncrementTrailingUnderscoreInt(QString::fromStdString(m_Embers[j].m_Name)).toStdString();
|
||||
j = 0;
|
||||
}
|
||||
}
|
||||
@ -130,6 +130,33 @@ public:
|
||||
return "Flame_" + QDateTime(QDateTime::currentDateTime()).toString("yyyy-MM-dd-hhmmss");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return a copy of the string which ends with _# where # is the
|
||||
/// previous number at that position incremented by one.
|
||||
/// If the original string did not end with _#, the returned
|
||||
/// string will just have _1 appended to it.
|
||||
/// </summary>
|
||||
/// <param name="str">The string to process</param>
|
||||
/// <returns>The original string with the number after the final _ character incremented by one</returns>
|
||||
static QString IncrementTrailingUnderscoreInt(const QString& str)
|
||||
{
|
||||
bool ok = false;
|
||||
size_t num = 0;
|
||||
QString endSection;
|
||||
QString ret = str;
|
||||
int lastUnderscore = str.lastIndexOf('_');
|
||||
|
||||
if (lastUnderscore != -1)
|
||||
{
|
||||
endSection = str.section('_', -1);
|
||||
num = endSection.toULongLong(&ok);
|
||||
ret.chop(str.size() - lastUnderscore);
|
||||
}
|
||||
|
||||
ret += "_" + QString::number(num + 1);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ensures a given input filename is unique by appending a count to the end.
|
||||
/// </summary>
|
||||
@ -146,10 +173,11 @@ public:
|
||||
QString path = original.absolutePath() + '/';
|
||||
QString base = original.completeBaseName();
|
||||
QString extension = original.suffix();
|
||||
|
||||
|
||||
do
|
||||
{
|
||||
newPath = path + base + "_" + ToString(counter++) + "." + extension;
|
||||
base = IncrementTrailingUnderscoreInt(base);
|
||||
newPath = path + base + "." + extension;
|
||||
}
|
||||
while (QFile::exists(newPath));
|
||||
|
||||
@ -164,7 +192,7 @@ public:
|
||||
/// <returns>The default ember name</returns>
|
||||
static QString DefaultEmberName(uint i)
|
||||
{
|
||||
return DefaultFilename() + "-" + ToString(i);
|
||||
return DefaultFilename() + "_" + ToString(i);
|
||||
}
|
||||
|
||||
QString m_Filename;
|
||||
|
Reference in New Issue
Block a user