From 6e8d56923cb723cc9eeb3baab3ce01200252d65b Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Fri, 15 Jan 2021 19:33:05 +0100 Subject: [PATCH] Fully implement INoteExpressionPhysicalUIMapping With this we support all VST 3.6.11 features. --- src/common/serialization/vst3.h | 1 + .../bridges/vst3-impls/plugin-proxy.cpp | 15 ++++++++++----- src/wine-host/bridges/vst3.cpp | 19 +++++++++++++++++++ src/wine-host/bridges/vst3.h | 2 ++ 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/common/serialization/vst3.h b/src/common/serialization/vst3.h index 002b974d..c03ef239 100644 --- a/src/common/serialization/vst3.h +++ b/src/common/serialization/vst3.h @@ -100,6 +100,7 @@ using ControlRequest = YaNoteExpressionController::GetNoteExpressionInfo, YaNoteExpressionController::GetNoteExpressionStringByValue, YaNoteExpressionController::GetNoteExpressionValueByString, + YaNoteExpressionPhysicalUIMapping::GetNotePhysicalUIMapping, YaParameterFinder::FindParameter, YaPlugView::IsPlatformTypeSupported, YaPlugView::Attached, diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp index 9cd386e3..3e2a45c7 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp @@ -664,11 +664,16 @@ tresult PLUGIN_API Vst3PluginProxyImpl::getPhysicalUIMapping( int32 busIndex, int16 channel, Steinberg::Vst::PhysicalUIMapList& list) { - // TODO: Implement - bridge.logger.log( - "TODO: Implement " - "INoteExpressionPhysicalUIMapping::getPhysicalUIMapping()"); - return Steinberg::kNotImplemented; + const GetNotePhysicalUIMappingResponse response = bridge.send_message( + YaNoteExpressionPhysicalUIMapping::GetNotePhysicalUIMapping{ + .instance_id = instance_id(), + .bus_index = busIndex, + .channel = channel, + .list = list}); + + response.list.write_back(list); + + return response.result; } tresult PLUGIN_API Vst3PluginProxyImpl::initialize(FUnknown* context) { diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index 7499a2df..33f5833c 100644 --- a/src/wine-host/bridges/vst3.cpp +++ b/src/wine-host/bridges/vst3.cpp @@ -51,6 +51,7 @@ InstanceInterfaces::InstanceInterfaces( keyswitch_controller(object), midi_mapping(object), note_expression_controller(object), + note_expression_physical_ui_mapping(object), plugin_base(object), unit_data(object), prefetchable_support(object), @@ -535,6 +536,24 @@ void Vst3Bridge::run() { .result = result, .value_normalized = value_normalized}; }, + [&](YaNoteExpressionPhysicalUIMapping::GetNotePhysicalUIMapping& + request) + -> YaNoteExpressionPhysicalUIMapping::GetNotePhysicalUIMapping:: + Response { + Steinberg::Vst::PhysicalUIMapList reconstructed_list = + request.list.get(); + const tresult result = + object_instances[request.instance_id] + .note_expression_physical_ui_mapping + ->getPhysicalUIMapping(request.bus_index, + request.channel, + reconstructed_list); + + return YaNoteExpressionPhysicalUIMapping:: + GetNotePhysicalUIMappingResponse{ + .result = result, + .list = std::move(request.list)}; + }, [&](const YaParameterFinder::FindParameter& request) -> YaParameterFinder::FindParameter::Response { Steinberg::Vst::ParamID result_tag; diff --git a/src/wine-host/bridges/vst3.h b/src/wine-host/bridges/vst3.h index c8189bf1..b767200a 100644 --- a/src/wine-host/bridges/vst3.h +++ b/src/wine-host/bridges/vst3.h @@ -164,6 +164,8 @@ struct InstanceInterfaces { Steinberg::FUnknownPtr midi_mapping; Steinberg::FUnknownPtr note_expression_controller; + Steinberg::FUnknownPtr + note_expression_physical_ui_mapping; Steinberg::FUnknownPtr plugin_base; Steinberg::FUnknownPtr unit_data; Steinberg::FUnknownPtr