From 4cc24f74d192d4f6b05f60e633e8217492249c1d Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Thu, 17 Dec 2020 21:54:27 +0100 Subject: [PATCH] Implement IEditController::getParameterCount() --- src/common/logging/vst3.cpp | 9 +++++++++ src/common/logging/vst3.h | 2 ++ src/common/serialization/vst3.h | 1 + .../serialization/vst3/plugin/edit-controller.h | 15 +++++++++++++++ src/plugin/bridges/vst3-impls/plugin-proxy.cpp | 5 ++--- src/wine-host/bridges/vst3.cpp | 5 +++++ 6 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/common/logging/vst3.cpp b/src/common/logging/vst3.cpp index 7ac9fc7e..76503b80 100644 --- a/src/common/logging/vst3.cpp +++ b/src/common/logging/vst3.cpp @@ -274,6 +274,15 @@ void Vst3Logger::log_request( }); } +void Vst3Logger::log_request( + bool is_host_vst, + const YaEditController2::GetParameterCount& request) { + log_request_base(is_host_vst, [&](auto& message) { + message << "::getParameterCount()"; + }); +} + void Vst3Logger::log_request(bool is_host_vst, const YaPluginBase::Initialize& request) { log_request_base(is_host_vst, [&](auto& message) { diff --git a/src/common/logging/vst3.h b/src/common/logging/vst3.h index 6c7d668b..88b0ad94 100644 --- a/src/common/logging/vst3.h +++ b/src/common/logging/vst3.h @@ -81,6 +81,8 @@ class Vst3Logger { void log_request(bool is_host_vst, const YaComponent::SetActive&); void log_request(bool is_host_vst, const YaEditController2::SetComponentState&); + void log_request(bool is_host_vst, + const YaEditController2::GetParameterCount&); void log_request(bool is_host_vst, const YaPluginBase::Initialize&); void log_request(bool is_host_vst, const YaPluginBase::Terminate&); void log_request(bool is_host_vst, const YaPluginFactory::Construct&); diff --git a/src/common/serialization/vst3.h b/src/common/serialization/vst3.h index a59f9831..3bfe17af 100644 --- a/src/common/serialization/vst3.h +++ b/src/common/serialization/vst3.h @@ -76,6 +76,7 @@ using ControlRequest = std::variant; + + native_size_t instance_id; + + template + void serialize(S& s) { + s.value8b(instance_id); + } + }; + virtual int32 PLUGIN_API getParameterCount() override = 0; virtual tresult PLUGIN_API getParameterInfo(int32 paramIndex, diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp index 1e4cea8f..97d1f022 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp @@ -195,9 +195,8 @@ Vst3PluginProxyImpl::setComponentState(Steinberg::IBStream* state) { } int32 PLUGIN_API Vst3PluginProxyImpl::getParameterCount() { - // TODO: Implement - bridge.logger.log("TODO IEditController::getParameterCount()"); - return Steinberg::kNotImplemented; + return bridge.send_message(YaEditController2::GetParameterCount{ + .instance_id = arguments.instance_id}); } tresult PLUGIN_API Vst3PluginProxyImpl::getParameterInfo( diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index 3eb353cd..70b2f8da 100644 --- a/src/wine-host/bridges/vst3.cpp +++ b/src/wine-host/bridges/vst3.cpp @@ -237,6 +237,11 @@ void Vst3Bridge::run() { return object_instances[request.instance_id] .edit_controller->setComponentState(&request.state); }, + [&](YaEditController2::GetParameterCount& request) + -> YaEditController2::GetParameterCount::Response { + return object_instances[request.instance_id] + .edit_controller->getParameterCount(); + }, [&](YaPluginBase::Initialize& request) -> YaPluginBase::Initialize::Response { // If we got passed a host context, we'll create a proxy object