| Attached Files | 0001170.diff [^] (8,726 bytes) 2012-01-14 17:42 [Show Content] [Hide Content]diff -r 95f8ca75d1e0 core/api.cpp
--- a/core/api.cpp Wed Jan 11 19:42:56 2012 +0100
+++ b/core/api.cpp Sat Jan 14 18:40:13 2012 -0700
@@ -582,6 +582,11 @@
Context::GetActive()->SaveFLM(string(name));
}
+extern "C" void luxMergeFLM(const char* name)
+{
+ Context::GetActive()->MergeFLM(string(name));
+}
+
extern "C" void luxOverrideResumeFLM(const char *name)
{
Context::GetActive()->OverrideResumeFLM(string(name));
diff -r 95f8ca75d1e0 core/api.h
--- a/core/api.h Wed Jan 11 19:42:56 2012 +0100
+++ b/core/api.h Sat Jan 14 18:40:13 2012 -0700
@@ -113,9 +113,10 @@
LUX_EXPORT void luxMotionInstance(const char *name, float startTime, float endTime, const char *toTransform);
LUX_EXPORT void luxWorldEnd();
-/* Load/Save FLM file */
+/* Load/Save/Merge FLM file */
LUX_EXPORT void luxLoadFLM(const char* name);
LUX_EXPORT void luxSaveFLM(const char* name);
+LUX_EXPORT void luxMergeFLM(const char* name);
/* Overrides the resume settings of the Film in the next scene to resume from the given FLM file, or use filename from scene if empty */
LUX_EXPORT void luxOverrideResumeFLM(const char *name);
/* Overrides the Film output filename */
diff -r 95f8ca75d1e0 core/context.cpp
--- a/core/context.cpp Wed Jan 11 19:42:56 2012 +0100
+++ b/core/context.cpp Sat Jan 14 18:40:13 2012 -0700
@@ -1054,6 +1054,25 @@
luxCurrentScene->SaveFLM(flmFileName);
}
+void Context::MergeFLM(const string &flmFileName) {
+ lux::Film *film = luxCurrentScene->camera->film;
+
+ std::ifstream ifs(flmFileName.c_str(), std::ios_base::in | std::ios_base::binary);
+ if(ifs.good()) {
+ // read the data
+ LOG(LUX_INFO,LUX_NOERROR) << "Merging FLM file: " << flmFileName;
+ float newSamples = film->UpdateFilm(ifs);
+ if (newSamples <= 0) {
+ LOG(LUX_SEVERE,LUX_NOFILE) << "Error reading FLM file '" << flmFileName << "'";
+ } else {
+ LOG(LUX_INFO,LUX_NOERROR) << "Merged " << newSamples << " samples from FLM file";
+ }
+ }
+ else
+ LOG(LUX_SEVERE,LUX_NOFILE) << "Error opening FLM file '" << flmFileName << "'";
+ ifs.close();
+}
+
// Save current film to OpenEXR image
void Context::SaveEXR(const string &name, bool useHalfFloat, bool includeZBuffer, int compressionType, bool tonemapped) {
luxCurrentScene->SaveEXR(name, useHalfFloat, includeZBuffer, compressionType, tonemapped);
diff -r 95f8ca75d1e0 core/context.h
--- a/core/context.h Wed Jan 11 19:42:56 2012 +0100
+++ b/core/context.h Sat Jan 14 18:40:13 2012 -0700
@@ -141,6 +141,7 @@
// Load/save FLM file
void LoadFLM(const string &name);
void SaveFLM(const string &name);
+ void MergeFLM(const string &name);
void OverrideResumeFLM(const string &name);
void OverrideFilename(const string &filename);
diff -r 95f8ca75d1e0 qtgui/luxrender.ui
--- a/qtgui/luxrender.ui Wed Jan 11 19:42:56 2012 +0100
+++ b/qtgui/luxrender.ui Sat Jan 14 18:40:13 2012 -0700
@@ -1179,6 +1179,7 @@
<addaction name="action_resumeFLM"/>
<addaction name="action_loadFLM"/>
<addaction name="action_saveFLM"/>
+ <addaction name="action_mergeFLM"/>
<addaction name="separator"/>
<addaction name="action_Save_Panel_Settings"/>
<addaction name="action_Load_Panel_Settings"/>
@@ -1220,6 +1221,11 @@
<string>Save FLM...</string>
</property>
</action>
+ <action name="action_mergeFLM">
+ <property name="text">
+ <string>Merge FLM...</string>
+ </property>
+ </action>
<action name="action_exitAppSave">
<property name="text">
<string>Save and Exit</string>
diff -r 95f8ca75d1e0 qtgui/mainwindow.cpp
--- a/qtgui/mainwindow.cpp Wed Jan 11 19:42:56 2012 +0100
+++ b/qtgui/mainwindow.cpp Sat Jan 14 18:40:13 2012 -0700
@@ -73,6 +73,7 @@
int EVT_LUX_TONEMAPPED = QEvent::registerEventType();
int EVT_LUX_FLMLOADERROR = QEvent::registerEventType();
int EVT_LUX_SAVEDFLM = QEvent::registerEventType();
+int EVT_LUX_MERGEDFLM = QEvent::registerEventType();
int EVT_LUX_LOGEVENT = QEvent::registerEventType();
int EVT_LUX_BATCHEVENT = QEvent::registerEventType();
int EVT_LUX_NETWORKUPDATETREEEVENT = QEvent::registerEventType();
@@ -166,6 +167,7 @@
connect(ui->action_resumeFLM, SIGNAL(triggered()), this, SLOT(resumeFLM()));
connect(ui->action_loadFLM, SIGNAL(triggered()), this, SLOT(loadFLM()));
connect(ui->action_saveFLM, SIGNAL(triggered()), this, SLOT(saveFLM()));
+ connect(ui->action_mergeFLM, SIGNAL(triggered()), this, SLOT(mergeFLM()));
connect(ui->action_exitAppSave, SIGNAL(triggered()), this, SLOT(exitAppSave()));
connect(ui->action_exitApp, SIGNAL(triggered()), this, SLOT(exitApp()));
connect(ui->action_Save_Panel_Settings, SIGNAL(triggered()), this, SLOT(SavePanelSettings()));
@@ -351,6 +353,9 @@
m_saveTimer = new QTimer();
connect(m_saveTimer, SIGNAL(timeout()), SLOT(saveTimeout()));
+ m_mergeTimer = new QTimer();
+ connect(m_mergeTimer, SIGNAL(timeout()), SLOT(mergeTimeout()));
+
m_netTimer = new QTimer();
connect(m_netTimer, SIGNAL(timeout()), SLOT(netTimeout()));
@@ -372,6 +377,7 @@
m_updateThread = NULL;
m_flmloadThread = NULL;
m_flmsaveThread = NULL;
+ m_flmmergeThread = NULL;
m_batchProcessThread = NULL;
batchProgress = NULL;
@@ -427,6 +433,7 @@
delete m_updateThread;
delete m_flmloadThread;
delete m_flmsaveThread;
+ delete m_flmmergeThread;
delete m_renderTimer;
delete m_batchProcessThread;
delete renderView;
@@ -751,6 +758,30 @@
m_flmsaveThread = new boost::thread(boost::bind(&MainWindow::flmSaveThread, this, flmFileName));
}
+void MainWindow::mergeFLM(QString flmFileName)
+{
+ if( !luxStatistics("sceneIsReady") && !luxStatistics("filmIsReady") )
+ return;
+
+ if(m_guiRenderState == WAITING )
+ return;
+
+ if (flmFileName.isNull() || flmFileName.isEmpty())
+ flmFileName = QFileDialog::getOpenFileName(this, tr("Choose an FLM file to merge"), m_lastOpendir, tr("LuxRender FLM files (*.flm)"));
+
+ if(flmFileName.isNull())
+ return;
+
+ indicateActivity ();
+ statusMessage->setText("Merging FLM...");
+
+ // Start merge thread
+ m_mergeTimer->start(1000);
+
+ delete m_flmmergeThread;
+ m_flmmergeThread = new boost::thread(boost::bind(&MainWindow::flmMergeThread, this, flmFileName));
+}
+
// Render menu slots
void MainWindow::resumeRender()
{
@@ -1105,6 +1136,10 @@
m_flmsaveThread->join();
delete m_flmsaveThread;
m_flmsaveThread = NULL;
+ if (m_flmmergeThread)
+ m_flmmergeThread->join();
+ delete m_flmmergeThread;
+ m_flmmergeThread = NULL;
if (m_updateThread)
m_updateThread->join();
delete m_updateThread;
@@ -1258,6 +1293,13 @@
qApp->postEvent(this, new QEvent((QEvent::Type)EVT_LUX_SAVEDFLM));
}
+void MainWindow::flmMergeThread(QString filename)
+{
+ luxMergeFLM(qPrintable(filename));
+
+ qApp->postEvent(this, new QEvent((QEvent::Type)EVT_LUX_MERGEDFLM));
+}
+
void MainWindow::batchProcessThread(QString inDir, QString outDir, QString outExtension, bool allLightGroups, bool asHDR)
{
// Find 'flm' files in the input directory
@@ -1752,6 +1794,17 @@
m_flmsaveThread = NULL;
retval = TRUE;
}
+ else if (eventtype == EVT_LUX_MERGEDFLM) {
+ m_mergeTimer->stop();
+ statusMessage->setText("");
+ // reset progressindicator
+ indicateActivity(false);
+ if (m_flmmergeThread)
+ m_flmmergeThread->join();
+ delete m_flmmergeThread;
+ m_flmmergeThread = NULL;
+ retval = TRUE;
+ }
else if (eventtype == EVT_LUX_LOGEVENT) {
logEvent((LuxLogEvent *)event);
retval = TRUE;
diff -r 95f8ca75d1e0 qtgui/mainwindow.hxx
--- a/qtgui/mainwindow.hxx Wed Jan 11 19:42:56 2012 +0100
+++ b/qtgui/mainwindow.hxx Sat Jan 14 18:40:13 2012 -0700
@@ -312,9 +312,9 @@
LuxGuiRenderState m_guiRenderState;
- QTimer *m_renderTimer, *m_statsTimer, *m_loadTimer, *m_saveTimer, *m_netTimer, *m_blinkTimer;
+ QTimer *m_renderTimer, *m_statsTimer, *m_loadTimer, *m_saveTimer, *m_mergeTimer, *m_netTimer, *m_blinkTimer;
- boost::thread *m_engineThread, *m_updateThread, *m_flmloadThread, *m_flmsaveThread, *m_batchProcessThread, *m_networkAddRemoveSlavesThread;
+ boost::thread *m_engineThread, *m_updateThread, *m_flmloadThread, *m_flmsaveThread, *m_flmmergeThread, *m_batchProcessThread, *m_networkAddRemoveSlavesThread;
bool openExrHalfFloats, openExrDepthBuffer;
int openExrCompressionType;
@@ -334,6 +334,7 @@
void updateThread();
void flmLoadThread(QString filename);
void flmSaveThread(QString filename);
+ void flmMergeThread(QString filename);
void batchProcessThread(QString inDir, QString outDir, QString outExtension, bool allLightGroups, bool asHDR);
enum { MaxRecentServers = 20 };
@@ -388,6 +389,7 @@
void resumeFLM ();
void loadFLM (QString flmFileName = QString());
void saveFLM ();
+ void mergeFLM (QString flmFileName = QString());
void resumeRender ();
void pauseRender ();
void stopRender ();
|