diff --git a/Source/Ember/Utils.h b/Source/Ember/Utils.h
index 79061d8..b3d5734 100644
--- a/Source/Ember/Utils.h
+++ b/Source/Ember/Utils.h
@@ -815,6 +815,24 @@ static string Trim(const string& str, char ch = ' ')
return ret;
}
+///
+/// Return a copy of a file path string with the path portion removed.
+///
+/// The string to retrieve the path from
+/// The path portion of the string
+static string GetPath(const string& filename)
+{
+ string s;
+ const size_t lastSlash = filename.find_last_of("\\/");
+
+ if (std::string::npos != lastSlash)
+ s = filename.substr(0, lastSlash + 1);
+ else
+ s = "";
+
+ return s;
+}
+
///
/// Placeholder for a templated function to query the value of a specified system environment variable
/// of a specific type. This function does nothing as the functions for specific types implement the behavior
diff --git a/Source/EmberAnimate/EmberAnimate.cpp b/Source/EmberAnimate/EmberAnimate.cpp
index d05aa2d..c216715 100644
--- a/Source/EmberAnimate/EmberAnimate.cpp
+++ b/Source/EmberAnimate/EmberAnimate.cpp
@@ -34,7 +34,7 @@ bool EmberAnimate(EmberOptions& opt)
bool appendXml = false;
unsigned char* finalImagep;
unsigned int i, channels, ftime;
- string s, flameName, filename;
+ string s, flameName, filename, inputPath = GetPath(opt.Input());
ostringstream os;
vector finalImage, vecRgb;
vector> embers;
@@ -44,8 +44,8 @@ bool EmberAnimate(EmberOptions& opt)
Ember centerEmber;
XmlToEmber parser;
EmberToXml emberToXml;
- auto_ptr> progress(new RenderProgress());
- auto_ptr> renderer(CreateRenderer(opt.EmberCL() ? OPENCL_RENDERER : CPU_RENDERER, opt.Platform(), opt.Device(), false, 0, emberReport));
+ unique_ptr> progress(new RenderProgress());
+ unique_ptr> renderer(CreateRenderer(opt.EmberCL() ? OPENCL_RENDERER : CPU_RENDERER, opt.Platform(), opt.Device(), false, 0, emberReport));
vector errorReport = emberReport.ErrorReport();
if (!errorReport.empty())
@@ -277,7 +277,7 @@ bool EmberAnimate(EmberOptions& opt)
if (opt.Out().empty())
{
os.str("");
- os << opt.Prefix() << setfill('0') << setw(5) << ftime << opt.Suffix() << "." << opt.Format();
+ os << inputPath << opt.Prefix() << setfill('0') << setw(5) << ftime << opt.Suffix() << "." << opt.Format();
filename = os.str();
}
diff --git a/Source/EmberCommon/JpegUtils.h b/Source/EmberCommon/JpegUtils.h
index d342fe0..3af418f 100644
--- a/Source/EmberCommon/JpegUtils.h
+++ b/Source/EmberCommon/JpegUtils.h
@@ -353,7 +353,7 @@ static bool WriteBmp(const char* filename, unsigned char* image, size_t width, s
{
bool b = false;
size_t newSize;
- auto_ptr bgrBuf(ConvertRGBToBMPBuffer(image, width, height, newSize));
+ unique_ptr bgrBuf(ConvertRGBToBMPBuffer(image, width, height, newSize));
if (bgrBuf.get())
b = SaveBmp(filename, bgrBuf.get(), width, height, newSize);
diff --git a/Source/EmberGenome/EmberGenome.cpp b/Source/EmberGenome/EmberGenome.cpp
index 8764cd6..92860d1 100644
--- a/Source/EmberGenome/EmberGenome.cpp
+++ b/Source/EmberGenome/EmberGenome.cpp
@@ -77,8 +77,8 @@ bool EmberGenome(EmberOptions& opt)
EmberToXml emberToXml;
VariationList varList;
EmberReport emberReport, emberReport2;
- auto_ptr> progress(new RenderProgress());
- auto_ptr> renderer(CreateRenderer(opt.EmberCL() ? OPENCL_RENDERER : CPU_RENDERER, opt.Platform(), opt.Device(), false, 0, emberReport));
+ unique_ptr> progress(new RenderProgress());
+ unique_ptr> renderer(CreateRenderer(opt.EmberCL() ? OPENCL_RENDERER : CPU_RENDERER, opt.Platform(), opt.Device(), false, 0, emberReport));
QTIsaac rand(ISAAC_INT(t.Tic()), ISAAC_INT(t.Tic() * 2), ISAAC_INT(t.Tic() * 3));
vector errorReport = emberReport.ErrorReport();
diff --git a/Source/EmberRender/EmberRender.cpp b/Source/EmberRender/EmberRender.cpp
index f717735..1d9a758 100644
--- a/Source/EmberRender/EmberRender.cpp
+++ b/Source/EmberRender/EmberRender.cpp
@@ -32,6 +32,7 @@ bool EmberRender(EmberOptions& opt)
size_t strips;
size_t iterCount;
string filename;
+ string inputPath = GetPath(opt.Input());
ostringstream os;
vector> embers;
vector finalImage, vecRgb;
@@ -41,8 +42,8 @@ bool EmberRender(EmberOptions& opt)
XmlToEmber parser;
EmberToXml emberToXml;
vector> randVec;
- auto_ptr> progress(new RenderProgress());
- auto_ptr> renderer(CreateRenderer(opt.EmberCL() ? OPENCL_RENDERER : CPU_RENDERER, opt.Platform(), opt.Device(), false, 0, emberReport));
+ unique_ptr> progress(new RenderProgress());
+ unique_ptr> renderer(CreateRenderer(opt.EmberCL() ? OPENCL_RENDERER : CPU_RENDERER, opt.Platform(), opt.Device(), false, 0, emberReport));
vector errorReport = emberReport.ErrorReport();
if (!errorReport.empty())
@@ -250,13 +251,13 @@ bool EmberRender(EmberOptions& opt)
}
else if (opt.NameEnable() && !finalEmber.m_Name.empty())
{
- filename = opt.Prefix() + finalEmber.m_Name + opt.Suffix() + "." + opt.Format();
+ filename = inputPath + opt.Prefix() + finalEmber.m_Name + opt.Suffix() + "." + opt.Format();
}
else
{
ostringstream ssLocal;
- ssLocal << opt.Prefix() << setfill('0') << setw(5) << i << opt.Suffix() << "." << opt.Format();
+ ssLocal << inputPath << opt.Prefix() << setfill('0') << setw(5) << i << opt.Suffix() << "." << opt.Format();
filename = ssLocal.str();
}
diff --git a/Source/EmberTester/EmberTester.cpp b/Source/EmberTester/EmberTester.cpp
index d42bded..734c5a4 100644
--- a/Source/EmberTester/EmberTester.cpp
+++ b/Source/EmberTester/EmberTester.cpp
@@ -139,9 +139,9 @@ void MakeTestAllVarsRegPrePostComboFile(const string& filename)
while (index < varList.RegSize())
{
Ember ember1;
- auto_ptr> regVar (varList.GetVariationCopy(index, VARTYPE_REG));
- auto_ptr> preVar (varList.GetVariationCopy("pre_" + regVar->Name()));
- auto_ptr> postVar(varList.GetVariationCopy("post_" + regVar->Name()));
+ unique_ptr> regVar(varList.GetVariationCopy(index, VARTYPE_REG));
+ unique_ptr> preVar(varList.GetVariationCopy("pre_" + regVar->Name()));
+ unique_ptr> postVar(varList.GetVariationCopy("post_" + regVar->Name()));
ember1.m_FinalRasW = 640;
ember1.m_FinalRasH = 480;
@@ -666,7 +666,7 @@ bool TestVarCopy()
{
Variation* var = vlf.GetVariation(i);
Variation* destVar = NULL;
- auto_ptr> copyVar(var->Copy());//Test Copy().
+ unique_ptr> copyVar(var->Copy());//Test Copy().
if (!TestVarEqual(var, copyVar.get()))
{
@@ -675,7 +675,7 @@ bool TestVarCopy()
}
var->Copy(destVar);//Test Copy(var*);
- auto_ptr> destPtr(destVar);//Just for deletion.
+ unique_ptr> destPtr(destVar);//Just for deletion.
if (!TestVarEqual(var, destPtr.get()))
{
@@ -1142,13 +1142,13 @@ void TestXformsInOutPoints()
while (index < varList.RegSize())
{
vector> xforms;
- auto_ptr> regVar (varList.GetVariationCopy(index, VARTYPE_REG));
+ unique_ptr> regVar(varList.GetVariationCopy(index, VARTYPE_REG));
string s = regVar->OpenCLString() + regVar->OpenCLFuncsString();
if (s.find("MwcNext") == string::npos)
{
- auto_ptr> preVar (varList.GetVariationCopy("pre_" + regVar->Name()));
- auto_ptr> postVar(varList.GetVariationCopy("post_" + regVar->Name()));
+ unique_ptr> preVar(varList.GetVariationCopy("pre_" + regVar->Name()));
+ unique_ptr> postVar(varList.GetVariationCopy("post_" + regVar->Name()));
Xform xform0(0.25f, rand.Frand01(), rand.Frand11(), 1, rand.Frand11(), rand.Frand11(), rand.Frand11(), rand.Frand11(), rand.Frand11(), rand.Frand11());
Xform xform1(0.25f, rand.Frand01(), rand.Frand11(), 1, rand.Frand11(), rand.Frand11(), rand.Frand11(), rand.Frand11(), rand.Frand11(), rand.Frand11());
@@ -1772,9 +1772,9 @@ int _tmain(int argc, _TCHAR* argv[])
//cout << "sizeof(RendererCL): " << sizeof(RendererCL) << endl;
//cout << "sizeof(RendererCL): " << sizeof(RendererCL) << endl;
- /*auto_ptr> linV(new LinearVariation());
- auto_ptr> preLinV(new PreLinearVariation());
- auto_ptr> postLinV(new PostLinearVariation());
+ /*unique_ptr> linV(new LinearVariation());
+ unique_ptr> preLinV(new PreLinearVariation());
+ unique_ptr> postLinV(new PostLinearVariation());
cout << linV->BaseName() << endl;
cout << preLinV->BaseName() << endl;
@@ -1789,7 +1789,7 @@ int _tmain(int argc, _TCHAR* argv[])
//TestGpuVectorRead();
//TestGpuVectorRead();
//return 0;
- //auto_ptr> preFarblurV(new PreFarblurVariation());
+ //unique_ptr> preFarblurV(new PreFarblurVariation());
//size_t vsize = 1024 * 1024;
//
//t.Tic();
diff --git a/Source/Fractorium/FinalRenderDialog.cpp b/Source/Fractorium/FinalRenderDialog.cpp
index 3e0e59f..22b30d1 100644
--- a/Source/Fractorium/FinalRenderDialog.cpp
+++ b/Source/Fractorium/FinalRenderDialog.cpp
@@ -670,10 +670,10 @@ bool FractoriumFinalRenderDialog::CreateControllerFromGUI(bool createRenderer)
//Create a float or double controller based on the GUI.
#ifdef DO_DOUBLE
if (Double())
- m_Controller = auto_ptr(new FinalRenderEmberController(this));
+ m_Controller = unique_ptr(new FinalRenderEmberController(this));
else
#endif
- m_Controller = auto_ptr(new FinalRenderEmberController(this));
+ m_Controller = unique_ptr(new FinalRenderEmberController(this));
//Restore the ember and ember file.
if (m_Controller.get())
diff --git a/Source/Fractorium/FinalRenderDialog.h b/Source/Fractorium/FinalRenderDialog.h
index e34de69..8e473cc 100644
--- a/Source/Fractorium/FinalRenderDialog.h
+++ b/Source/Fractorium/FinalRenderDialog.h
@@ -125,6 +125,6 @@ private:
QLineEdit* m_SuffixEdit;
FractoriumSettings* m_Settings;
Fractorium* m_Fractorium;
- auto_ptr m_Controller;
+ unique_ptr m_Controller;
Ui::FinalRenderDialog ui;
};
diff --git a/Source/Fractorium/FinalRenderEmberController.cpp b/Source/Fractorium/FinalRenderEmberController.cpp
index 13ede86..cb74d4b 100644
--- a/Source/Fractorium/FinalRenderEmberController.cpp
+++ b/Source/Fractorium/FinalRenderEmberController.cpp
@@ -92,7 +92,7 @@ template
FinalRenderEmberController::FinalRenderEmberController(FractoriumFinalRenderDialog* finalRender)
: FinalRenderEmberControllerBase(finalRender)
{
- m_FinalPreviewRenderer = auto_ptr>(new EmberNs::Renderer());
+ m_FinalPreviewRenderer = unique_ptr>(new EmberNs::Renderer());
m_FinalPreviewRenderer->Callback(NULL);
m_FinalPreviewRenderer->NumChannels(4);
@@ -418,7 +418,7 @@ bool FinalRenderEmberController::CreateRenderer(eRendererType renderType, uns
m_OutputTexID = 0;//Don't care about tex ID when doing final render.
m_Shared = shared;
- m_Renderer = auto_ptr(::CreateRenderer(renderType, platform, device, shared, m_OutputTexID, emberReport));
+ m_Renderer = unique_ptr(::CreateRenderer(renderType, platform, device, shared, m_OutputTexID, emberReport));
errorReport = emberReport.ErrorReport();
if (!errorReport.empty())
diff --git a/Source/Fractorium/FinalRenderEmberController.h b/Source/Fractorium/FinalRenderEmberController.h
index 48b97fc..06dfec2 100644
--- a/Source/Fractorium/FinalRenderEmberController.h
+++ b/Source/Fractorium/FinalRenderEmberController.h
@@ -135,7 +135,7 @@ protected:
Ember m_PreviewEmber;
EmberFile m_EmberFile;
EmberToXml m_XmlWriter;
- auto_ptr> m_FinalPreviewRenderer;
+ unique_ptr> m_FinalPreviewRenderer;
};
template class FinalRenderEmberController;
diff --git a/Source/Fractorium/Fractorium.cpp b/Source/Fractorium/Fractorium.cpp
index 7907c52..fd86bdf 100644
--- a/Source/Fractorium/Fractorium.cpp
+++ b/Source/Fractorium/Fractorium.cpp
@@ -84,10 +84,10 @@ Fractorium::Fractorium(QWidget* parent)
//of their respective objects.
#ifdef DO_DOUBLE
if (m_Settings->Double())
- m_Controller = auto_ptr(new FractoriumEmberController(this));
+ m_Controller = unique_ptr(new FractoriumEmberController(this));
else
#endif
- m_Controller = auto_ptr(new FractoriumEmberController(this));
+ m_Controller = unique_ptr(new FractoriumEmberController(this));
if (m_Wrapper.CheckOpenCL() && m_Settings->OpenCL() && m_QualitySpin->value() < 30)
m_QualitySpin->setValue(30);
diff --git a/Source/Fractorium/Fractorium.h b/Source/Fractorium/Fractorium.h
index 0b05800..856b956 100644
--- a/Source/Fractorium/Fractorium.h
+++ b/Source/Fractorium/Fractorium.h
@@ -398,7 +398,7 @@ private:
int m_VarSortMode;
int m_PreviousPaletteRow;
OpenCLWrapper m_Wrapper;
- auto_ptr m_Controller;
+ unique_ptr m_Controller;
Ui::FractoriumClass ui;
};
diff --git a/Source/Fractorium/FractoriumEmberController.cpp b/Source/Fractorium/FractoriumEmberController.cpp
index c5869ec..446f901 100644
--- a/Source/Fractorium/FractoriumEmberController.cpp
+++ b/Source/Fractorium/FractoriumEmberController.cpp
@@ -69,9 +69,9 @@ FractoriumEmberController::FractoriumEmberController(Fractorium* fractorium)
{
m_PreviewRun = false;
m_PreviewRunning = false;
- m_SheepTools = auto_ptr>(new SheepTools("flam3-palettes.xml", new EmberNs::Renderer()));
- m_GLController = auto_ptr>(new GLEmberController(fractorium, fractorium->ui.GLDisplay, this));
- m_PreviewRenderer = auto_ptr>(new EmberNs::Renderer());
+ m_SheepTools = unique_ptr>(new SheepTools("flam3-palettes.xml", new EmberNs::Renderer()));
+ m_GLController = unique_ptr>(new GLEmberController(fractorium, fractorium->ui.GLDisplay, this));
+ m_PreviewRenderer = unique_ptr>(new EmberNs::Renderer());
SetupVariationTree();
InitPaletteTable("flam3-palettes.xml");
BackgroundChanged(QColor(0, 0, 0));//Default to black.
diff --git a/Source/Fractorium/FractoriumEmberController.h b/Source/Fractorium/FractoriumEmberController.h
index 140a474..003c50c 100644
--- a/Source/Fractorium/FractoriumEmberController.h
+++ b/Source/Fractorium/FractoriumEmberController.h
@@ -231,7 +231,7 @@ protected:
vector m_FinalImage;
vector m_PreviewFinalImage;
vector m_ProcessActions;
- auto_ptr m_Renderer;
+ unique_ptr m_Renderer;
QTIsaac m_Rand;
Fractorium* m_Fractorium;
QTimer* m_RenderTimer;
@@ -447,9 +447,9 @@ private:
Palette m_TempPalette;
PaletteList m_PaletteList;
VariationList m_VariationList;
- auto_ptr> m_SheepTools;
- auto_ptr> m_GLController;
- auto_ptr> m_PreviewRenderer;
+ unique_ptr> m_SheepTools;
+ unique_ptr> m_GLController;
+ unique_ptr> m_PreviewRenderer;
QFuture m_PreviewResult;
std::function m_PreviewRenderFunc;
};
diff --git a/Source/Fractorium/FractoriumRender.cpp b/Source/Fractorium/FractoriumRender.cpp
index ffc147e..a22908e 100644
--- a/Source/Fractorium/FractoriumRender.cpp
+++ b/Source/Fractorium/FractoriumRender.cpp
@@ -493,7 +493,7 @@ bool FractoriumEmberController::CreateRenderer(eRendererType renderType, unsi
DeleteRenderer();//Delete the renderer and refresh the textures.
//Before starting, must take care of allocations.
gl->Allocate(true);//Forcing a realloc of the texture is necessary on AMD, but not on nVidia.
- m_Renderer = auto_ptr(::CreateRenderer(renderType, platform, device, shared, gl->OutputTexID(), emberReport));
+ m_Renderer = unique_ptr(::CreateRenderer(renderType, platform, device, shared, gl->OutputTexID(), emberReport));
errorReport = emberReport.ErrorReport();
if (errorReport.empty())
@@ -625,10 +625,10 @@ bool Fractorium::CreateControllerFromOptions()
#ifdef DO_DOUBLE
if (m_Settings->Double())
- m_Controller = auto_ptr(new FractoriumEmberController(this));
+ m_Controller = unique_ptr(new FractoriumEmberController(this));
else
#endif
- m_Controller = auto_ptr(new FractoriumEmberController(this));
+ m_Controller = unique_ptr(new FractoriumEmberController(this));
//Restore the ember and ember file.
if (m_Controller.get())