diff --git a/Builds/CB/.objs/Source/Ember/Affine2D.o b/Builds/CB/.objs/Source/Ember/Affine2D.o new file mode 100644 index 0000000..a281db9 Binary files /dev/null and b/Builds/CB/.objs/Source/Ember/Affine2D.o differ diff --git a/Builds/CB/.objs/Source/Ember/DllMain.o b/Builds/CB/.objs/Source/Ember/DllMain.o new file mode 100644 index 0000000..5dcd506 Binary files /dev/null and b/Builds/CB/.objs/Source/Ember/DllMain.o differ diff --git a/Builds/CB/.objs/Source/Ember/Ember.o b/Builds/CB/.objs/Source/Ember/Ember.o new file mode 100644 index 0000000..6e04cd1 Binary files /dev/null and b/Builds/CB/.objs/Source/Ember/Ember.o differ diff --git a/Builds/CB/.objs/Source/Ember/EmberPch.o b/Builds/CB/.objs/Source/Ember/EmberPch.o new file mode 100644 index 0000000..94ec76a Binary files /dev/null and b/Builds/CB/.objs/Source/Ember/EmberPch.o differ diff --git a/Builds/CB/.objs/Source/Ember/Renderer.o b/Builds/CB/.objs/Source/Ember/Renderer.o new file mode 100644 index 0000000..6a2a7a5 Binary files /dev/null and b/Builds/CB/.objs/Source/Ember/Renderer.o differ diff --git a/Builds/CB/.objs/Source/Ember/RendererBase.o b/Builds/CB/.objs/Source/Ember/RendererBase.o new file mode 100644 index 0000000..eff674f Binary files /dev/null and b/Builds/CB/.objs/Source/Ember/RendererBase.o differ diff --git a/Builds/CB/Ember.cbp b/Builds/CB/Ember.cbp index 646ee7f..82fe734 100644 --- a/Builds/CB/Ember.cbp +++ b/Builds/CB/Ember.cbp @@ -120,6 +120,8 @@ + + diff --git a/Builds/CB/Ember.depend b/Builds/CB/Ember.depend new file mode 100644 index 0000000..2117b70 --- /dev/null +++ b/Builds/CB/Ember.depend @@ -0,0 +1,314 @@ +# depslib dependency file v1.0 +1413384022 source:/home/heretic/Dev/fractorium/Source/Ember/Affine2D.cpp + "EmberPch.h" + "Affine2D.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/EmberPch.h + + + + + + + + + + + + + + + + + + + + + + + + + + "libxml/parser.h" + "libxml2/libxml/parser.h" + "tbb/task_group.h" + "tbb/parallel_for.h" + "tbb/task_scheduler_init.h" + "glm/glm.hpp" + "glm/gtc/matrix_transform.hpp" + "glm/gtc/type_ptr.hpp" + "glm/gtx/string_cast.hpp" + +1402664682 /usr/include/libxml2/libxml/parser.h + + + + + + + + + + + + + +1402664682 /usr/include/libxml2/libxml/xmlversion.h + + + +1402664682 /usr/include/libxml2/libxml/xmlexports.h + +1402664682 /usr/include/libxml2/libxml/tree.h + + + + + + + +1402664682 /usr/include/libxml2/libxml/xmlstring.h + + + +1402664682 /usr/include/libxml2/libxml/xmlregexp.h + + + + +1402664682 /usr/include/libxml2/libxml/dict.h + + + + +1402664682 /usr/include/libxml2/libxml/xmlmemory.h + + + + + +1402664682 /usr/include/libxml2/libxml/threads.h + + + +1402664682 /usr/include/libxml2/libxml/globals.h + + + + + + + + +1402664682 /usr/include/libxml2/libxml/xmlerror.h + + +1402664682 /usr/include/libxml2/libxml/SAX.h + + + + + + +1402664682 /usr/include/libxml2/libxml/xlink.h + + + +1402664682 /usr/include/libxml2/libxml/SAX2.h + + + + + + +1402664682 /usr/include/libxml2/libxml/hash.h + + + + +1402664682 /usr/include/libxml2/libxml/valid.h + + + + + + + +1402664682 /usr/include/libxml2/libxml/list.h + + +1402664682 /usr/include/libxml2/libxml/xmlautomata.h + + + + +1402664682 /usr/include/libxml2/libxml/entities.h + + + +1402664682 /usr/include/libxml2/libxml/encoding.h + + + + + +1402664682 /usr/include/libxml2/libxml/xmlIO.h + + + + + + + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/Affine2D.h + "Utils.h" + +1413385950 /home/heretic/Dev/fractorium/Source/Ember/Utils.h + "Isaac.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/Isaac.h + "EmberDefines.h" + +1413385406 /home/heretic/Dev/fractorium/Source/Ember/EmberDefines.h + "EmberPch.h" + +1413384022 source:/home/heretic/Dev/fractorium/Source/Ember/DllMain.cpp + "EmberPch.h" + +1413384022 source:/home/heretic/Dev/fractorium/Source/Ember/Ember.cpp + "EmberPch.h" + "EmberDefines.h" + "Isaac.h" + "Ember.h" + "Utils.h" + "Iterator.h" + "Palette.h" + "PaletteList.h" + "Point.h" + "Variation.h" + "Variations01.h" + "Variations02.h" + "Variations03.h" + "Variations04.h" + "Variations05.h" + "VariationsDC.h" + "VariationList.h" + "Affine2D.h" + "Xform.h" + "EmberToXml.h" + "XmlToEmber.h" + "SpatialFilter.h" + "DensityFilter.h" + "TemporalFilter.h" + "Interpolate.h" + "Renderer.h" + "Timing.h" + "SheepTools.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/Ember.h + "Xform.h" + "PaletteList.h" + "SpatialFilter.h" + "TemporalFilter.h" + +1413384023 /home/heretic/Dev/fractorium/Source/Ember/Xform.h + "VariationList.h" + "Interpolate.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/VariationList.h + "Variations01.h" + "Variations02.h" + "Variations03.h" + "Variations04.h" + "Variations05.h" + "VariationsDC.h" + +1413384023 /home/heretic/Dev/fractorium/Source/Ember/Variations01.h + "Variation.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/Variation.h + "Point.h" + "Isaac.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/Point.h + "EmberDefines.h" + "Affine2D.h" + "Timing.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/Timing.h + "EmberDefines.h" + +1413384023 /home/heretic/Dev/fractorium/Source/Ember/Variations02.h + "Variation.h" + +1413384023 /home/heretic/Dev/fractorium/Source/Ember/Variations03.h + "Variation.h" + +1413384023 /home/heretic/Dev/fractorium/Source/Ember/Variations04.h + "Variation.h" + +1413384023 /home/heretic/Dev/fractorium/Source/Ember/Variations05.h + "Variation.h" + +1413384023 /home/heretic/Dev/fractorium/Source/Ember/VariationsDC.h + "Variation.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/Interpolate.h + "Ember.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/PaletteList.h + "Palette.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/Palette.h + "Utils.h" + "Isaac.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/SpatialFilter.h + "EmberDefines.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/TemporalFilter.h + "EmberDefines.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/Iterator.h + "Ember.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/EmberToXml.h + "Utils.h" + "PaletteList.h" + "VariationList.h" + "Ember.h" + +1413385813 /home/heretic/Dev/fractorium/Source/Ember/XmlToEmber.h + "Utils.h" + "PaletteList.h" + "VariationList.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/DensityFilter.h + "SpatialFilter.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/Renderer.h + "RendererBase.h" + "Iterator.h" + "SpatialFilter.h" + "TemporalFilter.h" + "Interpolate.h" + "CarToRas.h" + "EmberToXml.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/RendererBase.h + "Utils.h" + "Ember.h" + "DensityFilter.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/CarToRas.h + "Point.h" + +1413384022 /home/heretic/Dev/fractorium/Source/Ember/SheepTools.h + "EmberDefines.h" + "Isaac.h" + "VariationList.h" + "Renderer.h" + +1413384022 source:/home/heretic/Dev/fractorium/Source/Ember/EmberPch.cpp + "EmberPch.h" + diff --git a/Builds/CB/fractorium.workspace.layout b/Builds/CB/fractorium.workspace.layout index 284130f..81402f4 100644 --- a/Builds/CB/fractorium.workspace.layout +++ b/Builds/CB/fractorium.workspace.layout @@ -1,5 +1,4 @@ - - + diff --git a/Builds/CB/libEmber.so b/Builds/CB/libEmber.so new file mode 100755 index 0000000..4f267ec Binary files /dev/null and b/Builds/CB/libEmber.so differ diff --git a/Source/Ember/Renderer.cpp b/Source/Ember/Renderer.cpp index 300970d..f81b1bd 100644 --- a/Source/Ember/Renderer.cpp +++ b/Source/Ember/Renderer.cpp @@ -118,7 +118,7 @@ void Renderer::ComputeBounds() { size_t maxDEFilterWidth = 0; - m_GutterWidth = ClampGte((m_SpatialFilter->FinalFilterWidth() - Supersample()) / 2, 0ULL); + m_GutterWidth = ClampGte((m_SpatialFilter->FinalFilterWidth() - Supersample()) / 2, size_t(0)); //Check the size of the density estimation filter. //If the radius of the density estimation filter is greater than the @@ -373,8 +373,8 @@ eRenderStatus Renderer::Run(vector& finalImage, doubl pass = (resume ? m_LastPass : 0); //Make sure values are within valid range. - ClampGteRef(m_Ember.m_Passes, 1ULL); - ClampGteRef(m_Ember.m_Supersample, 1ULL); + ClampGteRef(m_Ember.m_Passes, size_t(1)); + ClampGteRef(m_Ember.m_Supersample, size_t(1)); //Make sure to get most recent update since loop won't be entered to call Interp(). //Vib, gam and background are normally summed for each temporal sample. However if iteration is skipped, make sure to get the latest. @@ -883,16 +883,16 @@ eRenderStatus Renderer::GaussianDensityFilter() bool scf = !(Supersample() & 1); intmax_t ss = Floor(Supersample() / T(2)); T scfact = pow(Supersample() / (Supersample() + T(1.0)), T(2.0)); - + size_t threads = m_ThreadsToUse; size_t startRow = Supersample() - 1; size_t endRow = m_SuperRasH - (Supersample() - 1);//Original did + which is most likely wrong. intmax_t startCol = Supersample() - 1; intmax_t endCol = m_SuperRasW - (Supersample() - 1); size_t chunkSize = (size_t)ceil(double(endRow - startRow) / double(threads)); - + //parallel_for scales very well, dividing the work almost perfectly among all processors. - parallel_for(0ULL, threads, [&] (size_t threadIndex) + parallel_for(size_t(0), threads, [&] (size_t threadIndex) { size_t pixelNumber = 0; int localStartRow = (int)min(startRow + (threadIndex * chunkSize), endRow - 1); @@ -900,7 +900,7 @@ eRenderStatus Renderer::GaussianDensityFilter() size_t pixelsThisThread = size_t(localEndRow - localStartRow) * m_SuperRasW; double lastPercent = 0; glm::detail::tvec4 logScaleBucket; - + for (intmax_t j = localStartRow; (j < localEndRow) && !m_Abort; j++) { size_t bucketRowStart = j * m_SuperRasW;//Pull out of inner loop for optimization. @@ -908,20 +908,20 @@ eRenderStatus Renderer::GaussianDensityFilter() const glm::detail::tvec4* buckets = m_HistBuckets.data(); const T* filterCoefs = m_DensityFilter->Coefs(); const T* filterWidths = m_DensityFilter->Widths(); - + for (intmax_t i = startCol; i < endCol; i++) { intmax_t ii, jj, arrFilterWidth; size_t filterSelectInt, filterCoefIndex; T filterSelect = 0; bucket = buckets + bucketRowStart + i; - + //Don't do anything if there's no hits here. Must also put this first to avoid dividing by zero below. if (bucket->a == 0) continue; - + T cacheLog = (m_K1 * log(T(1.0) + bucket->a * m_K2)) / bucket->a;//Caching this calculation gives a 30% speedup. - + if (ss == 0) { filterSelect = bucket->a; @@ -935,33 +935,33 @@ eRenderStatus Renderer::GaussianDensityFilter() intmax_t densityBoxRightX = (i + min(ss, (intmax_t)m_SuperRasW - i - 1)); intmax_t densityBoxTopY = (j - min(j, ss)); intmax_t densityBoxBottomY = (j + min(ss, (intmax_t)m_SuperRasH - j - 1)); - + //Count density in ssxss area. //Original went one col at a time, which is cache inefficient. Go one row at at time here for a slight speedup. for (jj = densityBoxTopY; jj <= densityBoxBottomY; jj++) for (ii = densityBoxLeftX; ii <= densityBoxRightX; ii++) filterSelect += buckets[ii + (jj * m_SuperRasW)].a;//Original divided by 255 in every iteration. Omit here because colors are already in the range of [0..1]. } - + //Scale if supersample > 1 for equal iters. if (scf) filterSelect *= scfact; - + if (filterSelect > m_DensityFilter->MaxFilteredCounts()) filterSelectInt = m_DensityFilter->MaxFilterIndex(); else if (filterSelect <= DE_THRESH) filterSelectInt = (size_t)ceil(filterSelect) - 1; else filterSelectInt = DE_THRESH + (size_t)Floor(pow(filterSelect - DE_THRESH, m_DensityFilter->Curve())); - + //If the filter selected below the min specified clamp it to the min. if (filterSelectInt > m_DensityFilter->MaxFilterIndex()) filterSelectInt = m_DensityFilter->MaxFilterIndex(); - + //Only have to calculate the values for ~1/8 of the square. filterCoefIndex = filterSelectInt * m_DensityFilter->KernelSize(); arrFilterWidth = (intmax_t)ceil(filterWidths[filterSelectInt]) - 1; - + for (jj = 0; jj <= arrFilterWidth; jj++) { for (ii = 0; ii <= jj; ii++, filterCoefIndex++) @@ -969,12 +969,12 @@ eRenderStatus Renderer::GaussianDensityFilter() //Skip if coef is 0. if (filterCoefs[filterCoefIndex] == 0) continue; - + T logScale = filterCoefs[filterCoefIndex] * cacheLog; - + //Original first assigned the fields, then scaled them. Combine into a single step for a 1% optimization. logScaleBucket = (*bucket * bucketT(logScale)); - + if (jj == 0 && ii == 0) { AddToAccum(logScaleBucket, i, ii, j, jj); @@ -1008,28 +1008,28 @@ eRenderStatus Renderer::GaussianDensityFilter() } } } - + if (m_Callback && threadIndex == 0) { pixelNumber += m_SuperRasW; double percent = (double(pixelNumber) / double(pixelsThisThread)) * 100.0; double percentDiff = percent - lastPercent; double toc = localTime.Toc(); - + if (percentDiff >= 10 || (toc > 1000 && percentDiff >= 1)) { double etaMs = ((100.0 - percent) / percent) * totalTime.Toc(); - + if (!m_Callback->ProgressFunc(m_Ember, m_ProgressParameter, percent, 1, etaMs)) Abort(); - + lastPercent = percent; localTime.Tic(); } } } }); - + if (m_Callback && !m_Abort) m_Callback->ProgressFunc(m_Ember, m_ProgressParameter, 100.0, 1, 0); @@ -1078,7 +1078,7 @@ eRenderStatus Renderer::AccumulatorToFinalImage(unsigned char* pixel //The original does it this way as well and it's roughly 11 times faster to do it this way than inline below with each pixel. if (EarlyClip()) { - parallel_for(0ULL, m_SuperRasH, [&] (size_t j) + parallel_for(size_t(0), m_SuperRasH, [&] (size_t j) { size_t rowStart = j * m_SuperRasW;//Pull out of inner loop for optimization. @@ -1099,7 +1099,7 @@ eRenderStatus Renderer::AccumulatorToFinalImage(unsigned char* pixel //otherwise artifacts that resemble page tearing will occur in an interactive run. It's //critical to never exit this loop prematurely. //for (size_t j = 0; j < FinalRasH(); j++)//Keep around for debugging. - parallel_for(0ULL, FinalRasH(), [&](size_t j) + parallel_for(size_t(0), FinalRasH(), [&](size_t j) { Color newBucket; size_t pixelsRowStart = (m_YAxisUp ? ((FinalRasH() - j) - 1) : j) * FinalRowSize();//Pull out of inner loop for optimization. @@ -1234,7 +1234,7 @@ EmberStats Renderer::Iterate(size_t iterCount, size_t pass, size_t t threadIndex = i; m_TaskGroup.run([&, threadIndex] () { #else - parallel_for(0ULL, m_ThreadsToUse, [&] (size_t threadIndex) + parallel_for(size_t(0), m_ThreadsToUse, [&] (size_t threadIndex) { #endif Timing t; diff --git a/Source/Ember/XmlToEmber.h b/Source/Ember/XmlToEmber.h index 2a054bf..b4542b2 100644 --- a/Source/Ember/XmlToEmber.h +++ b/Source/Ember/XmlToEmber.h @@ -335,7 +335,7 @@ public: { const char* loc = __FUNCTION__; string buf; - + //Ensure palette list is setup first. if (!m_PaletteList.Init()) { @@ -632,7 +632,7 @@ private: } else if (!Compare(curAtt->name, "size")) { - if (sscanf_s(attStr, "%u %u", ¤tEmber.m_FinalRasW, ¤tEmber.m_FinalRasH) != 2) + if (sscanf_s(attStr, "%lu %lu", ¤tEmber.m_FinalRasW, ¤tEmber.m_FinalRasH) != 2) { m_ErrorReport.push_back(string(loc) + " : Invalid size attribute " + string(attStr)); xmlFree(attStr);