--User changes

-Fix stylesheets.
-Make various fields in the options window be resettable via double click.
-Get stylesheets working properly on Windows and Linux with Qt6.
-Set default style to Fusion.

--Code changes
-Get build and deployment scripts working with latest versions of Qt6, AppImage, and various library dependencies.
-Add two new macros so it would build with the latest gcc: SINGLETON_DERIVED_DECL_T and SINGLETON_DERIVED_IMPL_T.
-Small changes to opencl.hpp.
-Center progress bars on Linux.
-Proper sizing of vertical header on the xaos visualization table on Linux.
This commit is contained in:
Person
2023-06-22 19:25:53 -06:00
parent 6b641d233d
commit 484b2e3123
20 changed files with 843 additions and 765 deletions

View File

@ -49,7 +49,7 @@ public:
bool IsModifiable(const string& filename);
const map<string, vector<Palette<T>>>& Palettes() const;
SINGLETON_DERIVED_DECL(PaletteList<T>);
SINGLETON_DERIVED_DECL_T(PaletteList, T);
private:
PaletteList();
bool Save(const string& filename);

View File

@ -277,6 +277,14 @@ protected:
x(const x& other) = delete; \
const x& operator=(const x& other) = delete//Semicolon deliberately omitted to force it on the caller.
//Use this if the body of the destructor will be implemented in a cpp file and the type is templated.
#define SINGLETON_DERIVED_DECL_T(x, T) \
friend class Singleton<x<T>>; \
public: \
~x(); \
x(const x& other) = delete; \
const x& operator=(const x& other) = delete//Semicolon deliberately omitted to force it on the caller.
//Use this if the body of the destructor is empty and is will be implemented inline in the header file.
#define SINGLETON_DERIVED_IMPL(x) \
friend class Singleton<x>; \
@ -285,6 +293,14 @@ protected:
x(const x& other) = delete; \
const x& operator=(const x& other) = delete
//Use this if the body of the destructor is empty and is will be implemented inline in the header file and the type is templated.
#define SINGLETON_DERIVED_IMPL_T(x, T) \
friend class Singleton<x<T>>; \
public: \
~x(){} \
x(const x& other) = delete; \
const x& operator=(const x& other) = delete
/// <summary>
/// The calculations in some variations were changed from what they were in flam3/Apophysis to match Chaotica.
/// Some users prefer the old functionality, so provide an option to retain it.

View File

@ -709,7 +709,7 @@ public:
}
}
SINGLETON_DERIVED_IMPL(VarFuncs<T>);
SINGLETON_DERIVED_IMPL_T(VarFuncs, T);
private:
/// <summary>

View File

@ -49,7 +49,7 @@ public:
const vector<const Variation<T>*>& NonParametricVariations() const;
const vector<const ParametricVariation<T>*>& ParametricVariations() const;
SINGLETON_DERIVED_DECL(VariationList<T>);
SINGLETON_DERIVED_DECL_T(VariationList, T);
private:
VariationList();

File diff suppressed because it is too large Load Diff

View File

@ -25,6 +25,10 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(QWidget* p, Qt::WindowF
m_Info = OpenCLInfo::Instance();
m_Fractorium = qobject_cast<Fractorium*>(p);
m_Settings = FractoriumSettings::DefInstance();
ui.FinalRenderIterationProgress->setAlignment(Qt::AlignCenter);
ui.FinalRenderFilteringProgress->setAlignment(Qt::AlignCenter);
ui.FinalRenderAccumProgress->setAlignment(Qt::AlignCenter);
ui.FinalRenderTotalProgress->setAlignment(Qt::AlignCenter);
ui.FinalRenderThreadCountSpin->setRange(1, Timing::ProcessorCount());
connect(ui.FinalRenderEarlyClipCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnEarlyClipCheckBoxStateChanged(int)), Qt::QueuedConnection);
connect(ui.FinalRenderYAxisUpCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnYAxisUpCheckBoxStateChanged(int)), Qt::QueuedConnection);
@ -44,7 +48,7 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(QWidget* p, Qt::WindowF
SetupSpinner<SpinBox, int>(ui.FinalRenderSizeTable, this, row, -1, m_WidthSpin, spinHeight, 10, std::numeric_limits<int>::max(), 10, SIGNAL(valueChanged(int)), SLOT(OnWidthChanged(int)), true, 1920, 1920, 1920);
SetupSpinner<DoubleSpinBox, double>(ui.FinalRenderSizeTable, this, row, -1, m_HeightScaleSpin, spinHeight, 0.001, 99.99, 0.1, SIGNAL(valueChanged(double)), SLOT(OnHeightScaleChanged(double)), true, 1.0, 1.0, 1.0);
SetupSpinner<SpinBox, int>(ui.FinalRenderSizeTable, this, row, -1, m_HeightSpin, spinHeight, 10, std::numeric_limits<int>::max(), 10, SIGNAL(valueChanged(int)), SLOT(OnHeightChanged(int)), true, 1080, 1080, 1080);
m_SubBatchPctSpin = (DoubleSpinBox*)ui.FinalRenderOpenCLSubBatchPctSpin;
m_SubBatchPctSpin = ui.FinalRenderOpenCLSubBatchPctSpin;
m_SubBatchPctSpin->DoubleClick(true);
m_SubBatchPctSpin->DoubleClickZero(0.025);
m_SubBatchPctSpin->DoubleClickNonZero(0.025);

View File

@ -296,15 +296,15 @@
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<row>
<property name="text">
<string>AMD</string>
@ -419,7 +419,7 @@
</widget>
</item>
<item>
<widget class="DoubleSpinBox" name="FinalRenderOpenCLSubBatchPctSpin">
<widget class="DoubleSpinBox" name="FinalRenderOpenCLSubBatchPctSpin" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -441,22 +441,22 @@
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The percentage of a sub batch to execute on each thread per kernel call when using OpenCL. Default: 0.025 (256 iters with a 10k sub batch size).&lt;/p&gt;&lt;p&gt;Increase this number for slightly faster render times.&lt;/p&gt;&lt;p&gt;Note that this can cause a crash and subsequent restart of the graphics driver if each kernel call takes too long. So reduce the value if you encounter such a problem.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>OpenCL sub batch % per thread </string>
</property>
<property name="decimals">
<property name="decimals" stdset="0">
<number>3</number>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<double>0.010000000000000</double>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<double>1.000000000000000</double>
</property>
<property name="singleStep">
<property name="singleStep" stdset="0">
<double>0.010000000000000</double>
</property>
<property name="value">
<property name="value" stdset="0">
<double>0.250000000000000</double>
</property>
</widget>
@ -593,30 +593,30 @@
<attribute name="horizontalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>85</number>
</attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<row>
<property name="text">
<string>Width Scale</string>
@ -811,30 +811,30 @@
<attribute name="horizontalHeaderCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>110</number>
</attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderStretchLastSection">
<bool>false</bool>
</attribute>
@ -1055,6 +1055,9 @@
<property name="value">
<number>0</number>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
@ -1094,6 +1097,9 @@
<property name="value">
<number>0</number>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="1">
@ -1107,6 +1113,9 @@
<property name="value">
<number>0</number>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="0">
@ -1146,6 +1155,9 @@
<property name="value">
<number>0</number>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
@ -1293,6 +1305,13 @@
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>DoubleSpinBox</class>
<extends>QWidget</extends>
<header>doublespinbox.h</header>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>FinalRenderEarlyClipCheckBox</tabstop>
<tabstop>FinalRenderDoublePrecisionCheckBox</tabstop>

View File

@ -148,6 +148,7 @@ Fractorium::Fractorium(QWidget* p)
m_ProgressBar->setMaximumHeight(progressBarHeight);
m_ProgressBar->setMinimumWidth(progressBarWidth);
m_ProgressBar->setMaximumWidth(progressBarWidth);
m_ProgressBar->setAlignment(Qt::AlignCenter);
ui.StatusBar->addPermanentWidget(m_ProgressBar);
//Setup pointer in the GL window to point back to here.
ui.GLDisplay->SetMainWindow(this);
@ -197,8 +198,24 @@ Fractorium::Fractorium(QWidget* p)
{
if (!QStyleFactory::keys().empty())
{
m_Theme = QStyleFactory::create(qApp->style()->objectName());
setStyle(m_Theme);
auto foundFusion = false;
for (auto& s : QStyleFactory::keys())
{
if (s.compare("fusion", Qt::CaseInsensitive) == 0)//Default to fusion if it exists and the style has not been set yet.
{
m_Theme = QStyleFactory::create(s);
setStyle(m_Theme);
foundFusion = true;
break;
}
}
if (!foundFusion)
{
m_Theme = QStyleFactory::create(qApp->style()->objectName());
setStyle(m_Theme);
}
}
}

View File

@ -77,8 +77,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>1279</width>
<height>980</height>
<width>1280</width>
<height>985</height>
</rect>
</property>
<property name="sizePolicy">
@ -170,7 +170,7 @@
<x>0</x>
<y>0</y>
<width>230</width>
<height>931</height>
<height>926</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
@ -480,9 +480,6 @@
<property name="text">
<string>Geometry</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
</widget>
</item>
@ -561,9 +558,6 @@
<property name="text">
<string>Iteration</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
</widget>
</item>
@ -661,9 +655,6 @@
<property name="text">
<string>Filter</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
</widget>
</item>
@ -1324,9 +1315,6 @@
<property name="text">
<string>Animation</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
</widget>
</item>
@ -1864,9 +1852,6 @@
<property name="text">
<string>Color</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
</widget>
</item>
@ -1895,7 +1880,7 @@
<property name="minimumSize">
<size>
<width>310</width>
<height>439</height>
<height>444</height>
</size>
</property>
<property name="floating">
@ -2465,8 +2450,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>285</width>
<height>675</height>
<width>307</width>
<height>674</height>
</rect>
</property>
<property name="sizePolicy">
@ -3155,7 +3140,7 @@
<x>0</x>
<y>0</y>
<width>291</width>
<height>874</height>
<height>869</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_16">
@ -3533,33 +3518,21 @@
<property name="text">
<string>Weight</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
<column>
<property name="text">
<string>Name</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
<item row="0" column="0">
<property name="text">
<string/>
</property>
<property name="textAlignment">
<set>AlignLeading|AlignVCenter</set>
</property>
</item>
<item row="0" column="1">
<property name="text">
<string/>
</property>
<property name="textAlignment">
<set>AlignLeading|AlignVCenter</set>
</property>
</item>
</widget>
</item>
@ -3761,9 +3734,6 @@
<property name="toolTip">
<string/>
</property>
<property name="textAlignment">
<set>AlignLeading|AlignVCenter</set>
</property>
</item>
</widget>
</item>
@ -3845,7 +3815,7 @@
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>21</number>
<number>24</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
@ -4124,9 +4094,6 @@
<kerning>true</kerning>
</font>
</property>
<property name="textAlignment">
<set>AlignLeading|AlignVCenter</set>
</property>
</item>
<item row="1" column="0">
<property name="text">
@ -4156,6 +4123,19 @@
</item>
</widget>
</item>
<item row="6" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="SoloXformCheckBox">
<property name="toolTip">
@ -6279,8 +6259,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>267</width>
<height>656</height>
<width>269</width>
<height>650</height>
</rect>
</property>
<property name="sizePolicy">
@ -6410,7 +6390,7 @@
<x>0</x>
<y>0</y>
<width>291</width>
<height>854</height>
<height>849</height>
</rect>
</property>
<property name="sizePolicy">
@ -7153,9 +7133,6 @@
<kerning>true</kerning>
</font>
</property>
<property name="textAlignment">
<set>AlignLeading|AlignVCenter</set>
</property>
</item>
</widget>
</item>
@ -7291,7 +7268,7 @@
<x>0</x>
<y>0</y>
<width>1712</width>
<height>21</height>
<height>22</height>
</rect>
</property>
<widget class="QMenu" name="MenuFile">
@ -7524,8 +7501,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>422</width>
<height>587</height>
<width>418</width>
<height>631</height>
</rect>
</property>
<property name="sizePolicy">
@ -7534,7 +7511,7 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayout_10" stretch="3,0,8">
<layout class="QVBoxLayout" name="verticalLayout_10" stretch="3,0,8,0">
<property name="spacing">
<number>4</number>
</property>
@ -8081,12 +8058,12 @@
<property name="prefix">
<string>Animation FPS: </string>
</property>
<property name="maximum">
<number>200</number>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>200</number>
</property>
<property name="value">
<number>30</number>
</property>
@ -8140,9 +8117,9 @@
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="SequenceAnimateButtonsHLayout" stretch="0,0,0,0">
</item>
<item>
<layout class="QHBoxLayout" name="SequenceAnimateButtonsHLayout" stretch="0,0">
<property name="spacing">
<number>2</number>
</property>

View File

@ -176,16 +176,16 @@ void Fractorium::FillXaosTable()
m_AppliedXaosTableModel->setVerticalHeaderLabels(vl);
ui.XaosDistVizTableWidget->setRowCount(1);
ui.XaosDistVizTableWidget->setColumnCount(count);
ui.XaosDistVizTableWidget->setHorizontalHeaderLabels(hl);
ui.XaosDistVizTableWidget->setVerticalHeaderLabels(blanks);
ui.XaosDistVizTableWidget->verticalHeader()->setSectionsClickable(false);
ui.XaosDistVizTableWidget->horizontalHeader()->setSectionsClickable(false);
ui.XaosTableView->setModel(m_XaosTableModel);
ui.XaosAppliedTableView->setModel(m_AppliedXaosTableModel);
ui.XaosTableView->setItemDelegate(m_XaosTableItemDelegate);//No need for a delegate on the applied table because it's read-only.
ui.XaosDistVizTableWidget->verticalHeader()->setFixedWidth(ui.XaosTableView->verticalHeader()->width());
SetTabOrder(this, ui.ClearXaosButton, ui.RandomXaosButton);
ui.XaosDistVizTableWidget->setRowHeight(0, ui.XaosTableView->rowHeight(0) * count);
ui.XaosDistVizTableWidget->setHorizontalHeaderLabels(hl);
ui.XaosDistVizTableWidget->setVerticalHeaderLabels(vl);
SetTabOrder(this, ui.ClearXaosButton, ui.RandomXaosButton);
ui.XaosDistVizTableWidget->verticalHeader()->setStyleSheet("QHeaderView::section::vertical { color: rgba(0, 0, 0, 0); }");
m_Controller->FillXaos();
m_Controller->FillAppliedXaos();
//Needed to get the dark stylesheet to correctly color the top left corner button.

View File

@ -20,15 +20,39 @@ FractoriumOptionsDialog::FractoriumOptionsDialog(QWidget* p, Qt::WindowFlags f)
ui.ThreadCountSpin->setRange(1, Timing::ProcessorCount());
connect(ui.OpenCLCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnOpenCLCheckBoxStateChanged(int)), Qt::QueuedConnection);
connect(ui.DeviceTable, SIGNAL(cellChanged(int, int)), this, SLOT(OnDeviceTableCellChanged(int, int)), Qt::QueuedConnection);
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlTemporalSamplesSpin, spinHeight, 1, 1000, 100, "", "", true, 1000);
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlQualitySpin, spinHeight, 1, 200000, 50, "", "", true, 1000);
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlSupersampleSpin, spinHeight, 1, 4, 1, "", "", true, 2);
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlTemporalSamplesSpin, spinHeight, 1, 100000, 100, "", "", true, 300, 100, 100);
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlQualitySpin, spinHeight, 1, 200000, 50, "", "", true, 1000, 1000, 1000);
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlSupersampleSpin, spinHeight, 1, 4, 1, "", "", true, 2, 2, 2);
m_IdEdit = new QLineEdit(ui.OptionsIdentityTable);
ui.OptionsIdentityTable->setCellWidget(0, 1, m_IdEdit);
m_UrlEdit = new QLineEdit(ui.OptionsIdentityTable);
ui.OptionsIdentityTable->setCellWidget(1, 1, m_UrlEdit);
m_NickEdit = new QLineEdit(ui.OptionsIdentityTable);
ui.OptionsIdentityTable->setCellWidget(2, 1, m_NickEdit);
auto dspin = ui.OpenCLSubBatchPctSpin;
dspin->DoubleClick(true);
dspin->DoubleClickZero(0.025);
dspin->DoubleClickNonZero(0.025);
auto spin = ui.CpuQualitySpin;
spin->DoubleClick(true);
spin->DoubleClickZero(10);
spin->DoubleClickNonZero(10);
spin = ui.OpenCLQualitySpin;
spin->DoubleClick(true);
spin->DoubleClickZero(30);
spin->DoubleClickNonZero(30);
spin = ui.CpuSubBatchSpin;
spin->DoubleClick(true);
spin->DoubleClickZero(1);
spin->DoubleClickNonZero(1);
spin = ui.OpenCLSubBatchSpin;
spin->DoubleClick(true);
spin->DoubleClickZero(1);
spin->DoubleClickNonZero(1);
spin = ui.RandomCountSpin;
spin->DoubleClick(true);
spin->DoubleClickZero(1);
spin->DoubleClickNonZero(1);
table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
ui.OptionsIdentityTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
table = ui.DeviceTable;

View File

@ -193,15 +193,15 @@
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<row>
<property name="text">
<string>AMD</string>
@ -221,25 +221,16 @@
<property name="text">
<string>Use</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
<column>
<property name="text">
<string>Primary</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
<column>
<property name="text">
<string>Device</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
</widget>
</item>
@ -290,36 +281,36 @@
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="OpenCLQualitySpin">
<widget class="SpinBox" name="OpenCLQualitySpin" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The default quality per device to use for the interactive renderer when using OpenCL.&lt;/p&gt;&lt;p&gt;30 is a good number for this, but you can use a larger value if you have a faster GPU.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>OpenCL Quality </string>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<number>1</number>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<number>99999</number>
</property>
<property name="value">
<property name="value" stdset="0">
<number>30</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QSpinBox" name="OpenCLSubBatchSpin">
<widget class="SpinBox" name="OpenCLSubBatchSpin" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The number of ~8M iteration chunks ran using OpenCL in interactive mode for each mouse movement.&lt;/p&gt;&lt;p&gt;Increase this number for a higher quality image on each mouse movement, at the expense of responsiveness.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>OpenCL chunks per mouse movement </string>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<number>1</number>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<number>100</number>
</property>
</widget>
@ -372,93 +363,93 @@
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="CpuSubBatchSpin">
<widget class="SpinBox" name="CpuSubBatchSpin" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The number of ~10,000 iteration chunks ran per thread on the CPU in interactive mode for each mouse movement.&lt;/p&gt;&lt;p&gt;Increase this number for a higher quality image on each mouse movement, at the expense of responsiveness.&lt;/p&gt;&lt;p&gt;The number of iterations done in each chunk is controlled by the Sub Batch Size field in the Flame tab.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>CPU chunks per mouse movement </string>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<number>1</number>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<number>100</number>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QSpinBox" name="ThreadCountSpin">
<widget class="SpinBox" name="ThreadCountSpin" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The number of threads to use with CPU rendering.&lt;/p&gt;&lt;p&gt;Decrease for more responsive editing, increase for better performance.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>Threads </string>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<number>1</number>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<number>64</number>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QSpinBox" name="RandomCountSpin">
<widget class="SpinBox" name="RandomCountSpin" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The number of random flames to generate on startup.&lt;/p&gt;&lt;p&gt;These are usually of low quality, so leave the count as 1 unless you are searching for good randoms.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>Randoms </string>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<number>1</number>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<number>99999</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QDoubleSpinBox" name="OpenCLSubBatchPctSpin">
<widget class="DoubleSpinBox" name="OpenCLSubBatchPctSpin" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The percentage of a sub batch to execute on each thread per kernel call when using OpenCL in interactive mode. Default: 0.025 (256 iters).&lt;/p&gt;&lt;p&gt;Increase this number for a higher quality image on each mouse movement, at the expense of responsiveness.&lt;/p&gt;&lt;p&gt;Note that this can cause a crash and subsequent restart of the graphics driver if each kernel call takes too long. So reduce the value if you encounter such a problem.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>OpenCL sub batch percent per thread </string>
</property>
<property name="decimals">
<property name="decimals" stdset="0">
<number>3</number>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<double>0.010000000000000</double>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<double>1.000000000000000</double>
</property>
<property name="singleStep">
<property name="singleStep" stdset="0">
<double>0.010000000000000</double>
</property>
<property name="value">
<property name="value" stdset="0">
<double>0.025000000000000</double>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="CpuQualitySpin">
<widget class="SpinBox" name="CpuQualitySpin" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The default quality to use for the interactive renderer when using the CPU.&lt;/p&gt;&lt;p&gt;10 is a good number for this, but you can use a larger value if you have a faster system.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>CPU Quality </string>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<number>1</number>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<number>99999</number>
</property>
<property name="value">
<property name="value" stdset="0">
<number>10</number>
</property>
</widget>
@ -638,30 +629,30 @@
<attribute name="horizontalHeaderCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>110</number>
</attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderStretchLastSection">
<bool>false</bool>
</attribute>
@ -831,30 +822,30 @@
<attribute name="horizontalHeaderCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>110</number>
</attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderStretchLastSection">
<bool>false</bool>
</attribute>
@ -952,6 +943,18 @@
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>SpinBox</class>
<extends>QWidget</extends>
<header>spinbox.h</header>
</customwidget>
<customwidget>
<class>DoubleSpinBox</class>
<extends>QWidget</extends>
<header>doublespinbox.h</header>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>EarlyClipCheckBox</tabstop>
<tabstop>OpenCLCheckBox</tabstop>