#include #include #include #if METACORE_HAS_PANDA3D #include #include #include #include #endif namespace { void log_step(const std::string& message) { std::cout << "[MetaCoreWindowProbe] " << message << std::endl; } int resolve_frame_budget() { const char* value = std::getenv("METACORE_WINDOW_PROBE_FRAME_COUNT"); if (value == nullptr || value[0] == '\0') { return -1; } try { const int parsed = std::stoi(value); return parsed > 0 ? parsed : -1; } catch (...) { return -1; } } } int main() { #ifdef METACORE_HAS_PANDA3D log_step("Panda backend compile flag is enabled."); const auto panda_bin = std::filesystem::path(METACORE_PANDA3D_ROOT_PATH) / "bin"; if (std::filesystem::exists(panda_bin)) { SetDllDirectoryW(panda_bin.wstring().c_str()); log_step("DLL search path set to " + panda_bin.string()); } else { log_step("Panda bin path not found: " + panda_bin.string()); } log_step("Creating PandaFramework"); PandaFramework framework; log_step("Calling open_framework()"); framework.open_framework(); log_step("Setting MetaCore probe window title"); framework.set_window_title("MetaCore Window Probe"); WindowProperties props; props.set_size(960, 540); props.set_title("MetaCore Window Probe"); log_step("Calling open_window()"); WindowFramework* window = framework.open_window(props, 0); if (window == nullptr) { log_step("open_window() returned null"); framework.close_framework(); return 2; } log_step("Window opened successfully"); const int frame_budget = resolve_frame_budget(); if (frame_budget < 0) { log_step("Running until the window is closed manually"); while (window->get_graphics_window() != nullptr && !window->get_graphics_window()->is_closed()) { framework.do_frame(nullptr); } } else { log_step("Running for " + std::to_string(frame_budget) + " frame(s)"); for (int frame = 0; frame < frame_budget; ++frame) { framework.do_frame(nullptr); if (window->get_graphics_window() != nullptr && window->get_graphics_window()->is_closed()) { break; } } } log_step("Frame loop finished"); framework.close_window(window); log_step("Window closed successfully"); framework.close_framework(); log_step("Framework closed successfully"); return 0; #else log_step("Panda backend is not enabled in this build."); return 1; #endif }