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
@@ -50,6 +50,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_3D_Strategy*>(&strategy))
return Gallery_Frame_Mode::Manual;
if (dynamic_cast<const Playback_Render_Scene_3D_Strategy*>(&strategy))
return Gallery_Frame_Mode::Playback;
return Gallery_Frame_Mode::Low_Latency;
}
Visual_Family visual_family(std::string_view case_id) {
if (case_id == "datoviz_splat") return Visual_Family::Splat;
if (case_id == "datoviz_pixel") return Visual_Family::Pixel;
@@ -71,8 +79,8 @@ Visual_Family visual_family(std::string_view case_id) {
class Gallery_Scene3D final : public Gallery_Scene_Interface {
public:
Gallery_Scene3D(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);
}
const std::string& case_id() const noexcept override { return case_id_; }
@@ -84,7 +92,9 @@ public:
{"performance_capture", 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 {
client_ = metrics;
@@ -112,8 +122,9 @@ public:
static_cast<std::uint32_t>(std::max(1, height))};
if (requested.width == extent_.width && requested.height == extent_.height)
return;
const auto mode = frame_mode();
extent_ = requested;
rebuild();
rebuild(mode);
}
void dispatch(const Gallery_Input_Event&) override {}
@@ -157,7 +168,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") {
@@ -181,7 +191,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{
@@ -193,7 +203,7 @@ public:
}
private:
void rebuild() {
void rebuild(Gallery_Frame_Mode mode) {
std::vector<Point> points{
{{-0.55F, -0.25F, 0.0F}, {255, 80, 80, 255}, 24.0F},
{{0.0F, 0.45F, 0.0F}, {80, 255, 120, 255}, 28.0F},
@@ -204,11 +214,10 @@ private:
state.viewport = extent_;
state.visual_family = visual_family(case_id_);
scene_ = Render_Scene_3D::Builder{state}.build(
visual_, make_strategy(mode_));
visual_, make_strategy(mode));
}
std::string case_id_;
Gallery_Frame_Mode mode_;
Extent extent_{560, 320};
std::shared_ptr<Point_Visual> visual_;
std::unique_ptr<Render_Scene_3D> scene_;