diff --git a/Makefile.plugins.mk b/Makefile.plugins.mk index a8f8a891..2017d459 100644 --- a/Makefile.plugins.mk +++ b/Makefile.plugins.mk @@ -698,11 +698,11 @@ endif # --------------------------------------------------------------------------------------------------------------------- # Export -# ifeq ($(HAVE_DGL),true) -# $(BUILD_DIR)/export$(APP_EXT): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_EXPORT.cpp.o $(BUILD_DIR)/DistrhoUIMain_EXPORT.cpp.o $(DGL_LIB) -# else +ifeq ($(HAVE_DGL),true) +$(BUILD_DIR)/export$(APP_EXT): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_EXPORT.cpp.o $(BUILD_DIR)/DistrhoUIMain_EXPORT.cpp.o $(DGL_LIB) +else $(BUILD_DIR)/export$(APP_EXT): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_EXPORT.cpp.o -# endif +endif -@mkdir -p $(shell dirname $@) @echo "Creating export tool for $(NAME)" $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(EXTRA_LIBS) $(EXTRA_DSP_LIBS) $(EXTRA_UI_LIBS) $(DGL_LIBS) -o $@ diff --git a/distrho/DistrhoUIMain.cpp b/distrho/DistrhoUIMain.cpp index ab19cf11..8a62afd5 100644 --- a/distrho/DistrhoUIMain.cpp +++ b/distrho/DistrhoUIMain.cpp @@ -44,7 +44,7 @@ # define DISTRHO_PLUGIN_AND_UI_IN_SINGLE_OBJECT 1 # include "src/DistrhoUIVST3.cpp" #elif defined(DISTRHO_PLUGIN_TARGET_EXPORT) -# define DISTRHO_PLUGIN_AND_UI_IN_SINGLE_OBJECT 0 +# define DISTRHO_PLUGIN_AND_UI_IN_SINGLE_OBJECT 1 #elif defined(DISTRHO_PLUGIN_TARGET_SHARED) || defined(DISTRHO_PLUGIN_TARGET_STATIC) # define DISTRHO_PLUGIN_AND_UI_IN_SINGLE_OBJECT 1 #else diff --git a/distrho/src/DistrhoPluginAU.cpp b/distrho/src/DistrhoPluginAU.cpp index 7da3eed7..1ec8bc15 100644 --- a/distrho/src/DistrhoPluginAU.cpp +++ b/distrho/src/DistrhoPluginAU.cpp @@ -393,14 +393,23 @@ public: return kAudioUnitErr_InvalidProperty; #endif - case 19001: + #if DISTRHO_PLUGIN_HAS_UI && DISTRHO_PLUGIN_WANT_DIRECT_ACCESS + case 'DPFa': + DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope); + DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement == 0, inElement, kAudioUnitErr_InvalidElement); + outDataSize = sizeof(void*); + outWritable = false; + return noErr; + #endif + + case 'DPFp': DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope); DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement < fParameterCount, inElement, kAudioUnitErr_InvalidElement); outDataSize = sizeof(float); outWritable = true; return noErr; - case 19002: + case 'DPFt': DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope); DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement < fParameterCount, inElement, kAudioUnitErr_InvalidElement); outDataSize = sizeof(bool); @@ -690,6 +699,12 @@ public: } return noErr; #endif + + #if DISTRHO_PLUGIN_HAS_UI && DISTRHO_PLUGIN_WANT_DIRECT_ACCESS + case 'DPFa': + *static_cast(outData) = fPlugin.getInstancePointer(); + return noErr; + #endif } d_stdout("TODO GetProperty(%d:%s, %d:%s, %d, ...)", inProp, AudioUnitPropertyID2Str(inProp), inScope, AudioUnitScope2Str(inScope), inElement); @@ -902,7 +917,7 @@ public: // TODO return noErr; - case 19001: + case 'DPFp': DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope); DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement < fParameterCount, inElement, kAudioUnitErr_InvalidElement); DISTRHO_SAFE_ASSERT_UINT_RETURN(inDataSize == sizeof(float), inDataSize, kAudioUnitErr_InvalidPropertyValue); @@ -924,7 +939,7 @@ public: } return noErr; - case 19002: + case 'DPFt': DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope); DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement < fParameterCount, inElement, kAudioUnitErr_InvalidElement); DISTRHO_SAFE_ASSERT_UINT_RETURN(inDataSize == sizeof(bool), inDataSize, kAudioUnitErr_InvalidPropertyValue); @@ -1041,7 +1056,7 @@ public: fLastParameterValues[param] = value; fPlugin.setParameterValue(param, value); // TODO flag param only, notify listeners later on bg thread (sem_post etc) - notifyListeners(19003, kAudioUnitScope_Global, param); + notifyListeners('DPFP', kAudioUnitScope_Global, param); } return noErr; diff --git a/distrho/src/DistrhoUIAU.mm b/distrho/src/DistrhoUIAU.mm index bbf6ecd1..74a3d812 100644 --- a/distrho/src/DistrhoUIAU.mm +++ b/distrho/src/DistrhoUIAU.mm @@ -81,12 +81,12 @@ public: CFRunLoopAddTimer(CFRunLoopGetCurrent(), fTimerRef, kCFRunLoopCommonModes); - AudioUnitAddPropertyListener(fComponent, 19003, auPropertyChangedCallback, this); + AudioUnitAddPropertyListener(fComponent, 'DPFP', auPropertyChangedCallback, this); } ~DPF_UI_AU() { - AudioUnitRemovePropertyListenerWithUserData(fComponent, 19003, auPropertyChangedCallback, this); + AudioUnitRemovePropertyListenerWithUserData(fComponent, 'DPFP', auPropertyChangedCallback, this); if (fTimerRef != nullptr) { @@ -126,7 +126,7 @@ private: { switch (prop) { - case 19003: + case 'DPFP': { AudioUnitParameterValue value; if (AudioUnitGetParameter(fComponent, elem, kAudioUnitScope_Global, 0, &value) == noErr) @@ -156,7 +156,7 @@ private: void editParameter(const uint32_t rindex, const bool started) const { - AudioUnitSetProperty(fComponent, 19002, kAudioUnitScope_Global, rindex, &started, sizeof(bool)); + AudioUnitSetProperty(fComponent, 'DPFt', kAudioUnitScope_Global, rindex, &started, sizeof(bool)); } static void editParameterCallback(void* const ptr, const uint32_t rindex, const bool started) @@ -166,7 +166,7 @@ private: void setParameterValue(const uint32_t rindex, const float value) { - AudioUnitSetProperty(fComponent, 19001, kAudioUnitScope_Global, rindex, &value, sizeof(float)); + AudioUnitSetProperty(fComponent, 'DPFp', kAudioUnitScope_Global, rindex, &value, sizeof(float)); } static void setParameterCallback(void* const ptr, const uint32_t rindex, const float value) @@ -239,7 +239,12 @@ END_NAMESPACE_DISTRHO { const double sampleRate = d_nextSampleRate; const intptr_t winId = 0; - void* const instancePointer = nullptr; + void* instancePointer = nullptr; + + #if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS + UInt32 size = sizeof(void*); + AudioUnitGetProperty(component, 'DPFa', kAudioUnitScope_Global, 0, &instancePointer, &size); + #endif ui = new DPF_UI_AU(component, winId, sampleRate, instancePointer);