@@ -16,69 +16,93 @@ constexpr std::string_view helpMessage = R"(
1616
1717Parameters:
1818-SCENE=sceneMitsubaXMLPathOrZipAndXML
19- -TERMINATE
2019
2120Description and usage:
2221
2322-SCENE:
2423 some/path extra/path which will make it skip the file choose dialog
2524
26- -TERMINATE:
27- which will make the app stop when the required amount of samples has been renderered (its in the Mitsuba Scene metadata) and obviously take screenshot when quitting
25+ -PROCESS_SENSORS ID:
26+ It will control the behaviour of sensors in the app as detailed above.
27+ If the option is not passed, then it defaults to RenderAllThenInteractive.
28+ If the ID is not passed, then it defaults to 0.
2829
2930Example Usages :
30- raytracedao.exe -SCENE=../../media/kitchen.zip scene.xml -TERMINATE
31- raytracedao.exe -SCENE="../../media/my good kitchen.zip" scene.xml -TERMINATE
32- raytracedao.exe -SCENE="../../media/my good kitchen.zip scene.xml" -TERMINATE
33- raytracedao.exe -SCENE="../../media/extraced folder/scene.xml" -TERMINATE
31+ raytracedao.exe -SCENE=../../media/kitchen.zip scene.xml
32+ raytracedao.exe -SCENE=../../media/kitchen.zip scene.xml -PROCESS_SENSORS RenderAllThenInteractive
33+ raytracedao.exe -SCENE="../../media/my good kitchen.zip" scene.xml -PROCESS_SENSORS RenderAllThenTerminate 0
34+ raytracedao.exe -SCENE="../../media/my good kitchen.zip scene.xml" -PROCESS_SENSORS RenderSensorThenInteractive 1
35+ raytracedao.exe -SCENE="../../media/extraced folder/scene.xml" -PROCESS_SENSORS InteractiveAtSensor 2
3436)" ;
3537
3638
3739constexpr std::string_view SCENE_VAR_NAME = " SCENE" ;
3840constexpr std::string_view SCREENSHOT_OUTPUT_FOLDER_VAR_NAME = " SCREENSHOT_OUTPUT_FOLDER" ;
39- constexpr std::string_view TERMINATE_VAR_NAME = " TERMINATE" ;
41+ constexpr std::string_view PROCESS_SENSORS_VAR_NAME = " PROCESS_SENSORS" ;
42+ constexpr std::string_view DEFER_DENOISE_VAR_NAME = " DEFER_DENOISE" ;
4043
4144constexpr uint32_t MaxRayTracerCommandLineArgs = 8 ;
4245
4346enum RaytracerExampleArguments
4447{
4548 REA_SCENE,
46- REA_TERMINATE,
49+ REA_PROCESS_SENSORS,
50+ REA_DEFER_DENOISE,
4751 REA_COUNT,
4852};
4953
54+ enum class ProcessSensorsBehaviour
55+ {
56+ PSB_RENDER_ALL_THEN_INTERACTIVE,
57+ PSB_RENDER_ALL_THEN_TERMINATE,
58+ PSB_RENDER_SENSOR_THEN_INTERACTIVE,
59+ PSB_INTERACTIVE_AT_SENSOR,
60+ PSB_COUNT
61+ };
62+
5063using variablesType = std::unordered_map<RaytracerExampleArguments, std::optional<std::vector<std::string>>>;
5164
5265class CommandLineHandler
5366{
5467 public:
55-
5668 CommandLineHandler (const std::vector<std::string>& argv);
5769
58- auto & getSceneDirectory () const
70+ inline auto & getSceneDirectory () const
5971 {
6072 return sceneDirectory;
6173 }
6274
63- auto & getTerminate () const
75+ inline auto & getProcessSensorsBehaviour () const
6476 {
65- return terminate ;
77+ return processSensorsBehaviour ;
6678 }
6779
68- private:
80+ inline auto & getSensorID () const
81+ {
82+ return sensorID;
83+ }
6984
85+ inline bool getDeferredDenoiseFlag () const
86+ {
87+ return isDenoiseDeferred;
88+ }
89+
90+ private:
7091 void initializeMatchingMap ()
7192 {
7293 rawVariables[REA_SCENE];
73- rawVariables[REA_TERMINATE];
94+ rawVariables[REA_PROCESS_SENSORS];
95+ rawVariables[REA_DEFER_DENOISE];
7496 }
7597
7698 RaytracerExampleArguments getMatchedVariableMapID (const std::string& variableName)
7799 {
78100 if (variableName == SCENE_VAR_NAME)
79101 return REA_SCENE;
80- else if (variableName == TERMINATE_VAR_NAME)
81- return REA_TERMINATE;
102+ else if (variableName == PROCESS_SENSORS_VAR_NAME)
103+ return REA_PROCESS_SENSORS;
104+ else if (variableName == DEFER_DENOISE_VAR_NAME)
105+ return REA_DEFER_DENOISE;
82106 else
83107 return REA_COUNT;
84108 }
@@ -89,16 +113,57 @@ class CommandLineHandler
89113 {
90114 if (rawVariables[REA_SCENE].has_value ())
91115 sceneDirectory = rawVariables[REA_SCENE].value ();
92- if (rawVariables[REA_TERMINATE].has_value ())
93- terminate = true ;
116+ if (rawVariables[REA_PROCESS_SENSORS].has_value ())
117+ {
118+ const auto & values = rawVariables[REA_PROCESS_SENSORS].value ();
119+ for (uint32_t i = 0 ; i < values.size (); ++i)
120+ {
121+ if (i == 0 )
122+ {
123+ const char * behaviour = values[0 ].c_str ();
124+ if (strcmp (behaviour, " RenderAllThenInteractive" ) == 0 )
125+ {
126+ processSensorsBehaviour = ProcessSensorsBehaviour::PSB_RENDER_ALL_THEN_INTERACTIVE;
127+ }
128+ else if (strcmp (behaviour, " RenderAllThenTerminate" ) == 0 )
129+ {
130+ processSensorsBehaviour = ProcessSensorsBehaviour::PSB_RENDER_ALL_THEN_TERMINATE;
131+ }
132+ else if (strcmp (behaviour, " RenderSensorThenInteractive" ) == 0 )
133+ {
134+ processSensorsBehaviour = ProcessSensorsBehaviour::PSB_RENDER_SENSOR_THEN_INTERACTIVE;
135+ }
136+ else if (strcmp (behaviour, " InteractiveAtSensor" ) == 0 )
137+ {
138+ processSensorsBehaviour = ProcessSensorsBehaviour::PSB_INTERACTIVE_AT_SENSOR;
139+ }
140+ else
141+ {
142+ printf (" [ERROR]: Invalid option for '%s'. Using RenderAllThenInteractive.\n " , PROCESS_SENSORS_VAR_NAME.data ());
143+ }
144+ }
145+ else if (i == 1 )
146+ {
147+ sensorID = std::stoi (values[1 ]);
148+ }
149+ }
150+ }
151+
152+ isDenoiseDeferred = rawVariables[REA_DEFER_DENOISE].has_value ();
94153 }
95154
96155 variablesType rawVariables;
97156
98157 // Loaded from CMD
99158 std::vector<std::string> sceneDirectory; // [0] zip [1] optional xml in zip
100159 std::string outputScreenshotsFolderPath;
101- bool terminate = false ;
160+ bool isDenoiseDeferred;
161+ struct
162+ {
163+ ProcessSensorsBehaviour processSensorsBehaviour = ProcessSensorsBehaviour::PSB_RENDER_ALL_THEN_INTERACTIVE;
164+ uint32_t sensorID = 0 ;
165+ };
166+
102167};
103168
104169#endif // _DENOISER_TONEMAPPER_COMMAND_LINE_HANDLER_
0 commit comments