@@ -247,7 +247,7 @@ int main(int argc, char** argv)
247247 scene::ICameraSceneNode * staticCamera;
248248 scene::ICameraSceneNode * interactiveCamera;
249249 std::filesystem::path outputFilePath;
250- ext::MitsubaLoader::CElementFilm::FileFormat format ;
250+ ext::MitsubaLoader::CElementFilm::FileFormat fileFormat ;
251251
252252 void resetInteractiveCamera ()
253253 {
@@ -268,6 +268,27 @@ int main(int argc, char** argv)
268268
269269 auto smgr = device->getSceneManager ();
270270
271+ // When outputFilePath isn't set in Film Element in Mitsuba, use this to find the extension string.
272+ auto getFileExtensionFromFormat= [](ext::MitsubaLoader::CElementFilm::FileFormat format) -> std::string
273+ {
274+ std::string ret = " " ;
275+ using FileFormat = ext::MitsubaLoader::CElementFilm::FileFormat;
276+ switch (format) {
277+ case FileFormat::PNG:
278+ ret = " .png" ;
279+ break ;
280+ case FileFormat::OPENEXR:
281+ ret = " .exr" ;
282+ break ;
283+ case FileFormat::JPEG:
284+ ret = " .jpg" ;
285+ break ;
286+ default : // TODO?
287+ break ;
288+ }
289+ return ret;
290+ };
291+
271292 auto isFileExtensionCompatibleWithFormat = [](std::string extension, ext::MitsubaLoader::CElementFilm::FileFormat format) -> bool
272293 {
273294 if (extension.empty ())
@@ -371,8 +392,8 @@ int main(int argc, char** argv)
371392 std::cout << " \t Camera Move Speed = " << outSensorData.moveSpeed << std::endl;
372393
373394 outSensorData.outputFilePath = std::filesystem::path (film.outputFilePath );
374-
375- if (!isFileExtensionCompatibleWithFormat (outSensorData.outputFilePath .extension ().string (), film .fileFormat ))
395+ outSensorData. fileFormat = film. fileFormat ;
396+ if (!isFileExtensionCompatibleWithFormat (outSensorData.outputFilePath .extension ().string (), outSensorData .fileFormat ))
376397 {
377398 std::cout << " [ERROR] film.outputFilePath's extension is not compatible with film.fileFormat" << std::endl;
378399 }
@@ -583,8 +604,9 @@ int main(int argc, char** argv)
583604 lastFPSTime = time;
584605 }
585606 }
586-
587- renderer->takeAndSaveScreenShot (std::filesystem::path (" LastView_" + mainFileName + " _Sensor_" + std::to_string (activeSensor) + " .exr" ));
607+
608+ auto extensionStr = getFileExtensionFromFormat (sensors[activeSensor].fileFormat );
609+ renderer->takeAndSaveScreenShot (std::filesystem::path (" LastView_" + mainFileName + " _Sensor_" + std::to_string (activeSensor) + extensionStr));
588610 renderer->deinitScreenSizedResources ();
589611 }
590612
@@ -637,7 +659,10 @@ int main(int argc, char** argv)
637659
638660 auto screenshotFilePath = sensorData.outputFilePath ;
639661 if (screenshotFilePath.empty ())
640- screenshotFilePath = std::filesystem::path (" ScreenShot_" + mainFileName + " _Sensor_" + std::to_string (s) + " .exr" );
662+ {
663+ auto extensionStr = getFileExtensionFromFormat (sensorData.fileFormat );
664+ screenshotFilePath = std::filesystem::path (" ScreenShot_" + mainFileName + " _Sensor_" + std::to_string (s) + extensionStr);
665+ }
641666
642667 std::cout << " -- Rendered Successfully: " << filePath << " (Sensor=" << s << " ) to file (" << screenshotFilePath.string () << " )." << std::endl;
643668
0 commit comments