diff --git a/Builds/MSVC/Installer/Product.wxs b/Builds/MSVC/Installer/Product.wxs
index ccc8d56..a0fce19 100644
--- a/Builds/MSVC/Installer/Product.wxs
+++ b/Builds/MSVC/Installer/Product.wxs
@@ -161,20 +161,20 @@
-
-
+
+
-
+
-
+
-
+
-
+
diff --git a/Source/Fractorium/FinalRenderEmberController.cpp b/Source/Fractorium/FinalRenderEmberController.cpp
index 52c455a..b0e9fb8 100644
--- a/Source/Fractorium/FinalRenderEmberController.cpp
+++ b/Source/Fractorium/FinalRenderEmberController.cpp
@@ -100,36 +100,33 @@ void FinalRenderEmberControllerBase::Output(const QString& s)
/// Used to report progress when strips.
/// True if rendering succeeded.
template
-bool FinalRenderEmberController::RenderSingleEmber(Ember& ember, bool fullRender, size_t &stripForProgress)
+bool FinalRenderEmberController::RenderSingleEmber(Ember& ember, bool fullRender, size_t& stripForProgress)
{
- if (!m_Renderer.get()) {
+ if (!m_Renderer.get())
+ {
return false;
}
ember.m_TemporalSamples = 1;//No temporal sampling.
-
m_Renderer->SetEmber(ember, fullRender ? eProcessAction::FULL_RENDER : eProcessAction::KEEP_ITERATING, /* updatePointer */ true);
-
m_Renderer->PrepFinalAccumVector(m_FinalImage);//Must manually call this first because it could be erroneously made smaller due to strips if called inside Renderer::Run().
m_Stats.Clear();
m_RenderTimer.Tic();//Toc() is called in RenderComplete().
-
StripsRender(m_Renderer.get(), ember, m_FinalImage, 0, m_GuiState.m_Strips, m_GuiState.m_YAxisUp,
- [&](size_t strip) { stripForProgress = strip; },//Pre strip.
- [&](size_t strip) { m_Stats += m_Renderer->Stats(); },//Post strip.
- [&](size_t strip)//Error.
- {
- Output("Rendering failed.\n");
- m_Fractorium->ErrorReportToQTextEdit(m_Renderer->ErrorReport(), m_FinalRenderDialog->ui.FinalRenderTextOutput, false);//Internally calls invoke.
- },
- [&](Ember& finalEmber)
- {
- m_FinishedImageCount.fetch_add(1);
- SaveCurrentRender(finalEmber);
- RenderComplete(finalEmber);
- HandleFinishedProgress();
- });//Final strip.
-
+ [&](size_t strip) { stripForProgress = strip; },//Pre strip.
+ [&](size_t strip) { m_Stats += m_Renderer->Stats(); },//Post strip.
+ [&](size_t strip)//Error.
+ {
+ Output("Rendering failed.\n");
+ m_Fractorium->ErrorReportToQTextEdit(m_Renderer->ErrorReport(), m_FinalRenderDialog->ui.FinalRenderTextOutput, false);//Internally calls invoke.
+ },
+ [&](Ember& finalEmber)
+ {
+ m_FinishedImageCount.fetch_add(1);
+ SaveCurrentRender(finalEmber);
+ RenderComplete(finalEmber);
+ HandleFinishedProgress();
+ });//Final strip.
return true;
}
@@ -143,7 +140,8 @@ bool FinalRenderEmberController::RenderSingleEmber(Ember& ember, bool full
template
bool FinalRenderEmberController::RenderSingleEmberFromSeries(std::atomic* atomfTime, size_t index)
{
- if (m_Renderers.size() <= index) {
+ if (m_Renderers.size() <= index)
+ {
return false;
}
@@ -248,9 +246,9 @@ FinalRenderEmberController::FinalRenderEmberController(FractoriumFinalRenderD
SyncGuiToRenderer();
m_GuiState.m_Strips = VerifyStrips(m_Ember->m_FinalRasH, m_GuiState.m_Strips,
- [&](const string & s) { Output(QString::fromStdString(s)); }, //Greater than height.
- [&](const string & s) { Output(QString::fromStdString(s)); }, //Mod height != 0.
- [&](const string & s) { Output(QString::fromStdString(s) + "\n"); }); //Final strips value to be set.
+ [&](const string& s) { Output(QString::fromStdString(s)); }, //Greater than height.
+ [&](const string& s) { Output(QString::fromStdString(s)); }, //Mod height != 0.
+ [&](const string& s) { Output(QString::fromStdString(s) + "\n"); }); //Final strips value to be set.
}
//The rendering process is different between doing a single image, and doing multiple.
@@ -291,16 +289,15 @@ FinalRenderEmberController::FinalRenderEmberController(FractoriumFinalRenderD
//even when using double precision, which most cards at the time of this writing already exceed.
m_GuiState.m_Strips = 1;
CopyCont(embers, m_EmberFile.m_Embers);
-
std::atomic atomfTime(0);
vector threadVec;
threadVec.reserve(m_Renderers.size());
for (size_t r = 0; r < m_Renderers.size(); r++)
{
- //All will share a pointer to the original vector to conserve memory with large files. Ok because the vec doesn't get modified.
- m_Renderers[r]->SetExternalEmbersPointer(&embers);
- threadVec.push_back(std::thread(&RenderSingleEmberFromSeries, this, &atomfTime, r));
+ //All will share a pointer to the original vector to conserve memory with large files. Ok because the vec doesn't get modified.
+ m_Renderers[r]->SetExternalEmbersPointer(&embers);
+ threadVec.push_back(std::thread(&FinalRenderEmberController::RenderSingleEmberFromSeries, this, &atomfTime, r));
}
Join(threadVec);
@@ -326,11 +323,9 @@ FinalRenderEmberController::FinalRenderEmberController(FractoriumFinalRenderD
else if (m_Renderer.get())//Render a single image.
{
Output(ComposePath(QString::fromStdString(m_Ember->m_Name)));
-
m_ImageCount = 1;
m_Ember->m_TemporalSamples = 1;
m_Fractorium->m_Controller->ParamsToEmber(*m_Ember, true);//Update color and filter params from the main window controls, which only affect the filter and/or final accumulation stage.
-
RenderSingleEmber(*m_Ember, /* fullRender= */ !isBump, currentStripForProgress);
}
else
@@ -716,7 +711,7 @@ tuple FinalRenderEmberController::SyncAndComputeMemor
if (m_Renderer.get())
{
strips = VerifyStrips(m_Ember->m_FinalRasH, m_FinalRenderDialog->Strips(),
- [&](const string & s) {}, [&](const string & s) {}, [&](const string & s) {});
+ [&](const string& s) {}, [&](const string& s) {}, [&](const string& s) {});
m_Renderer->SetEmber(*m_Ember, eProcessAction::FULL_RENDER, true);
m_FinalPreviewRenderer->Render(UINT_MAX, UINT_MAX);
p = m_Renderer->MemoryRequired(strips, true, m_FinalRenderDialog->DoSequence());
@@ -1164,7 +1159,7 @@ void FinalRenderPreviewRenderer::PreviewRenderFunc(uint start, uint end)
m_PreviewRenderer.SetEmber(m_PreviewEmber, eProcessAction::FULL_RENDER, true);
m_PreviewRenderer.PrepFinalAccumVector(m_PreviewFinalImage);//Must manually call this first because it could be erroneously made smaller due to strips if called inside Renderer::Run().
auto strips = VerifyStrips(m_PreviewEmber.m_FinalRasH, d->Strips(),
- [&](const string & s) {}, [&](const string & s) {}, [&](const string & s) {});
+ [&](const string& s) {}, [&](const string& s) {}, [&](const string& s) {});
StripsRender(&m_PreviewRenderer, m_PreviewEmber, m_PreviewFinalImage, 0, strips, d->YAxisUp(),
[&](size_t strip) {},//Pre strip.
[&](size_t strip) {},//Post strip.
diff --git a/Source/Fractorium/FractoriumPalette.cpp b/Source/Fractorium/FractoriumPalette.cpp
index 5a9b4c1..fa6f2b8 100644
--- a/Source/Fractorium/FractoriumPalette.cpp
+++ b/Source/Fractorium/FractoriumPalette.cpp
@@ -144,7 +144,7 @@ void FractoriumEmberController::ApplyPaletteToEmber()
const uint freq = m_Fractorium->m_PaletteFrequencySpin->value();
const auto sat = m_Fractorium->m_PaletteSaturationSpin->value() / 100.0;
const auto brightness = m_Fractorium->m_PaletteBrightnessSpin->value() / 255.0;
- const auto contrast = m_Fractorium->m_PaletteContrastSpin->value() > 0 ? m_Fractorium->m_PaletteContrastSpin->value() * 2.0 : m_Fractorium->m_PaletteContrastSpin->value() / 100.0;
+ const auto contrast = double(m_Fractorium->m_PaletteContrastSpin->value() > 0 ? m_Fractorium->m_PaletteContrastSpin->value() * 2.0 : m_Fractorium->m_PaletteContrastSpin->value()) / 100.0;
const auto hue = m_Fractorium->m_PaletteHueSpin->value() / 360.0;
//Use the temp palette as the base and apply the adjustments gotten from the GUI and save the result in the ember palette.
m_TempPalette.MakeAdjustedPalette(m_Ember.m_Palette, m_Fractorium->m_PreviewPaletteRotation, hue, sat, brightness, contrast, blur, freq);