@@ -142,6 +142,10 @@ int run(int argc, char **argv) {
142142 bool headless = false ;
143143 bool noFocus = false ;
144144 std::optional<std::filesystem::path> debugDumpPPMDir;
145+ // For CI to test resize
146+ std::optional<uint32_t > ciResizeAfter;
147+ std::optional<uint32_t > ciResizeWidth;
148+ std::optional<uint32_t > ciResizeHeight;
145149#if defined(VSDF_ENABLE_FFMPEG)
146150 uint32_t offlineRingSize = OFFSCREEN_DEFAULT_RING_SIZE;
147151 uint32_t offlineWidth = OFFSCREEN_DEFAULT_WIDTH;
@@ -324,6 +328,63 @@ int run(int argc, char **argv) {
324328 }
325329#endif
326330
331+ // CI-only flags (intentionally undocumented).
332+ if (arg == " --ci-resize-after" ) {
333+ if (i + 1 >= argc) {
334+ throw CLIError (
335+ " --ci-resize-after requires a positive integer value" );
336+ }
337+ try {
338+ ciResizeAfter = static_cast <uint32_t >(std::stoul (argv[++i]));
339+ } catch (const std::invalid_argument &) {
340+ throw CLIError (" --ci-resize-after requires a valid positive "
341+ " integer value" );
342+ } catch (const std::out_of_range &) {
343+ throw CLIError (" --ci-resize-after value is out of range "
344+ " for a positive integer" );
345+ }
346+ continue ;
347+ } else if (arg == " --ci-resize-width" ) {
348+ if (i + 1 >= argc) {
349+ throw CLIError (
350+ " --ci-resize-width requires a positive integer value" );
351+ }
352+ try {
353+ ciResizeWidth = static_cast <uint32_t >(std::stoul (argv[++i]));
354+ } catch (const std::invalid_argument &) {
355+ throw CLIError (" --ci-resize-width requires a valid positive "
356+ " integer value" );
357+ } catch (const std::out_of_range &) {
358+ throw CLIError (" --ci-resize-width value is out of range "
359+ " for a positive integer" );
360+ }
361+ if (*ciResizeWidth == 0 ) {
362+ throw CLIError (
363+ " --ci-resize-width requires a positive integer value" );
364+ }
365+ continue ;
366+ } else if (arg == " --ci-resize-height" ) {
367+ if (i + 1 >= argc) {
368+ throw CLIError (
369+ " --ci-resize-height requires a positive integer value" );
370+ }
371+ try {
372+ ciResizeHeight = static_cast <uint32_t >(std::stoul (argv[++i]));
373+ } catch (const std::invalid_argument &) {
374+ throw CLIError (" --ci-resize-height requires a valid positive "
375+ " integer value" );
376+ } catch (const std::out_of_range &) {
377+ throw CLIError (" --ci-resize-height value is out of range "
378+ " for a positive integer" );
379+ }
380+ if (*ciResizeHeight == 0 ) {
381+ throw CLIError (
382+ " --ci-resize-height requires a positive integer value" );
383+ }
384+ continue ;
385+ }
386+ // END CI-only flags (intentionally undocumented).
387+
327388 if (arg.substr (0 , 2 ) != " --" ) {
328389 if (shaderFile.empty ()) {
329390 shaderFile = arg;
@@ -355,28 +416,39 @@ int run(int argc, char **argv) {
355416 spdlog::info (" Setting things up..." );
356417 spdlog::default_logger ()->set_pattern (" [%H:%M:%S] [%l] %v" );
357418
419+ bool shouldRunOnline = true ;
358420#if defined(VSDF_ENABLE_FFMPEG)
359421 if (useFfmpeg) {
360- OfflineSDFRenderer renderer{shaderFile.string (), *maxFrames,
361- useToyTemplate, debugDumpPPMDir,
362- offlineWidth, offlineHeight,
363- offlineRingSize, encodeSettings};
422+ shouldRunOnline = false ;
423+ OfflineRenderOptions offlineOptions{
424+ .maxFrames = *maxFrames,
425+ .debugDumpPPMDir = debugDumpPPMDir,
426+ .width = offlineWidth,
427+ .height = offlineHeight,
428+ .ringSize = offlineRingSize,
429+ .encodeSettings = encodeSettings,
430+ };
431+ OfflineSDFRenderer renderer{shaderFile.string (), useToyTemplate,
432+ std::move (offlineOptions)};
364433 renderer.setup ();
365434 renderer.renderFrames ();
366- } else {
435+ }
436+ #endif
437+ if (shouldRunOnline) {
438+ OnlineRenderOptions onlineOptions{
439+ .maxFrames = maxFrames,
440+ .headless = headless,
441+ .noFocus = noFocus,
442+ .debugDumpPPMDir = debugDumpPPMDir,
443+ .ciResizeAfter = ciResizeAfter,
444+ .ciResizeWidth = ciResizeWidth,
445+ .ciResizeHeight = ciResizeHeight,
446+ };
367447 OnlineSDFRenderer renderer{shaderFile.string (), useToyTemplate,
368- maxFrames, headless,
369- debugDumpPPMDir, noFocus};
448+ std::move (onlineOptions)};
370449 renderer.setup ();
371450 renderer.gameLoop ();
372451 }
373- #else
374- OnlineSDFRenderer renderer{shaderFile.string (), useToyTemplate,
375- maxFrames, headless,
376- debugDumpPPMDir, noFocus};
377- renderer.setup ();
378- renderer.gameLoop ();
379- #endif
380452 return 0 ;
381453}
382454
0 commit comments