大结构改完 中间层加完

This commit is contained in:
2026-08-14 19:24:28 +08:00
parent f5873855a3
commit 9c68029ade
26 changed files with 747 additions and 57 deletions
+1 -1
View File
@@ -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);
}
+19 -5
View File
@@ -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 =
+20 -1
View File
@@ -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"; });
+2 -2
View File
@@ -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"),