大结构改完 中间层加完
This commit is contained in:
@@ -118,7 +118,7 @@ Gallery_Key_Input gallery_input(const Key_Event& event) {
|
||||
return input;
|
||||
}
|
||||
std::unique_ptr<Gallery_Scene_Interface> make_gallery_scene(std::uint64_t session_id, std::string case_id, Gallery_Frame_Mode mode, bool automatic_low_latency) {
|
||||
if (case_id == "datoviz_3d")
|
||||
if (case_id.starts_with("datoviz_"))
|
||||
return make_gallery_scene_3d(session_id, std::move(case_id), mode, automatic_low_latency);
|
||||
return make_gallery_scene_2d(session_id, std::move(case_id), mode, automatic_low_latency);
|
||||
}
|
||||
|
||||
@@ -54,8 +54,22 @@ const std::vector<Case_Model>& cases() {
|
||||
"鼠标框选、多区域保留、标注样式和清空。", 70},
|
||||
{"constellation", "星座图", "Constellation_Diagram", "点图控件",
|
||||
"PSK4/PSK8/PSK16 模式、相位、寿命、坐标范围和方形拟合。", 80},
|
||||
{"datoviz_3d", "Datoviz 3D", "Mesh / Texture / MSDF Text", "3D",
|
||||
"Render3D 通过 Kernel 帧策略驱动迁移后的 Datoviz Vulkan 后端;3D 的已发布帧禁止自动覆盖。", 90}
|
||||
{"datoviz_3d", "Datoviz Visuals", "Point_Visual", "3D",
|
||||
"Renderive 3D Renderable、双缓冲实时数据与 Datoviz Vulkan 后端。", 90},
|
||||
{"datoviz_splat", "Splat", "Splat_Visual", "Datoviz Visuals", "各向异性高斯 splat。", 91},
|
||||
{"datoviz_pixel", "Pixel", "Pixel_Visual", "Datoviz Visuals", "屏幕空间像素。", 92},
|
||||
{"datoviz_marker", "Marker", "Marker_Visual", "Datoviz Visuals", "可旋转的参数化标记。", 93},
|
||||
{"datoviz_sphere", "Sphere", "Sphere_Visual", "Datoviz Visuals", "带深度的球体。", 94},
|
||||
{"datoviz_segment", "Segment", "Segment_Visual", "Datoviz Visuals", "独立线段。", 95},
|
||||
{"datoviz_vector", "Vector", "Vector_Visual", "Datoviz Visuals", "方向向量。", 96},
|
||||
{"datoviz_primitive", "Primitive", "Primitive_Visual", "Datoviz Visuals", "可选拓扑的基础图元。", 97},
|
||||
{"datoviz_mesh", "Mesh", "Mesh_Visual", "Datoviz Visuals", "法线与纹理坐标网格。", 98},
|
||||
{"datoviz_path", "Path", "Path_Visual", "Datoviz Visuals", "连续描边路径。", 99},
|
||||
{"datoviz_image", "Image", "Image_Visual", "Datoviz Visuals", "采样图像实例。", 100},
|
||||
{"datoviz_labels", "Labels", "Labels_Visual", "Datoviz Visuals", "图集标签实例。", 101},
|
||||
{"datoviz_glyph", "Glyph", "Glyph_Visual", "Datoviz Visuals", "MSDF 字形。", 102},
|
||||
{"datoviz_text", "Text", "Text_Visual", "Datoviz Visuals", "基于 glyph 的高层文字注记。", 103},
|
||||
{"datoviz_volume", "Volume", "Volume_Visual", "Datoviz Visuals", "三维标量场。", 104}
|
||||
};
|
||||
return value;
|
||||
}
|
||||
@@ -83,7 +97,7 @@ void append_session_actions(Gallery_Frame_Mode frame_mode,
|
||||
throw std::invalid_argument("unknown gallery frame mode");
|
||||
}
|
||||
std::size_t session_control_count(std::string_view case_id, Gallery_Frame_Mode frame_mode) {
|
||||
if (case_id == "datoviz_3d")
|
||||
if (case_id.starts_with("datoviz_"))
|
||||
return 0;
|
||||
switch (frame_mode) {
|
||||
case Gallery_Frame_Mode::Manual:
|
||||
@@ -126,7 +140,7 @@ void append_3d_actions(Gallery_Frame_Mode frame_mode, std::vector<Action_Model>&
|
||||
}
|
||||
std::vector<Action_Model> registered_actions(std::string_view case_id, Gallery_Frame_Mode frame_mode) {
|
||||
std::vector<Action_Model> result;
|
||||
if (case_id == "datoviz_3d") {
|
||||
if (case_id.starts_with("datoviz_")) {
|
||||
append_3d_actions(frame_mode, result);
|
||||
return result;
|
||||
}
|
||||
@@ -554,7 +568,7 @@ std::string Gallery_Protocol::catalog_json() {
|
||||
Json entry = adminive::to_frontend_json<Json>(item);
|
||||
entry["control_count_by_mode"] = Json::object();
|
||||
entry["action_count_by_mode"] = Json::object();
|
||||
const std::size_t renderable_controls = item.id == "datoviz_3d" ? 0 : gallery_renderable_control_count(item.id);
|
||||
const std::size_t renderable_controls = item.id.starts_with("datoviz_") ? 0 : gallery_renderable_control_count(item.id);
|
||||
for (const auto mode : frame_modes) {
|
||||
const std::string key = gallery_enum_id(mode);
|
||||
const std::size_t controls =
|
||||
|
||||
@@ -101,6 +101,24 @@ std::string mode_id(Gallery_Frame_Mode mode) {
|
||||
return ::renderive::Key::Unknown;
|
||||
}
|
||||
|
||||
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;
|
||||
if (case_id == "datoviz_marker") return Visual_Family::Marker;
|
||||
if (case_id == "datoviz_sphere") return Visual_Family::Sphere;
|
||||
if (case_id == "datoviz_segment") return Visual_Family::Segment;
|
||||
if (case_id == "datoviz_vector") return Visual_Family::Vector;
|
||||
if (case_id == "datoviz_primitive") return Visual_Family::Primitive;
|
||||
if (case_id == "datoviz_mesh") return Visual_Family::Mesh;
|
||||
if (case_id == "datoviz_path") return Visual_Family::Path;
|
||||
if (case_id == "datoviz_image") return Visual_Family::Image;
|
||||
if (case_id == "datoviz_labels") return Visual_Family::Labels;
|
||||
if (case_id == "datoviz_glyph") return Visual_Family::Glyph;
|
||||
if (case_id == "datoviz_text") return Visual_Family::Text;
|
||||
if (case_id == "datoviz_volume") return Visual_Family::Volume;
|
||||
return Visual_Family::Point;
|
||||
}
|
||||
|
||||
class Gallery_Scene3D final : public Gallery_Scene_Interface {
|
||||
public:
|
||||
Gallery_Scene3D(std::uint64_t session_id, std::string case_id,
|
||||
@@ -110,7 +128,8 @@ public:
|
||||
visual_(Point_Visual::Builder{}.build(initial_points())),
|
||||
scene_(Scene_Options{.viewport = {560, 320},
|
||||
.frame_mode = render_frame_mode(mode),
|
||||
.maximum_frames_per_second = 30.0},
|
||||
.maximum_frames_per_second = 30.0,
|
||||
.visual_family = visual_family(case_id_)},
|
||||
visual_) {
|
||||
if (!visual_)
|
||||
throw std::runtime_error("failed to create Point_Visual");
|
||||
|
||||
@@ -179,6 +179,20 @@ TEST(RenderiveWebDatovizGallery, RgbaEncoderPreservesRowsAndRemovesPadding) {
|
||||
|
||||
TEST(RenderiveWebDatovizGallery, CatalogUsesOnlyThreeDimensionalActions) {
|
||||
const auto catalog = nlohmann::json::parse(Gallery_Protocol::catalog_json());
|
||||
const std::set<std::string> visual_cases{
|
||||
"datoviz_3d", "datoviz_splat", "datoviz_pixel", "datoviz_marker",
|
||||
"datoviz_sphere", "datoviz_segment", "datoviz_vector",
|
||||
"datoviz_primitive", "datoviz_mesh", "datoviz_path", "datoviz_image",
|
||||
"datoviz_labels", "datoviz_glyph", "datoviz_text", "datoviz_volume"};
|
||||
for (const auto& id : visual_cases) {
|
||||
EXPECT_NE(std::find_if(
|
||||
catalog.at("cases").begin(), catalog.at("cases").end(),
|
||||
[&id](const nlohmann::json& value) {
|
||||
return value.at("id") == id;
|
||||
}),
|
||||
catalog.at("cases").end())
|
||||
<< id;
|
||||
}
|
||||
const auto item = std::find_if(
|
||||
catalog.at("cases").begin(), catalog.at("cases").end(),
|
||||
[](const nlohmann::json& value) { return value.at("id") == "datoviz_3d"; });
|
||||
|
||||
@@ -228,10 +228,10 @@ TEST(RenderiveWebGallery, AdminiveCatalogCoversEveryControlCaseAndThreeModes) {
|
||||
EXPECT_EQ(catalog.at("protocol"), "renderive.control-gallery");
|
||||
EXPECT_EQ(catalog.at("protocol_version"), 4);
|
||||
EXPECT_EQ(catalog.at("case_descriptor").at("protocol"), "adminive.resource");
|
||||
EXPECT_EQ(catalog.at("cases").size(), 9U);
|
||||
EXPECT_EQ(catalog.at("cases").size(), 23U);
|
||||
EXPECT_EQ(catalog.at("frame_modes").size(), 3U);
|
||||
EXPECT_EQ(catalog.at("coverage").at("page_count"), 3);
|
||||
EXPECT_EQ(catalog.at("coverage").at("canvas_count"), 27);
|
||||
EXPECT_EQ(catalog.at("coverage").at("canvas_count"), 69);
|
||||
EXPECT_GT(catalog.at("coverage").at("manual_control_count").get<std::size_t>(), 180U);
|
||||
EXPECT_GT(catalog.at("coverage").at("manual_action_count").get<std::size_t>(), 50U);
|
||||
EXPECT_EQ(catalog.at("coverage").at("frequency_modes"),
|
||||
|
||||
Reference in New Issue
Block a user