This commit is contained in:
2026-08-17 23:34:59 +08:00
parent 5ff0f6369d
commit 224004365c
7 changed files with 59 additions and 38 deletions
+18 -9
View File
@@ -61,6 +61,14 @@ std::string_view mode_id(Gallery_Frame_Mode mode) {
return "low_latency";
}
Gallery_Frame_Mode strategy_mode(const Frame_Control_Strategy_Base& strategy) {
if (dynamic_cast<const Manual_Render_Scene_2D_Strategy*>(&strategy))
return Gallery_Frame_Mode::Manual;
if (dynamic_cast<const Playback_Render_Scene_2D_Strategy*>(&strategy))
return Gallery_Frame_Mode::Playback;
return Gallery_Frame_Mode::Low_Latency;
}
Time_Of_Day current_time_of_day() {
constexpr std::int64_t day_ms = 24LL * 60LL * 60LL * 1000LL;
const auto now = std::chrono::duration_cast<std::chrono::milliseconds>(
@@ -72,8 +80,8 @@ Time_Of_Day current_time_of_day() {
class Gallery_Scene2D final : public Gallery_Scene_Interface {
public:
Gallery_Scene2D(std::string case_id, Gallery_Frame_Mode mode)
: case_id_(std::move(case_id)), mode_(mode) {
rebuild();
: case_id_(std::move(case_id)) {
rebuild(mode);
}
~Gallery_Scene2D() override {
@@ -90,7 +98,9 @@ public:
gallery_performance_capture_json(*scene_)}};
}
Gallery_Frame_Mode frame_mode() const noexcept override { return mode_; }
Gallery_Frame_Mode frame_mode() const noexcept override {
return strategy_mode(*scene_->frame_control_strategy());
}
void reset_monitoring() override { render_count_ = 0; }
void set_client_metrics(Gallery_Client_Performance metrics) noexcept override {
@@ -119,8 +129,9 @@ public:
void resize(int width, int height) override {
const Size requested{std::max(1, width), std::max(1, height)};
if (requested == viewport_) return;
const auto mode = frame_mode();
viewport_ = requested;
rebuild();
rebuild(mode);
}
void dispatch(const Gallery_Input_Event& event) override {
@@ -178,7 +189,6 @@ public:
});
if (operation.wait() != Scene_Edit_Error::none)
return "frame strategy replacement rejected";
mode_ = next;
return "frame strategy replaced";
}
if (request.id == "capture_next_frame") {
@@ -202,7 +212,7 @@ public:
std::string telemetry_json() const override {
const auto observer = scene_->observer();
auto kernel_observer = observer_json(observer);
kernel_observer["mode"] = mode_id(mode_);
kernel_observer["mode"] = mode_id(frame_mode());
kernel_observer["event"] = "render_completed";
kernel_observer["limit"] = "none";
return nlohmann::json{
@@ -222,12 +232,12 @@ private:
.build(std::forward<Arguments>(arguments)...);
}
void rebuild() {
void rebuild(Gallery_Frame_Mode mode) {
Render_Scene_2D::State scene_state;
scene_state.viewport = viewport_;
scene_state.background = Color{3, 8, 14, 255};
scene_ = Render_Scene_2D::Builder{scene_state}.build(
make_strategy(mode_));
make_strategy(mode));
{
auto attach = scene_->attach_builder();
@@ -430,7 +440,6 @@ private:
}
std::string case_id_;
Gallery_Frame_Mode mode_;
Size viewport_{560, 320};
std::unique_ptr<Render_Scene_2D> scene_;
renderive_Owner<Frequency_Axis> frequency_axis_;