From d1196f42059f89b1c9c137dbfd220317373e6357 Mon Sep 17 00:00:00 2001 From: mfeemster Date: Tue, 5 Aug 2014 21:50:52 -0700 Subject: [PATCH] 0.4.1.2 Beta 08/05/2014 --User Changes Add --yaxisup and --supersample options for command line programs. --Bug Fixes Make certain options available only to the command line programs in which they make sense. Most were good, some were misplaced. --Code Changes Include pure render time as part of stats. Output iters/sec measurement in EmberRender and EmberAnimate. --- .gitignore | 4 ++- .../FractoriumInstaller.wixproj | 2 +- .../VS2010/FractoriumInstaller/Product.wxs | 4 +-- Data/Bench.xlsx | Bin 13500 -> 15249 bytes Data/Debug.xlsx | Bin 0 -> 10168 bytes Data/Version History.txt | 11 ++++++ Source/Ember/EmberDefines.h | 2 +- Source/Ember/Renderer.cpp | 12 ++++--- Source/Ember/Renderer.h | 12 +++++-- Source/EmberAnimate/EmberAnimate.cpp | 10 ++++-- Source/EmberAnimate/EmberAnimate.rc | 8 ++--- Source/EmberCL/RendererCL.cpp | 4 +++ Source/EmberCommon/EmberOptions.h | 32 +++++++++++------- Source/EmberGenome/EmberGenome.cpp | 5 +-- Source/EmberGenome/EmberGenome.rc | 8 ++--- Source/EmberRender/EmberRender.cpp | 10 ++++-- Source/EmberRender/EmberRender.rc | 8 ++--- Source/Fractorium/AboutDialog.ui | 2 +- .../Fractorium/FinalRenderEmberController.cpp | 10 +----- .../Fractorium/FinalRenderEmberController.h | 1 - Source/Fractorium/Fractorium.rc | Bin 4574 -> 4574 bytes 21 files changed, 91 insertions(+), 54 deletions(-) create mode 100644 Data/Debug.xlsx diff --git a/.gitignore b/.gitignore index 6aa79b0..9ed10dc 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,6 @@ Builds/MSVC/VS2010/Obj/EmberGenome/x64/Debug/EmberGenome_manifest.rc Builds/MSVC/VS2010/Obj/EmberAnimate/x64/Debug/EmberAnimate_manifest.rc Builds/MSVC/VS2010/Obj/Ember/x64/Debug/Ember_manifest.rc Bin/x64/Release/testallvarsout.flame -Data/~$Bench.xlsx \ No newline at end of file +Data/~$Bench.xlsx +*.ps1 +Bin/x64/Release/Bench.flame \ No newline at end of file diff --git a/Builds/MSVC/VS2010/FractoriumInstaller/FractoriumInstaller.wixproj b/Builds/MSVC/VS2010/FractoriumInstaller/FractoriumInstaller.wixproj index a20adbe..05d849b 100644 --- a/Builds/MSVC/VS2010/FractoriumInstaller/FractoriumInstaller.wixproj +++ b/Builds/MSVC/VS2010/FractoriumInstaller/FractoriumInstaller.wixproj @@ -6,7 +6,7 @@ 3.7 {c8096c47-e358-438c-a520-146d46b0637d} 2.0 - Fractorium_Beta_0.4.1.1 + Fractorium_Beta_0.4.1.2 Package $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets diff --git a/Builds/MSVC/VS2010/FractoriumInstaller/Product.wxs b/Builds/MSVC/VS2010/FractoriumInstaller/Product.wxs index 1b211f4..b8a06e4 100644 --- a/Builds/MSVC/VS2010/FractoriumInstaller/Product.wxs +++ b/Builds/MSVC/VS2010/FractoriumInstaller/Product.wxs @@ -1,6 +1,6 @@ - + @@ -13,7 +13,7 @@ - + _h~ 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 G{rex;Gn|M3 diff --git a/Data/Debug.xlsx b/Data/Debug.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b38a7b08d8ea76bc92758ccb35af7b0fdc284682 GIT binary patch literal 10168 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 literal 0 HcmV?d00001 diff --git a/Data/Version History.txt b/Data/Version History.txt index ff046d9..2063f77 100644 --- a/Data/Version History.txt +++ b/Data/Version History.txt @@ -1,3 +1,14 @@ +0.4.1.2 Beta 08/05/2014 +--User Changes + Add --yaxisup and --supersample options for command line programs. + +--Bug Fixes + Make certain options available only to the command line programs in which they make sense. Most were good, some were misplaced. + +--Code Changes + Include pure render time as part of stats. + Output iters/sec measurement in EmberRender and EmberAnimate. + 0.4.1.1 Beta 08/03/2014 --Bug Fixes Spatial filter would not be correctly recreated on subsequent runs of differing supersample values during final render. diff --git a/Source/Ember/EmberDefines.h b/Source/Ember/EmberDefines.h index 403237b..d7bfff6 100644 --- a/Source/Ember/EmberDefines.h +++ b/Source/Ember/EmberDefines.h @@ -25,7 +25,7 @@ namespace EmberNs extern void sincos(double x, double *s, double *c); #endif -#define EMBER_VERSION "0.4.1.1" +#define EMBER_VERSION "0.4.1.2" #define EPS6 T(1e-6) #define EPS std::numeric_limits::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/Renderer.cpp b/Source/Ember/Renderer.cpp index 5311569..8abfbab 100644 --- a/Source/Ember/Renderer.cpp +++ b/Source/Ember/Renderer.cpp @@ -383,8 +383,7 @@ eRenderStatus Renderer::Run(vector& finalImage, doubl m_LastTemporalSample = 0; m_LastIter = 0; m_LastIterPercent = 0; - m_Stats.m_Iters = 0; - m_Stats.m_Badvals = 0; + m_Stats.Clear(); m_Gamma = 0; m_Vibrancy = 0;//Accumulate these after each temporal sample. m_VibGamCount = 0; @@ -541,6 +540,7 @@ eRenderStatus Renderer::Run(vector& finalImage, doubl m_LastIter += stats.m_Iters;//Sum of iter count of all threads, reset each temporal sample. m_Stats.m_Iters += stats.m_Iters;//Sum of iter count of all threads, cumulative from beginning to end. m_Stats.m_Badvals += stats.m_Badvals; + m_Stats.m_IterMs += stats.m_IterMs; //After each temporal sample, accumulate these. //Allow for incremental rendering by only taking action if the iter loop for this temporal sample is completely done. @@ -668,7 +668,7 @@ AccumOnly: if (AccumulatorToFinalImage(finalImage, finalOffset) == RENDER_OK) { - m_Stats.m_RenderSeconds = m_RenderTimer.Toc() / 1000.0;//Record total time from the very beginning to the very end, including all intermediate calls. + m_Stats.m_RenderMs = m_RenderTimer.Toc();//Record total time from the very beginning to the very end, including all intermediate calls. //Even though the ember changes throughought the inner loops because of interpolation, it's probably ok to assign here. //This will hold the last interpolated value (even though spatial and temporal filters were created based off of one of the first interpolated values). @@ -722,7 +722,7 @@ EmberImageComments Renderer::ImageComments(unsigned int printEditDep comments.m_Badvals = ss.str(); ss.str(""); ss << m_Stats.m_Iters; comments.m_NumIters = ss.str(); ss.str("");//Total iters. - ss << m_Stats.m_RenderSeconds; + ss << (m_Stats.m_RenderMs / 1000.0); comments.m_Runtime = ss.str();//Number of seconds for iterating, accumulating and filtering. return comments; @@ -1570,6 +1570,7 @@ template EmberStats Renderer::Iterate(unsigned __int64 iterCount, unsigned int pass, unsigned int temporalSample) { //Timing t2(4); + m_IterTimer.Tic(); unsigned int fuse = EarlyClip() ? 100 : 15;//EarlyClip was one way of detecting a later version of flam3, so it used 100 which is a better value. unsigned __int64 totalItersPerThread = (unsigned __int64)ceil((double)iterCount / (double)m_ThreadsToUse); double percent, etaMs; @@ -1663,7 +1664,8 @@ EmberStats Renderer::Iterate(unsigned __int64 iterCount, unsigned in #endif stats.m_Iters = std::accumulate(m_SubBatch.begin(), m_SubBatch.end(), 0ULL);//Sum of iter count of all threads. - stats.m_Badvals += std::accumulate(m_BadVals.begin(), m_BadVals.end(), 0ULL); + stats.m_Badvals = std::accumulate(m_BadVals.begin(), m_BadVals.end(), 0ULL); + stats.m_IterMs = m_IterTimer.Toc(); //t2.Toc(__FUNCTION__); return stats; } diff --git a/Source/Ember/Renderer.h b/Source/Ember/Renderer.h index c22e88f..ac0f202 100644 --- a/Source/Ember/Renderer.h +++ b/Source/Ember/Renderer.h @@ -58,14 +58,20 @@ public: /// Constructor which sets all values to 0. /// EmberStats() + { + Clear(); + } + + void Clear() { m_Iters = 0; m_Badvals = 0; - m_RenderSeconds = 0; + m_IterMs = 0; + m_RenderMs = 0; } unsigned __int64 m_Iters, m_Badvals; - double m_RenderSeconds; + double m_IterMs, m_RenderMs; }; /// @@ -403,7 +409,7 @@ protected: vector> m_Rand; tbb::task_group m_TaskGroup; CriticalSection m_RenderingCs, m_AccumCs, m_FinalAccumCs, m_ResizeCs; - Timing m_RenderTimer, m_ProgressTimer; + Timing m_RenderTimer, m_IterTimer, m_ProgressTimer; EmberToXml m_EmberToXml; }; diff --git a/Source/EmberAnimate/EmberAnimate.cpp b/Source/EmberAnimate/EmberAnimate.cpp index f7a0dd0..3164fb9 100644 --- a/Source/EmberAnimate/EmberAnimate.cpp +++ b/Source/EmberAnimate/EmberAnimate.cpp @@ -183,6 +183,9 @@ bool EmberAnimate(EmberOptions& opt) if (i > 0 && embers[i].m_Time <= embers[i - 1].m_Time) unsorted = true; + if (opt.Supersample() > 0) + embers[i].m_Supersample = opt.Supersample(); + embers[i].m_Quality *= T(opt.QualityScale()); embers[i].m_FinalRasW = (unsigned int)((T)embers[i].m_FinalRasW * opt.SizeScale()); embers[i].m_FinalRasH = (unsigned int)((T)embers[i].m_FinalRasH * opt.SizeScale()); @@ -244,6 +247,7 @@ bool EmberAnimate(EmberOptions& opt) os.imbue(std::locale("")); renderer->SetEmber(embers); renderer->EarlyClip(opt.EarlyClip()); + renderer->YAxisUp(opt.YAxisUp()); renderer->LockAccum(opt.LockAccum()); renderer->InsertPalette(opt.InsertPalette()); renderer->SubBatchSize(opt.SubBatchSize()); @@ -296,11 +300,13 @@ bool EmberAnimate(EmberOptions& opt) comments = renderer->ImageComments(opt.PrintEditDepth(), opt.IntPalette(), opt.HexPalette()); stats = renderer->Stats(); os.str(""); - os << comments.m_NumIters << "/" << renderer->TotalIterCount() << " (" << std::fixed << std::setprecision(2) << ((double)stats.m_Iters/(double)renderer->TotalIterCount() * 100) << "%)"; + os << comments.m_NumIters << " / " << renderer->TotalIterCount() << " (" << std::fixed << std::setprecision(2) << ((double)stats.m_Iters/(double)renderer->TotalIterCount() * 100) << "%)"; VerbosePrint("\nIters ran/requested: " + os.str()); VerbosePrint("Bad values: " << stats.m_Badvals); - VerbosePrint("Render time: " + t.Format(stats.m_RenderSeconds * 1000)); + VerbosePrint("Render time: " + t.Format(stats.m_RenderMs)); + VerbosePrint("Pure iter time: " + t.Format(stats.m_IterMs)); + VerbosePrint("Iters/sec: " << unsigned __int64(stats.m_Iters / (stats.m_IterMs / 1000.0)) << endl); VerbosePrint("Writing " + filename); if ((opt.Format() == "jpg" || opt.Format() == "bmp") && renderer->NumChannels() == 4) diff --git a/Source/EmberAnimate/EmberAnimate.rc b/Source/EmberAnimate/EmberAnimate.rc index 6bd8ff9..1ed1ed6 100644 --- a/Source/EmberAnimate/EmberAnimate.rc +++ b/Source/EmberAnimate/EmberAnimate.rc @@ -49,8 +49,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,4,1,1 - PRODUCTVERSION 0,4,1,1 + FILEVERSION 0,4,1,2 + PRODUCTVERSION 0,4,1,2 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.1" + VALUE "FileVersion", "0.4.1.2" 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.1" + VALUE "ProductVersion", "0.4.1.2" END END BLOCK "VarFileInfo" diff --git a/Source/EmberCL/RendererCL.cpp b/Source/EmberCL/RendererCL.cpp index 28fc380..8871e8e 100644 --- a/Source/EmberCL/RendererCL.cpp +++ b/Source/EmberCL/RendererCL.cpp @@ -616,6 +616,8 @@ EmberStats RendererCL::Iterate(unsigned __int64 iterCount, unsigned int pass, if (b) { + m_IterTimer.Tic();//Tic() here to avoid including build time in iter time measurement. + if (m_Stats.m_Iters == 0)//Only reset the call count on the beginning of a new render. Do not reset on KEEP_ITERATING. m_Calls = 0; @@ -623,6 +625,8 @@ EmberStats RendererCL::Iterate(unsigned __int64 iterCount, unsigned int pass, if (!b || stats.m_Iters == 0)//If no iters were executed, something went catastrophically wrong. m_Abort = true; + + stats.m_IterMs = m_IterTimer.Toc(); } else { diff --git a/Source/EmberCommon/EmberOptions.h b/Source/EmberCommon/EmberOptions.h index a41e633..33a2b60 100644 --- a/Source/EmberCommon/EmberOptions.h +++ b/Source/EmberCommon/EmberOptions.h @@ -39,6 +39,7 @@ enum eOptionIDs //Boolean args. OPT_OPENCL, OPT_EARLYCLIP, + OPT_POS_Y_UP, OPT_TRANSPARENCY, OPT_NAME_ENABLE, OPT_INT_PALETTE, @@ -59,6 +60,7 @@ enum eOptionIDs OPT_SEED, OPT_NTHREADS, OPT_STRIPS, + OPT_SUPERSAMPLE, OPT_BITS, OPT_BPC, OPT_SBS, @@ -278,9 +280,10 @@ public: //Execution bools. INITBOOLOPTION(EmberCL, Eob(OPT_USE_ALL, OPT_OPENCL, _T("--opencl"), false, SO_NONE, "\t--opencl Use OpenCL renderer (EmberCL) for rendering [default: false].\n")); INITBOOLOPTION(EarlyClip, Eob(OPT_USE_ALL, OPT_EARLYCLIP, _T("--earlyclip"), false, SO_NONE, "\t--earlyclip Perform clipping of RGB values before spatial filtering for better antialiasing and resizing [default: false].\n")); - INITBOOLOPTION(Transparency, Eob(OPT_RENDER_ANIM, OPT_TRANSPARENCY, _T("--transparency"), false, SO_NONE, "\t--transparency Include alpha channel in final output [default: false except for PNG].\n")); + INITBOOLOPTION(YAxisUp, Eob(OPT_USE_ALL, OPT_POS_Y_UP, _T("--yaxisup"), false, SO_NONE, "\t--yaxisup Orient the image with the positive y axis pointing up [default: false].\n")); + INITBOOLOPTION(Transparency, Eob(OPT_USE_ALL, OPT_TRANSPARENCY, _T("--transparency"), false, SO_NONE, "\t--transparency Include alpha channel in final output [default: false except for PNG].\n")); INITBOOLOPTION(NameEnable, Eob(OPT_USE_RENDER, OPT_NAME_ENABLE, _T("--name_enable"), false, SO_NONE, "\t--name_enable Use the name attribute contained in the xml as the output filename [default: false].\n")); - INITBOOLOPTION(IntPalette, Eob(OPT_USE_ALL, OPT_INT_PALETTE, _T("--intpalette"), false, SO_NONE, "\t--intpalette Force palette RGB values to be integers [default: false (float)].\n")); + INITBOOLOPTION(IntPalette, Eob(OPT_RENDER_ANIM, OPT_INT_PALETTE, _T("--intpalette"), false, SO_NONE, "\t--intpalette Force palette RGB values to be integers [default: false (float)].\n")); INITBOOLOPTION(HexPalette, Eob(OPT_USE_ALL, OPT_HEX_PALETTE, _T("--hex_palette"), true, SO_NONE, "\t--hex_palette Force palette RGB values to be hex [default: true].\n")); INITBOOLOPTION(InsertPalette, Eob(OPT_RENDER_ANIM, OPT_INSERT_PALETTE, _T("--insert_palette"), false, SO_NONE, "\t--insert_palette Insert the palette into the image for debugging purposes [default: false].\n")); INITBOOLOPTION(JpegComments, Eob(OPT_RENDER_ANIM, OPT_JPEG_COMMENTS, _T("--enable_jpeg_comments"), true, SO_NONE, "\t--enable_jpeg_comments Enables comments in the jpeg header [default: true].\n")); @@ -296,11 +299,12 @@ public: INITINTOPTION(Symmetry, Eoi(OPT_USE_GENOME, OPT_SYMMETRY, _T("--symmetry"), 0, SO_REQ_SEP, "\t--symmetry= Set symmetry of result [default: 0].\n")); INITINTOPTION(SheepGen, Eoi(OPT_USE_GENOME, OPT_SHEEP_GEN, _T("--sheep_gen"), -1, SO_REQ_SEP, "\t--sheep_gen= Sheep generation of this flame [default: -1].\n")); INITINTOPTION(SheepId, Eoi(OPT_USE_GENOME, OPT_SHEEP_ID, _T("--sheep_id"), -1, SO_REQ_SEP, "\t--sheep_id= Sheep ID of this flame [default: -1].\n")); - INITUINTOPTION(Platform, Eou(OPT_RENDER_ANIM, OPT_OPENCL_PLATFORM, _T("--platform"), 0, SO_REQ_SEP, "\t--platform The OpenCL platform index to use [default: 0].\n")); - INITUINTOPTION(Device, Eou(OPT_RENDER_ANIM, OPT_OPENCL_DEVICE, _T("--device"), 0, SO_REQ_SEP, "\t--device The OpenCL device index within the specified platform to use [default: 0].\n")); + INITUINTOPTION(Platform, Eou(OPT_USE_ALL, OPT_OPENCL_PLATFORM, _T("--platform"), 0, SO_REQ_SEP, "\t--platform The OpenCL platform index to use [default: 0].\n")); + INITUINTOPTION(Device, Eou(OPT_USE_ALL, OPT_OPENCL_DEVICE, _T("--device"), 0, SO_REQ_SEP, "\t--device The OpenCL device index within the specified platform to use [default: 0].\n")); INITUINTOPTION(Seed, Eou(OPT_USE_ALL, OPT_SEED, _T("--seed"), 0, SO_REQ_SEP, "\t--seed= Integer seed to use for the random number generator [default: random].\n")); INITUINTOPTION(ThreadCount, Eou(OPT_USE_ALL, OPT_NTHREADS, _T("--nthreads"), 0, SO_REQ_SEP, "\t--nthreads= The number of threads to use [default: use all available cores].\n")); INITUINTOPTION(Strips, Eou(OPT_USE_RENDER, OPT_STRIPS, _T("--nstrips"), 1, SO_REQ_SEP, "\t--nstrips= The number of fractions to split a single render frame into. Useful for print size renders or low memory systems [default: 1].\n")); + INITUINTOPTION(Supersample, Eou(OPT_RENDER_ANIM, OPT_SUPERSAMPLE, _T("--supersample"), 0, SO_REQ_SEP, "\t--supersample= The supersample value used to override the one specified in the file [default: 0 (use value from file)].\n")); INITUINTOPTION(BitsPerChannel, Eou(OPT_RENDER_ANIM, OPT_BPC, _T("--bpc"), 8, SO_REQ_SEP, "\t--bpc= Bits per channel. 8 or 16 for PNG, 8 for all others [default: 8].\n")); INITUINTOPTION(SubBatchSize, Eou(OPT_USE_ALL, OPT_SBS, _T("--sub_batch_size"), 10240, SO_REQ_SEP, "\t--sub_batch_size= The chunk size that iterating will be broken into [default: 10k].\n")); INITUINTOPTION(Bits, Eou(OPT_USE_ALL, OPT_BITS, _T("--bits"), 33, SO_REQ_SEP, "\t--bits= Determines the types used for the histogram and accumulator [default: 33].\n" @@ -309,7 +313,7 @@ public: "\t\t\t\t\t64: Histogram: double, Accumulator: double.\n")); INITUINTOPTION(PrintEditDepth, Eou(OPT_USE_ALL, OPT_PRINT_EDIT_DEPTH, _T("--print_edit_depth"), 0, SO_REQ_SEP, "\t--print_edit_depth= Depth to truncate tag structure when converting a flame to xml. 0 prints all tags [default: 0].\n")); - INITUINTOPTION(JpegQuality, Eou(OPT_USE_ALL, OPT_JPEG, _T("--jpeg"), 95, SO_REQ_SEP, "\t--jpeg= Jpeg quality 0-100 for compression [default: 95].\n")); + INITUINTOPTION(JpegQuality, Eou(OPT_RENDER_ANIM, OPT_JPEG, _T("--jpeg"), 95, SO_REQ_SEP, "\t--jpeg= Jpeg quality 0-100 for compression [default: 95].\n")); INITUINTOPTION(FirstFrame, Eou(OPT_USE_ANIMATE, OPT_BEGIN, _T("--begin"), UINT_MAX, SO_REQ_SEP, "\t--begin= Time of first frame to render [default: first time specified in file].\n")); INITUINTOPTION(LastFrame, Eou(OPT_USE_ANIMATE, OPT_END, _T("--end"), UINT_MAX, SO_REQ_SEP, "\t--end= Time of last frame to render [default: last time specified in the input file].\n")); INITUINTOPTION(Time, Eou(OPT_ANIM_GENOME, OPT_TIME, _T("--time"), 0, SO_REQ_SEP, "\t--time= Time of first and last frame (ie do one frame).\n")); @@ -322,10 +326,10 @@ public: INITUINTOPTION(MaxXforms, Eou(OPT_USE_GENOME, OPT_MAX_XFORMS, _T("--maxxforms"), UINT_MAX, SO_REQ_SEP, "\t--maxxforms= The maximum number of xforms allowed in the final output.\n")); //Double. - INITDOUBLEOPTION(SizeScale, Eod(OPT_USE_ALL, OPT_SS, _T("--ss"), 1, SO_REQ_SEP, "\t--ss= Size scale. All dimensions are scaled by this amount [default: 1.0].\n")); - INITDOUBLEOPTION(QualityScale, Eod(OPT_USE_ALL, OPT_QS, _T("--qs"), 1, SO_REQ_SEP, "\t--qs= Quality scale. All quality values are scaled by this amount [default: 1.0].\n")); + INITDOUBLEOPTION(SizeScale, Eod(OPT_RENDER_ANIM, OPT_SS, _T("--ss"), 1, SO_REQ_SEP, "\t--ss= Size scale. All dimensions are scaled by this amount [default: 1.0].\n")); + INITDOUBLEOPTION(QualityScale, Eod(OPT_RENDER_ANIM, OPT_QS, _T("--qs"), 1, SO_REQ_SEP, "\t--qs= Quality scale. All quality values are scaled by this amount [default: 1.0].\n")); INITDOUBLEOPTION(AspectRatio, Eod(OPT_USE_ALL, OPT_PIXEL_ASPECT, _T("--pixel_aspect"), 1, SO_REQ_SEP, "\t--pixel_aspect= Aspect ratio of pixels (width over height), eg. 0.90909 for NTSC [default: 1.0].\n")); - INITDOUBLEOPTION(Stagger, Eod(OPT_USE_ALL, OPT_STAGGER, _T("--stagger"), 0, SO_REQ_SEP, "\t--stagger= Affects simultaneity of xform interpolation during flame interpolation.\n" + INITDOUBLEOPTION(Stagger, Eod(OPT_USE_GENOME, OPT_STAGGER, _T("--stagger"), 0, SO_REQ_SEP, "\t--stagger= Affects simultaneity of xform interpolation during flame interpolation.\n" "\t Represents how 'separate' the xforms are interpolated. Set to 1 for each\n" "\t xform to be interpolated individually, fractions control interpolation overlap [default: 0].\n")); INITDOUBLEOPTION(AvgThresh, Eod(OPT_USE_GENOME, OPT_AVG_THRESH, _T("--avg"), 20.0, SO_REQ_SEP, "\t--avg= Minimum average pixel channel sum (r + g + b) threshold from 0 - 765. Ignored if sequence, inter or rotate were specified [default: 20].\n")); @@ -338,10 +342,10 @@ public: //String. INITSTRINGOPTION(IsaacSeed, Eos(OPT_USE_ALL, OPT_ISAAC_SEED, _T("--isaac_seed"), "", SO_REQ_SEP, "\t--isaac_seed= Character-based seed for the random number generator [default: random].\n")); - INITSTRINGOPTION(Input, Eos(OPT_USE_ALL, OPT_IN, _T("--in"), "", SO_REQ_SEP, "\t--in= Name of the input file.\n")); - INITSTRINGOPTION(Out, Eos(OPT_USE_ALL, OPT_OUT, _T("--out"), "", SO_REQ_SEP, "\t--out= Name of a single output file. Not recommended when rendering more than one image.\n")); - INITSTRINGOPTION(Prefix, Eos(OPT_USE_ALL, OPT_PREFIX, _T("--prefix"), "", SO_REQ_SEP, "\t--prefix= Prefix to prepend to all output files.\n")); - INITSTRINGOPTION(Suffix, Eos(OPT_USE_ALL, OPT_SUFFIX, _T("--suffix"), "", SO_REQ_SEP, "\t--suffix= Suffix to append to all output files.\n")); + INITSTRINGOPTION(Input, Eos(OPT_RENDER_ANIM, OPT_IN, _T("--in"), "", SO_REQ_SEP, "\t--in= Name of the input file.\n")); + INITSTRINGOPTION(Out, Eos(OPT_RENDER_ANIM, OPT_OUT, _T("--out"), "", SO_REQ_SEP, "\t--out= Name of a single output file. Not recommended when rendering more than one image.\n")); + INITSTRINGOPTION(Prefix, Eos(OPT_RENDER_ANIM, OPT_PREFIX, _T("--prefix"), "", SO_REQ_SEP, "\t--prefix= Prefix to prepend to all output files.\n")); + INITSTRINGOPTION(Suffix, Eos(OPT_RENDER_ANIM, OPT_SUFFIX, _T("--suffix"), "", SO_REQ_SEP, "\t--suffix= Suffix to append to all output files.\n")); INITSTRINGOPTION(Format, Eos(OPT_RENDER_ANIM, OPT_FORMAT, _T("--format"), "png", SO_REQ_SEP, "\t--format= Format of the output file. Valid values are: bmp, jpg, png, ppm [default: jpg].\n")); INITSTRINGOPTION(PalettePath, Eos(OPT_USE_ALL, OPT_PALETTE_FILE, _T("--flam3_palettes"), "flam3-palettes.xml", SO_REQ_SEP, "\t--flam3_palettes= Path and name of the palette file [default: flam3-palettes.xml].\n")); INITSTRINGOPTION(PaletteImage, Eos(OPT_USE_ALL, OPT_PALETTE_IMAGE, _T("--image"), "", SO_REQ_SEP, "\t--image= Replace palette with png, jpg, or ppm image.\n")); @@ -409,6 +413,7 @@ public: PARSEBOOLOPTION(OPT_DUMP_OPENCL_INFO, OpenCLInfo); PARSEBOOLOPTION(OPT_OPENCL, EmberCL); PARSEBOOLOPTION(OPT_EARLYCLIP, EarlyClip); + PARSEBOOLOPTION(OPT_POS_Y_UP, YAxisUp); PARSEBOOLOPTION(OPT_TRANSPARENCY, Transparency); PARSEBOOLOPTION(OPT_NAME_ENABLE, NameEnable); PARSEBOOLOPTION(OPT_INT_PALETTE, IntPalette); @@ -431,6 +436,7 @@ public: PARSEUINTOPTION(OPT_SEED, Seed); PARSEUINTOPTION(OPT_NTHREADS, ThreadCount); PARSEUINTOPTION(OPT_STRIPS, Strips); + PARSEUINTOPTION(OPT_SUPERSAMPLE, Supersample); PARSEUINTOPTION(OPT_BITS, Bits); PARSEUINTOPTION(OPT_BPC, BitsPerChannel); PARSEUINTOPTION(OPT_SBS, SubBatchSize); @@ -617,6 +623,7 @@ public: EmberOptionEntry EmberCL;//Value bool. EmberOptionEntry EarlyClip; + EmberOptionEntry YAxisUp; EmberOptionEntry Transparency; EmberOptionEntry NameEnable; EmberOptionEntry IntPalette; @@ -639,6 +646,7 @@ public: EmberOptionEntry Seed; EmberOptionEntry ThreadCount; EmberOptionEntry Strips; + EmberOptionEntry Supersample; EmberOptionEntry BitsPerChannel; EmberOptionEntry SubBatchSize; EmberOptionEntry Bits; diff --git a/Source/EmberGenome/EmberGenome.cpp b/Source/EmberGenome/EmberGenome.cpp index ea03e5e..98cba97 100644 --- a/Source/EmberGenome/EmberGenome.cpp +++ b/Source/EmberGenome/EmberGenome.cpp @@ -101,8 +101,6 @@ bool EmberGenome(EmberOptions& opt) { if (opt.ThreadCount() != 0) renderer->ThreadCount(opt.ThreadCount(), opt.IsaacSeed() != "" ? opt.IsaacSeed().c_str() : NULL); - - renderer->LockAccum(opt.LockAccum()); } else { @@ -494,8 +492,11 @@ bool EmberGenome(EmberOptions& opt) //Repeat. renderer->EarlyClip(opt.EarlyClip()); + renderer->YAxisUp(opt.YAxisUp()); + renderer->LockAccum(opt.LockAccum()); renderer->SubBatchSize(opt.SubBatchSize()); renderer->PixelAspectRatio(T(opt.AspectRatio())); + renderer->Transparency(opt.Transparency()); if (opt.Repeat() == 0) { diff --git a/Source/EmberGenome/EmberGenome.rc b/Source/EmberGenome/EmberGenome.rc index 12be5b4..593cad0 100644 --- a/Source/EmberGenome/EmberGenome.rc +++ b/Source/EmberGenome/EmberGenome.rc @@ -49,8 +49,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,4,1,1 - PRODUCTVERSION 0,4,1,1 + FILEVERSION 0,4,1,2 + PRODUCTVERSION 0,4,1,2 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.1" + VALUE "FileVersion", "0.4.1.2" 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.1" + VALUE "ProductVersion", "0.4.1.2" END END BLOCK "VarFileInfo" diff --git a/Source/EmberRender/EmberRender.cpp b/Source/EmberRender/EmberRender.cpp index 146ca40..b3cfdd4 100644 --- a/Source/EmberRender/EmberRender.cpp +++ b/Source/EmberRender/EmberRender.cpp @@ -143,6 +143,7 @@ bool EmberRender(EmberOptions& opt) //Final setup steps before running. os.imbue(std::locale("")); renderer->EarlyClip(opt.EarlyClip()); + renderer->YAxisUp(opt.YAxisUp()); renderer->LockAccum(opt.LockAccum()); renderer->InsertPalette(opt.InsertPalette()); renderer->SubBatchSize(opt.SubBatchSize()); @@ -159,6 +160,9 @@ bool EmberRender(EmberOptions& opt) else VerbosePrint(endl); + if (opt.Supersample() > 0) + embers[i].m_Supersample = opt.Supersample(); + embers[i].m_TemporalSamples = 1;//Force temporal samples to 1 for render. embers[i].m_Quality *= T(opt.QualityScale()); embers[i].m_FinalRasW = (unsigned int)((T)embers[i].m_FinalRasW * opt.SizeScale()); @@ -294,11 +298,13 @@ bool EmberRender(EmberOptions& opt) comments = renderer->ImageComments(opt.PrintEditDepth(), opt.IntPalette(), opt.HexPalette()); stats = renderer->Stats(); os.str(""); - os << comments.m_NumIters << "/" << renderer->TotalIterCount() << " (" << std::fixed << std::setprecision(2) << ((double)stats.m_Iters/(double)renderer->TotalIterCount() * 100) << "%)"; + os << comments.m_NumIters << " / " << renderer->TotalIterCount() << " (" << std::fixed << std::setprecision(2) << ((double)stats.m_Iters/(double)renderer->TotalIterCount() * 100) << "%)"; VerbosePrint("\nIters ran/requested: " + os.str()); VerbosePrint("Bad values: " << stats.m_Badvals); - VerbosePrint("Render time: " + t.Format(stats.m_RenderSeconds * 1000)); + VerbosePrint("Render time: " + t.Format(stats.m_RenderMs)); + VerbosePrint("Pure iter time: " + t.Format(stats.m_IterMs)); + VerbosePrint("Iters/sec: " << unsigned __int64(stats.m_Iters / (stats.m_IterMs / 1000.0)) << endl); VerbosePrint("Writing " + filename); if ((opt.Format() == "jpg" || opt.Format() == "bmp") && renderer->NumChannels() == 4) diff --git a/Source/EmberRender/EmberRender.rc b/Source/EmberRender/EmberRender.rc index 0ee29ce..530af1f 100644 --- a/Source/EmberRender/EmberRender.rc +++ b/Source/EmberRender/EmberRender.rc @@ -49,8 +49,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,4,1,1 - PRODUCTVERSION 0,4,1,1 + FILEVERSION 0,4,1,2 + PRODUCTVERSION 0,4,1,2 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.1" + VALUE "FileVersion", "0.4.1.2" 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.1" + VALUE "ProductVersion", "0.4.1.2" END END BLOCK "VarFileInfo" diff --git a/Source/Fractorium/AboutDialog.ui b/Source/Fractorium/AboutDialog.ui index 5382776..c14ff39 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.1 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.2 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 a2b147e..7628741 100644 --- a/Source/Fractorium/FinalRenderEmberController.cpp +++ b/Source/Fractorium/FinalRenderEmberController.cpp @@ -200,7 +200,6 @@ FinalRenderEmberController::FinalRenderEmberController(FractoriumFinalRenderD for (i = 0; i < m_EmberFile.m_Embers.size() && m_Run; i++) { m_Renderer->Reset();//Have to manually set this since the ember is not set each time through. - m_PureIterTime = 0; m_RenderTimer.Tic();//Toc() is called in the progress function. if (m_Renderer->Run(m_FinalImage, i) != RENDER_OK) @@ -223,7 +222,6 @@ FinalRenderEmberController::FinalRenderEmberController(FractoriumFinalRenderD for (i = 0; i < m_EmberFile.m_Embers.size() && m_Run; i++) { m_Renderer->SetEmber(m_EmberFile.m_Embers[i]); - m_PureIterTime = 0; m_RenderTimer.Tic();//Toc() is called in the progress function. if (m_Renderer->Run(m_FinalImage) != RENDER_OK) @@ -241,7 +239,6 @@ FinalRenderEmberController::FinalRenderEmberController(FractoriumFinalRenderD ResetProgress(); m_Ember.m_TemporalSamples = 1; m_Renderer->SetEmber(m_Ember); - m_PureIterTime = 0; memset(m_FinalImage.data(), 0, m_FinalImage.size() * sizeof(m_FinalImage[0])); m_RenderTimer.Tic();//Toc() is called in the progress function. @@ -293,12 +290,7 @@ int FinalRenderEmberController::ProgressFunc(Ember& ember, void* foo, doub int intFract = (int)fraction; if (stage == 0) - { QMetaObject::invokeMethod(m_FinalRender->ui.FinalRenderIterationProgress, "setValue", Qt::QueuedConnection, Q_ARG(int, intFract)); - - if (intFract == 100) - m_PureIterTime = m_RenderTimer.Toc(); - } else if (stage == 1) QMetaObject::invokeMethod(m_FinalRender->ui.FinalRenderFilteringProgress, "setValue", Qt::QueuedConnection, Q_ARG(int, intFract)); else if (stage == 2) @@ -312,7 +304,7 @@ int FinalRenderEmberController::ProgressFunc(Ember& ember, void* foo, doub QFileInfo original(filename); EmberStats stats = m_Renderer->Stats(); QString iters = QLocale(QLocale::English).toString(stats.m_Iters); - QString itersPerSec = QLocale(QLocale::English).toString(unsigned __int64(stats.m_Iters / (m_PureIterTime / 1000.0))); + QString itersPerSec = QLocale(QLocale::English).toString(unsigned __int64(stats.m_Iters / (stats.m_IterMs / 1000.0))); if (m_GuiState.m_DoAll && m_EmberFile.m_Embers.size() > 1) filename = original.absolutePath() + QDir::separator() + m_GuiState.m_Prefix + QString::fromStdString(m_EmberFile.m_Embers[m_FinishedImageCount].m_Name) + m_GuiState.m_Suffix + "." + m_GuiState.m_DoAllExt; diff --git a/Source/Fractorium/FinalRenderEmberController.h b/Source/Fractorium/FinalRenderEmberController.h index 373d7d0..dedaf29 100644 --- a/Source/Fractorium/FinalRenderEmberController.h +++ b/Source/Fractorium/FinalRenderEmberController.h @@ -75,7 +75,6 @@ protected: bool m_PreviewRun; unsigned int m_ImageCount; unsigned int m_FinishedImageCount; - double m_PureIterTime; QFuture m_Result; QFuture m_FinalPreviewResult; diff --git a/Source/Fractorium/Fractorium.rc b/Source/Fractorium/Fractorium.rc index a4c5e63a289f8c0adb554be974b698ac1c6885c5..788b6ac0da11bb11f36c1ad437724877611c99b4 100644 GIT binary patch delta 46 wcmcbod{23U7YC!!WN!{bMx)KO9PG?Mjv|-%WC32W&6~KHm>}HEXLyBJ04?MTumAu6 delta 46 wcmcbod{23U7YC!^WN!{bM#Igu9PG?Mjv|-%WC32W&6~KHm>}HEXLyBJ04;k9tN;K2