diff --git a/Builds/MSVC/Installer/FractoriumInstaller.wixproj b/Builds/MSVC/Installer/FractoriumInstaller.wixproj
index 5704658..77ef0de 100644
--- a/Builds/MSVC/Installer/FractoriumInstaller.wixproj
+++ b/Builds/MSVC/Installer/FractoriumInstaller.wixproj
@@ -6,7 +6,7 @@
3.7
{c8096c47-e358-438c-a520-146d46b0637d}
2.0
- Fractorium_Beta_0.4.1.5
+ Fractorium_Beta_0.4.1.6
Package
$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets
$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets
diff --git a/Builds/MSVC/Installer/Product.wxs b/Builds/MSVC/Installer/Product.wxs
index 9f1b883..84b661c 100644
--- a/Builds/MSVC/Installer/Product.wxs
+++ b/Builds/MSVC/Installer/Product.wxs
@@ -1,6 +1,6 @@
-
+
@@ -13,7 +13,7 @@
-
+
::epsilon()//Apoplugin.h uses -20, but it's more mathematically correct to do it this way.
#define ISAAC_SIZE 4
diff --git a/Source/Ember/RendererBase.h b/Source/Ember/RendererBase.h
index ae235ad..fa1f7b2 100644
--- a/Source/Ember/RendererBase.h
+++ b/Source/Ember/RendererBase.h
@@ -99,7 +99,6 @@ public:
void ChangeVal(std::function func, eProcessAction action);
size_t MemoryRequired(size_t strips, bool includeFinal);
vector> RandVec();
- bool RandVec(vector>& randVec);
bool PrepFinalAccumVector(vector& pixels);
//Virtual processing functions.
@@ -109,6 +108,7 @@ public:
virtual void SetEmber(vector>& embers) { }
virtual void SetEmber(Ember& ember, eProcessAction action = FULL_RENDER) { }
virtual void SetEmber(vector>& embers) { }
+ virtual bool RandVec(vector>& randVec);
//Abstract processing functions.
virtual bool CreateDEFilter(bool& newAlloc) = 0;
diff --git a/Source/EmberAnimate/EmberAnimate.rc b/Source/EmberAnimate/EmberAnimate.rc
index 7ec4eec..78e46c9 100644
--- a/Source/EmberAnimate/EmberAnimate.rc
+++ b/Source/EmberAnimate/EmberAnimate.rc
@@ -49,8 +49,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,4,1,5
- PRODUCTVERSION 0,4,1,5
+ FILEVERSION 0,4,1,6
+ PRODUCTVERSION 0,4,1,6
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -67,12 +67,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Open Source"
VALUE "FileDescription", "Renders fractal flames as animations with motion blur"
- VALUE "FileVersion", "0.4.1.5"
+ VALUE "FileVersion", "0.4.1.6"
VALUE "InternalName", "EmberAnimate.rc"
VALUE "LegalCopyright", "Copyright (C) Matt Feemster 2013, GPL v3"
VALUE "OriginalFilename", "EmberAnimate.rc"
VALUE "ProductName", "Ember Animate"
- VALUE "ProductVersion", "0.4.1.5"
+ VALUE "ProductVersion", "0.4.1.6"
END
END
BLOCK "VarFileInfo"
diff --git a/Source/EmberCL/RendererCL.cpp b/Source/EmberCL/RendererCL.cpp
index bd43bb6..9f3d876 100644
--- a/Source/EmberCL/RendererCL.cpp
+++ b/Source/EmberCL/RendererCL.cpp
@@ -52,14 +52,8 @@ RendererCL::RendererCL(unsigned int platform, unsigned int device, bool share
m_PaletteFormat.image_channel_data_type = CL_FLOAT;
m_FinalFormat.image_channel_order = CL_RGBA;
m_FinalFormat.image_channel_data_type = CL_UNORM_INT8;//Change if this ever supports 2BPC outputs for PNG.
- m_Seeds.resize(IterGridKernelCount());
-
- for (size_t i = 0; i < m_Seeds.size(); i++)
- {
- m_Seeds[i].x = m_Rand[0].Rand();
- m_Seeds[i].y = m_Rand[0].Rand();
- }
-
+
+ FillSeeds();
Init(platform, device, shared, outputTexID);//Init OpenCL upon construction and create programs that will not change.
}
@@ -498,6 +492,27 @@ vector RendererCL::ErrorReport()
return ours;
}
+///
+/// Set the vector of random contexts.
+/// Call the base, and reset the seeds vector.
+///
+/// The vector of random contexts to assign
+/// True if the size of the vector matched the number of threads used for rendering and writing seeds to OpenCL succeeded, else false.
+template
+bool RendererCL::RandVec(vector>& randVec)
+{
+ bool b = Renderer::RandVec(randVec);
+ const char* loc = __FUNCTION__;
+
+ if (m_Wrapper.Ok())
+ {
+ FillSeeds();
+ if (b && !(b = m_Wrapper.AddAndWriteBuffer(m_SeedsBufferName, (void*)m_Seeds.data(), SizeOf(m_Seeds)))) { m_ErrorReport.push_back(loc); }
+ }
+
+ return b;
+}
+
///
/// Protected virtual functions overridden from Renderer.
///
@@ -912,6 +927,9 @@ eRenderStatus RendererCL::RunLogScaleFilter()
m_ErrorReport.push_back(loc);
}
+ if (b && m_Callback)
+ m_Callback->ProgressFunc(m_Ember, m_ProgressParameter, 100.0, 1, 0.0);
+
return b ? RENDER_OK : RENDER_ERROR;
}
@@ -996,9 +1014,9 @@ eRenderStatus RendererCL::RunDensityFilter()
}
}
#else
- OpenCLWrapper::MakeEvenGridDims(blockSizeW, blockSizeH, gridW, gridH);
gridW /= chunkSizeW;
gridH /= chunkSizeH;
+ OpenCLWrapper::MakeEvenGridDims(blockSizeW, blockSizeH, gridW, gridH);
for (unsigned int rowChunk = 0; b && !m_Abort && rowChunk < chunkSizeH; rowChunk++)
{
@@ -1432,4 +1450,21 @@ CarToRasCL RendererCL::ConvertCarToRas(const CarToRas& carToRas)
return carToRasCL;
}
+
+///
+/// Fill seeds buffer which gets passed to the iteration kernel.
+/// Note, WriteBuffer() must be called after this to actually copy the
+/// data from the host to the device.
+///
+template
+void RendererCL::FillSeeds()
+{
+ m_Seeds.resize(IterGridKernelCount());
+
+ for (size_t i = 0; i < m_Seeds.size(); i++)
+ {
+ m_Seeds[i].x = m_Rand[0].Rand();
+ m_Seeds[i].y = m_Rand[0].Rand();
+ }
+}
}
\ No newline at end of file
diff --git a/Source/EmberCL/RendererCL.h b/Source/EmberCL/RendererCL.h
index 677afbd..1aaeaad 100644
--- a/Source/EmberCL/RendererCL.h
+++ b/Source/EmberCL/RendererCL.h
@@ -93,6 +93,7 @@ public:
virtual eRendererType RendererType() const override;
virtual string ErrorReportString() override;
virtual vector ErrorReport() override;
+ virtual bool RandVec(vector>& randVec) override;
#ifndef TEST_CL
protected:
@@ -118,6 +119,7 @@ private:
int MakeAndGetDensityFilterProgram(size_t ss, unsigned int filterWidth);
int MakeAndGetFinalAccumProgram(T& alphaBase, T& alphaScale);
int MakeAndGetGammaCorrectionProgram();
+ void FillSeeds();
//Private functions passing data to OpenCL programs.
DensityFilterCL ConvertDensityFilter();
diff --git a/Source/EmberGenome/EmberGenome.rc b/Source/EmberGenome/EmberGenome.rc
index b246fdc..dcafd67 100644
--- a/Source/EmberGenome/EmberGenome.rc
+++ b/Source/EmberGenome/EmberGenome.rc
@@ -49,8 +49,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,4,1,5
- PRODUCTVERSION 0,4,1,5
+ FILEVERSION 0,4,1,6
+ PRODUCTVERSION 0,4,1,6
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -67,12 +67,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Open Source"
VALUE "FileDescription", "Manipulates fractal flames parameter files"
- VALUE "FileVersion", "0.4.1.5"
+ VALUE "FileVersion", "0.4.1.6"
VALUE "InternalName", "EmberGenome.rc"
VALUE "LegalCopyright", "Copyright (C) Matt Feemster 2013, GPL v3"
VALUE "OriginalFilename", "EmberGenome.rc"
VALUE "ProductName", "Ember Genome"
- VALUE "ProductVersion", "0.4.1.5"
+ VALUE "ProductVersion", "0.4.1.6"
END
END
BLOCK "VarFileInfo"
diff --git a/Source/EmberRender/EmberRender.rc b/Source/EmberRender/EmberRender.rc
index 1fa4a0e..3e638f0 100644
--- a/Source/EmberRender/EmberRender.rc
+++ b/Source/EmberRender/EmberRender.rc
@@ -49,8 +49,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,4,1,5
- PRODUCTVERSION 0,4,1,5
+ FILEVERSION 0,4,1,6
+ PRODUCTVERSION 0,4,1,6
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -67,12 +67,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Open Source"
VALUE "FileDescription", "Renders fractal flames as single images"
- VALUE "FileVersion", "0.4.1.5"
+ VALUE "FileVersion", "0.4.1.6"
VALUE "InternalName", "EmberRender.rc"
VALUE "LegalCopyright", "Copyright (C) Matt Feemster 2013, GPL v3"
VALUE "OriginalFilename", "EmberRender.rc"
VALUE "ProductName", "Ember Render"
- VALUE "ProductVersion", "0.4.1.5"
+ VALUE "ProductVersion", "0.4.1.6"
END
END
BLOCK "VarFileInfo"
diff --git a/Source/Fractorium/AboutDialog.ui b/Source/Fractorium/AboutDialog.ui
index 0020c90..cdd67d3 100644
--- a/Source/Fractorium/AboutDialog.ui
+++ b/Source/Fractorium/AboutDialog.ui
@@ -52,7 +52,7 @@
- <html><head/><body><p align="center"><br/><span style=" font-size:12pt;">Fractorium 0.4.1.5 Beta</span></p><p align="center"><span style=" font-size:10pt;"><br/>A Qt-based fractal flame editor which uses a C++ re-write of the flam3 algorithm named Ember and a GPU capable version named EmberCL which implements a portion of the cuburn algorithm in OpenCL.</span></p><p align="center"><span style=" font-size:10pt;">Matt Feemster</span></p></body></html>
+ <html><head/><body><p align="center"><br/><span style=" font-size:12pt;">Fractorium 0.4.1.6 Beta</span></p><p align="center"><span style=" font-size:10pt;"><br/>A Qt-based fractal flame editor which uses a C++ re-write of the flam3 algorithm named Ember and a GPU capable version named EmberCL which implements a portion of the cuburn algorithm in OpenCL.</span></p><p align="center"><span style=" font-size:10pt;">Matt Feemster</span></p></body></html>
Qt::RichText
diff --git a/Source/Fractorium/FinalRenderEmberController.cpp b/Source/Fractorium/FinalRenderEmberController.cpp
index 806e484..99cc86f 100644
--- a/Source/Fractorium/FinalRenderEmberController.cpp
+++ b/Source/Fractorium/FinalRenderEmberController.cpp
@@ -118,7 +118,7 @@ FinalRenderEmberController::FinalRenderEmberController(FractoriumFinalRenderD
m_PreviewEmber.m_FinalRasW = max(1, min(maxDim, size_t(scalePercentage * m_Ember->m_FinalRasW)));//Ensure neither is zero.
m_PreviewEmber.m_FinalRasH = max(1, min(maxDim, size_t(scalePercentage * m_Ember->m_FinalRasH)));
m_PreviewEmber.m_PixelsPerUnit = scalePercentage * m_Ember->m_PixelsPerUnit;
-
+
m_FinalPreviewRenderer->EarlyClip(m_FinalRenderDialog->EarlyClip());
m_FinalPreviewRenderer->YAxisUp(m_FinalRenderDialog->YAxisUp());
m_FinalPreviewRenderer->Transparency(m_FinalRenderDialog->Transparency());
diff --git a/Source/Fractorium/Fractorium.rc b/Source/Fractorium/Fractorium.rc
index 0ab71fc..85a8ebb 100644
Binary files a/Source/Fractorium/Fractorium.rc and b/Source/Fractorium/Fractorium.rc differ
diff --git a/Source/Fractorium/FractoriumEmberController.cpp b/Source/Fractorium/FractoriumEmberController.cpp
index 2b615ab..1be19dc 100644
--- a/Source/Fractorium/FractoriumEmberController.cpp
+++ b/Source/Fractorium/FractoriumEmberController.cpp
@@ -101,6 +101,7 @@ FractoriumEmberController::FractoriumEmberController(Fractorium* fractorium)
{
Ember ember = m_EmberFile.m_Embers[i];
+ ember.SyncSize();
ember.SetSizeAndAdjustScale(PREVIEW_SIZE, PREVIEW_SIZE, false, SCALE_WIDTH);
ember.m_TemporalSamples = 1;
ember.m_Quality = 25;
diff --git a/Source/Fractorium/FractoriumMenus.cpp b/Source/Fractorium/FractoriumMenus.cpp
index bb68f4d..92a12d0 100644
--- a/Source/Fractorium/FractoriumMenus.cpp
+++ b/Source/Fractorium/FractoriumMenus.cpp
@@ -62,8 +62,6 @@ void FractoriumEmberController::NewFlock(unsigned int count)
m_SheepTools->Random(ember);
ParamsToEmber(ember);
ember.m_Index = i;
- ember.m_OrigFinalRasW = ember.m_FinalRasW;
- ember.m_OrigFinalRasH = ember.m_FinalRasH;
ember.m_Name = m_EmberFile.m_Filename.toStdString() + "-" + ToString(i + 1).toStdString();
m_EmberFile.m_Embers.push_back(ember);
}
@@ -97,8 +95,6 @@ void FractoriumEmberController::NewEmptyFlameInCurrentFile()
StopPreviewRender();
ParamsToEmber(ember);
- ember.m_OrigFinalRasW = ember.m_FinalRasW;
- ember.m_OrigFinalRasH = ember.m_FinalRasH;
xform.m_Weight = T(0.25);
xform.m_ColorX = m_Rand.Frand01();
ember.AddXform(xform);
@@ -126,8 +122,6 @@ void FractoriumEmberController::NewRandomFlameInCurrentFile()
StopPreviewRender();
m_SheepTools->Random(ember);
ParamsToEmber(ember);
- ember.m_OrigFinalRasW = ember.m_FinalRasW;
- ember.m_OrigFinalRasH = ember.m_FinalRasH;
ember.m_Name = EmberFile::DefaultEmberName(m_EmberFile.Size() + 1).toStdString();
ember.m_Index = m_EmberFile.Size();
m_EmberFile.m_Embers.push_back(ember);//Will invalidate the pointers contained in the EmberTreeWidgetItems, UpdateLibraryTree() will resync.
diff --git a/Source/Fractorium/FractoriumParams.cpp b/Source/Fractorium/FractoriumParams.cpp
index dec7e37..68ba34b 100644
--- a/Source/Fractorium/FractoriumParams.cpp
+++ b/Source/Fractorium/FractoriumParams.cpp
@@ -614,6 +614,8 @@ void FractoriumEmberController::ParamsToEmber(Ember& ember)
ember.m_TemporalSamples = m_Fractorium->m_TemporalSamplesSpin->value();
ember.m_AffineInterp = (eAffineInterp)m_Fractorium->m_AffineInterpTypeCombo->currentIndex();
ember.m_Interp = (eInterp)m_Fractorium->m_InterpTypeCombo->currentIndex();
+
+ ember.SyncSize();
}
///