From 4777ab52bc884606439bf35ecdcad36b1bb112d2 Mon Sep 17 00:00:00 2001 From: mfeemster Date: Sat, 29 Nov 2014 09:44:23 -0800 Subject: [PATCH] 0.4.1.6 Beta 11/29/2014 --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. --- .../Installer/FractoriumInstaller.wixproj | 2 +- Builds/MSVC/Installer/Product.wxs | 4 +- Data/Version History.txt | 13 +++++ Source/Ember/EmberDefines.h | 2 +- Source/Ember/RendererBase.h | 2 +- Source/EmberAnimate/EmberAnimate.rc | 8 +-- Source/EmberCL/RendererCL.cpp | 53 +++++++++++++++--- Source/EmberCL/RendererCL.h | 2 + Source/EmberGenome/EmberGenome.rc | 8 +-- Source/EmberRender/EmberRender.rc | 8 +-- Source/Fractorium/AboutDialog.ui | 2 +- .../Fractorium/FinalRenderEmberController.cpp | 2 +- Source/Fractorium/Fractorium.rc | Bin 4574 -> 4574 bytes .../Fractorium/FractoriumEmberController.cpp | 1 + Source/Fractorium/FractoriumMenus.cpp | 6 -- Source/Fractorium/FractoriumParams.cpp | 2 + 16 files changed, 81 insertions(+), 34 deletions(-) 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 0ab71fcc03bdf4bfe451ab2b186d42ccec539e5a..85a8ebb52724f37029154c10ccb1e10ca1b79f12 100644 GIT binary patch delta 46 wcmcbod{23U7YC!+WN!{bMzhVe9PG?Mjv|-%WC32W&6~KHm>}HEXLyBJ056COzyJUM delta 46 wcmcbod{23U7YC#1WN!{bM$^r;9PG?Mjv|-%WC32W&6~KHm>}HEXLyBJ052a4yZ`_I 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(); } ///