MetaCore/tools/MetaCoreWindowProbe.cpp
2026-03-19 18:01:50 +08:00

94 lines
2.6 KiB
C++

#include <iostream>
#include <string>
#include <cstdlib>
#if METACORE_HAS_PANDA3D
#include <pandaFramework.h>
#include <windowProperties.h>
#include <windows.h>
#include <filesystem>
#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
}