diff --git a/src/common/serialization/vst3.h b/src/common/serialization/vst3.h index 79421209..b54b2e50 100644 --- a/src/common/serialization/vst3.h +++ b/src/common/serialization/vst3.h @@ -103,6 +103,7 @@ using ControlRequest = YaNoteExpressionController::GetNoteExpressionValueByString, YaNoteExpressionPhysicalUIMapping::GetNotePhysicalUIMapping, YaParameterFinder::FindParameter, + YaParameterFunctionName::GetParameterIDFromFunctionName, YaPlugView::IsPlatformTypeSupported, YaPlugView::Attached, YaPlugView::Removed, diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp index 68f30e65..bb3922e9 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp @@ -692,11 +692,23 @@ tresult PLUGIN_API Vst3PluginProxyImpl::getParameterIDFromFunctionName( Steinberg::Vst::UnitID unitID, Steinberg::FIDString functionName, Steinberg::Vst::ParamID& paramID) { - // TODO: Implement - bridge.logger.log( - "TODO: Implement " - "IParameterFunctionName::getParameterIDFromFunctionName()"); - return Steinberg::kNotImplemented; + if (functionName) { + const GetParameterIDFromFunctionNameResponse response = + bridge.send_message( + YaParameterFunctionName::GetParameterIDFromFunctionName{ + .instance_id = instance_id(), + .unit_id = unitID, + .function_name = functionName}); + + paramID = response.param_id; + + return response.result; + } else { + bridge.logger.log( + "WARNING: Null pointer passed to " + "'IParameterFunctionName::getParameterIDFromFunctionName()'"); + return Steinberg::kInvalidArgument; + } } tresult PLUGIN_API Vst3PluginProxyImpl::initialize(FUnknown* context) { diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index 5c88709f..a73827da 100644 --- a/src/wine-host/bridges/vst3.cpp +++ b/src/wine-host/bridges/vst3.cpp @@ -55,6 +55,7 @@ InstanceInterfaces::InstanceInterfaces( note_expression_physical_ui_mapping(object), plugin_base(object), unit_data(object), + parameter_function_name(object), prefetchable_support(object), process_context_requirements(object), program_list_data(object), @@ -573,6 +574,23 @@ void Vst3Bridge::run() { return YaParameterFinder::FindParameterResponse{ .result = result, .result_tag = result_tag}; }, + [&](const YaParameterFunctionName::GetParameterIDFromFunctionName& + request) -> YaParameterFunctionName:: + GetParameterIDFromFunctionName::Response { + Steinberg::Vst::ParamID param_id; + const tresult result = + object_instances[request.instance_id] + .parameter_function_name + ->getParameterIDFromFunctionName( + request.unit_id, + request.function_name.c_str(), + param_id); + + return YaParameterFunctionName:: + GetParameterIDFromFunctionNameResponse{ + .result = result, + .param_id = param_id}; + }, [&](const YaPlugView::IsPlatformTypeSupported& request) -> YaPlugView::IsPlatformTypeSupported::Response { // The host will of course want to pass an X11 window ID for the diff --git a/src/wine-host/bridges/vst3.h b/src/wine-host/bridges/vst3.h index a15a7a02..65ee768a 100644 --- a/src/wine-host/bridges/vst3.h +++ b/src/wine-host/bridges/vst3.h @@ -169,6 +169,8 @@ struct InstanceInterfaces { note_expression_physical_ui_mapping; Steinberg::FUnknownPtr plugin_base; Steinberg::FUnknownPtr unit_data; + Steinberg::FUnknownPtr + parameter_function_name; Steinberg::FUnknownPtr prefetchable_support; Steinberg::FUnknownPtr