升级
This commit is contained in:
@@ -108,7 +108,7 @@ std::string Gallery_Protocol::catalog_json() {
|
||||
Json field_event{{"label", "Event"}, {"source", "kernel_observer.event"}};
|
||||
Json root{
|
||||
{"category", "gallery"}, {"type", "catalog"},
|
||||
{"protocol", "renderive.control-gallery"}, {"protocol_version", 5},
|
||||
{"protocol", "renderive.control-gallery"}, {"protocol_version", 6},
|
||||
{"transport", {{"pixels", "websocket-binary-rvp2"}, {"socket_per_canvas", true}}},
|
||||
{"navigation", {{"default_mode", "low_latency"}, {"all_categories_label", "All"},
|
||||
{"hero_eyebrow", "Renderive"}, {"hero_title", "Scene Gallery"},
|
||||
@@ -116,19 +116,13 @@ std::string Gallery_Protocol::catalog_json() {
|
||||
{"frame_modes", Json::array({
|
||||
{{"id", "manual"}, {"title", "Manual"}, {"strategy", "Manual"},
|
||||
{"description", "Explicit frame requests"}, {"order", 0}, {"accent", "#ffbd69"},
|
||||
{"automatic", false}, {"request_after_response", false},
|
||||
{"request_on_animation_frame", false}, {"observer_visible", true},
|
||||
{"frame_button_label", "Render frame"}},
|
||||
{"observer_visible", true}, {"frame_button_label", "Render frame"}},
|
||||
{{"id", "low_latency"}, {"title", "Low latency"}, {"strategy", "Low_Latency"},
|
||||
{"description", "Latest-state rendering"}, {"order", 1}, {"accent", "#59d6c5"},
|
||||
{"automatic", true}, {"request_after_response", true},
|
||||
{"request_on_animation_frame", false}, {"observer_visible", true},
|
||||
{"frame_button_label", "Render frame"}},
|
||||
{"observer_visible", true}, {"frame_button_label", "Render frame"}},
|
||||
{{"id", "playback"}, {"title", "Playback"}, {"strategy", "Flow"},
|
||||
{"description", "Ordered frame playback"}, {"order", 2}, {"accent", "#84b3ce"},
|
||||
{"automatic", true}, {"request_after_response", false},
|
||||
{"request_on_animation_frame", true}, {"observer_visible", true},
|
||||
{"frame_button_label", "Render frame"}}
|
||||
{"observer_visible", true}, {"frame_button_label", "Render frame"}}
|
||||
})},
|
||||
{"cases", std::move(published_cases)},
|
||||
{"coverage", {{"case_count", cases.size()}, {"page_count", 1},
|
||||
|
||||
@@ -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_;
|
||||
|
||||
@@ -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_;
|
||||
|
||||
@@ -61,7 +61,13 @@ TEST(RenderiveWebGallery, CatalogUsesOneDefaultPageAndThreeDynamicStrategies) {
|
||||
const auto catalog = nlohmann::json::parse(Gallery_Protocol::catalog_json());
|
||||
ASSERT_EQ(catalog.at("type"), "catalog");
|
||||
EXPECT_EQ(catalog.at("cases").size(), 23U);
|
||||
EXPECT_EQ(catalog.at("protocol_version"), 6);
|
||||
EXPECT_EQ(catalog.at("frame_modes").size(), 3U);
|
||||
for (const auto& mode : catalog.at("frame_modes")) {
|
||||
EXPECT_FALSE(mode.contains("automatic"));
|
||||
EXPECT_FALSE(mode.contains("request_after_response"));
|
||||
EXPECT_FALSE(mode.contains("request_on_animation_frame"));
|
||||
}
|
||||
EXPECT_EQ(catalog.at("coverage").at("page_count"), 1U);
|
||||
EXPECT_EQ(catalog.at("coverage").at("canvas_count"), 23U);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user