Files
oak-editor/crates/oak-node/COVERAGE.md
T
Mike-Solar 244d5e860f
CI / Build & test (Windows) (push) Failing after 7s
workspace: kebab-case crates, app under crates/oak-app, shared versions
All crates take the oak-* kebab-case naming (oak-audio, oak-codec,
oak-common, oak-core, oak-ffmpeg-link, oak-node, oak-otio, oak-plugin,
oak-render, oak-storage, oak-task, oak-timeline, oak-undo), with the
lib identifiers rewritten (oakrender:: -> oak_render::, oakcore_rs:: ->
oak_core::, ...) across all 226 referencing files.

The GUI application moves from the workspace root into
crates/oak-app/: src/, build.rs (paths fixed for the new location) and
tests/ travel with it, the root Cargo.toml becomes workspace-only
([workspace] + workspace.package + profiles), and the app package
inherits the workspace version. The screenshots example becomes a
standalone crate examples/simple_player/ with its own Cargo.toml.

Every crate now inherits the single workspace version
(version.workspace = true), and the workflows' crate paths and the
build docs follow the renames.

Validated with a clean cargo check --workspace.
2026-08-22 16:58:37 +08:00

7.8 KiB
Raw Blame History

Node 类完整覆盖映射表(C++ olive::Node → oaknode Rust crate

逐方法盘点 src/node/src/node.h(260 行声明,去重/去重载后 ~150 个)。 每一行标注 Rust 侧的落点:trait = [NodeBehavior]node.rs), core = NodeCore 数据 + 查询方法,graph = Graph 方法, ops = 自由函数(ops.rs),bridge = 经 C ABI 出模块, drop = 刻意不迁移(附理由)。// CPP-PARITY 注释义务不变。 重载族合并为一行(string/NodeInput/TrackReference 三个重载 → Rust 侧统一为 NodeInput-风格键)。

1. 生命周期 / 归属

C++ Rust 落点
Node() / ~Node() / NODE_DEFAULT_DESTRUCTOR graph.add_node / graph.remove_nodedisconnect_all 副作用在 remove 内)
parent() / set_parent() / project() core.owner: ProjectRefarena 反向索引;不再是裸指针)
folder() / set_folder() / is_item() core.bin_folder: Option<NodeId> + is_item 查询
AddedToGraphEvent / RemovedFromGraphEvent trait added_to_graph / removed_from_graph
LoadFinishedEvent / PostLoadEvent trait load_finished / post_loadserializer 驱动)

2. 身份 / 元数据

C++ Rust 落点
name() / short_name() / id() / category() / sub_category() / description() traitname/type_id/short_name/categories/sub_category/description
retranslate() / data(DataType) dropretranslate 是 UI 职责;data(icon) 归 facade/app —— 见 notes
get_label* / set_label / get_label_or_name / get_label_and_name core.label + 查询
color() / get_override_color / set_override_color core.override_color(经 bridge::common config
get_category_name (static) ops::category_name
get_flags / set_flag core.flags

3. 输入定义与属性

C++ Rust 落点
inputs() / add_input / insert_input / prepend_input / remove_input core.inputs + graph 编辑方法(变更经 undo 命令工厂)
has_input_with_id / has_param_with_id / get_input_data_type / set_input_data_type core 查询/编辑
get_input_name / set_input_name / get_input_flags / set_input_flag coreget_input_name 是 virtual → trait input_name
is_input_hidden / is_input_connectable / is_input_keyframable / is_input_keyframing / set_input_is_keyframing core
has/get_input_property(单/全)/ set_input_property / set_combo_box_strings core.properties
get_effect_input / get_effect_input_id / set_effect_input core.effect_input
ignore_inputs_for_rendering / is_input_connected_for_render trait(渲染期行为)
get_internal_input_* / report_invalid_input / create_immediate / get_immediate crate 内部(core 私有 + immediate 子结构;immediate 是 C++ 的惰值/连接二态,Rust 侧为 enum InputSlot { Value, Connected }
clear_element core 编辑

4. 值存取(standard value / split value / at_time

C++ Rust 落点
get/set_standard_value(含 split 族与 on_track 族) core + value.rsSplitValue → NodeValue 分量访问)
get/set_default_value core.defaults
get_value_at_time / get_split_value_at_time(_on_track) traverser 求值路径(读 keyframe/standard/连接输出)
set_value_at_time (static) ops::set_value_at_timeundo 命令工厂)
parameter_value_changed crate 内部(invalidation 触发点)
get/set_value_hint_for_input / get_value_hints core.hintsget_value_hint_for_input 是 virtual → trait

5. 关键帧

C++ Rust 落点
get_keyframe_tracks / get_number_of_keyframe_tracks / get_track_from_keyframe core.keyframeskeyframe.rs 的 KeyframeTrack
get_keyframes_at_time / get_keyframe_at_time_on_track / has_keyframe_at_time keyframe.rs 查询
get_earliest/latest_keyframe / get_closest_keyframe_before/after_time / get_best_keyframe_type_for_time_on_track keyframe.rs 查询
add_keyframe / remove_keyframe core 编辑 + undo 工厂
invalidate_from_keyframe_*5 个) crate 内部 → invalidation 走 graph 下游标记
get_range_affected_by_keyframe / get_range_around_index keyframe.rs

6. 连接 / 图遍历

C++ Rust 落点
connect_edge / disconnect_edge (static) / disconnect_all graph.connect/disconnect/remove_node(环检测在 connect
input_connections / output_connections / is_input_connected / get_connected_output(_render_output) graph 邻接查询(get_connected_render_output 是 virtual → traitGroup 覆写)
get_dependencies / get_exclusive_dependencies / get_immediate_dependencies / find_input_nodes<T> / find_ways_node_arrives_here / find_path graph 遍历自由函数(模板 find_input_nodes → 按 type_id 过滤)
inputs_from / context_contains_node / is_node_expanded_in_context / *_node_position*_in_context / remove_node_from_context core.context_positions + graphGroup 上下文语义)
transform_time_to ops::transform_time_totrack 时间换算,C++ static

7. 求值 / 渲染

C++ Rust 落点
value() trait NodeBehavior::value
process_samples / generate_frame traitgenerate_frame 供 CPU 直渲节点)
get_shader_code / gizmo_* / get_gizmos / add/remove_gizmo / add_draggable_gizmo / current_gizmo trait 渲染/gizmo 子面(gizmo 数据在 crate,绘制归 facade/app
get_active_elements_at_time trait
get_video_cache_range / get_audio_cache_range trait
video_frame_cache() 等四个 + copy_cache_uuids_from / are_caches_enabled / set_caches_enabled core.cachesbridge::render 句柄)
invalidate_cache / invalidate_all / send_invalidate_cache traverser::invalidate_downstream + graph 直接扇出(无信号)
input_time_adjustment / output_time_adjustment trait

8. 序列化

C++ Rust 落点
load / save / load_input / save_input / load_immediate / save_immediate serializer.rs 主驱动(NodeCore 部分)
load_custom / save_custom trait(已在底稿)
get_input_id_for_legacy_id trait(旧版输入 id 映射,默认恒等)

9. 链接 / 拷贝 / 组

C++ Rust 落点
link / unlink / are_linked / has_links / links / LinkChangeEvent core.links + trait link_changed
copy() / NODE_COPY_FUNCTION trait NodeBehavior::duplicate
copy_inputs / copy_input / copy_values_of_element (statics) ops::copy_*
copy_dependency_graph / copy_node_in_graph / copy_node_and_dependency_graph_minus_items(_internal) ops::copy_subgraphundo 打包经 bridge::undo
get_connect_command_string / get_disconnect_command_string opsundo 命令文案)

10. 事件(C++ virtual,Qt 信号已删后的直接回调点)

C++ Rust 落点
InputValueChangedEvent / InputConnectedEvent / InputDisconnectedEvent / OutputConnectedEvent / OutputDisconnectedEvent / ConnectedToPreviewEvent traitinput_value_changed 已在底稿;补全其余 5 个)

11. 刻意不迁移(drop

C++ 理由
getPlugin / getPluginInstance / setPluginInstanceOFX 裸指针) 越界类型;PluginNode 经 plugin crate C ABIM11)持有实例
retranslate / data(icon) / add_draggable_gizmo 的 UI 半 UI/翻译归 facade/appcrate 只保留数据与键控位置
create_immediate 的 QObject 父子语义 Rust 所有权原生表达
全部 *_internal 私有辅助 实现细节,重组于 graph/ops 内部