@@ -247,7 +247,7 @@ int main(int argc, char** argv)
247
247
scene::ICameraSceneNode * staticCamera;
248
248
scene::ICameraSceneNode * interactiveCamera;
249
249
std::filesystem::path outputFilePath;
250
- ext::MitsubaLoader::CElementFilm::FileFormat format ;
250
+ ext::MitsubaLoader::CElementFilm::FileFormat fileFormat ;
251
251
252
252
void resetInteractiveCamera ()
253
253
{
@@ -268,6 +268,27 @@ int main(int argc, char** argv)
268
268
269
269
auto smgr = device->getSceneManager ();
270
270
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
+
271
292
auto isFileExtensionCompatibleWithFormat = [](std::string extension, ext::MitsubaLoader::CElementFilm::FileFormat format) -> bool
272
293
{
273
294
if (extension.empty ())
@@ -371,8 +392,8 @@ int main(int argc, char** argv)
371
392
std::cout << " \t Camera Move Speed = " << outSensorData.moveSpeed << std::endl;
372
393
373
394
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 ))
376
397
{
377
398
std::cout << " [ERROR] film.outputFilePath's extension is not compatible with film.fileFormat" << std::endl;
378
399
}
@@ -583,8 +604,9 @@ int main(int argc, char** argv)
583
604
lastFPSTime = time;
584
605
}
585
606
}
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));
588
610
renderer->deinitScreenSizedResources ();
589
611
}
590
612
@@ -637,7 +659,10 @@ int main(int argc, char** argv)
637
659
638
660
auto screenshotFilePath = sensorData.outputFilePath ;
639
661
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
+ }
641
666
642
667
std::cout << " -- Rendered Successfully: " << filePath << " (Sensor=" << s << " ) to file (" << screenshotFilePath.string () << " )." << std::endl;
643
668
0 commit comments