Skip to content

Commit e78cf77

Browse files
committed
Get Extension from Film::fileFormat if the outputFilePath is not specified.
1 parent aad019d commit e78cf77

File tree

1 file changed

+31
-6
lines changed

1 file changed

+31
-6
lines changed

examples_tests/22.RaytracedAO/main.cpp

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)