Browse Source

Tweaked the ScopedJuceInitialiser_GUI to use reference-counting internally, and used it to replace/simplify some similar objects in the plugin wrapper classes.

tags/2021-05-28
jules 11 years ago
parent
commit
619716751e
6 changed files with 23 additions and 54 deletions
  1. +3
    -27
      modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp
  2. +6
    -20
      modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp
  3. +7
    -3
      modules/juce_events/messages/juce_Initialisation.h
  4. +4
    -2
      modules/juce_events/messages/juce_MessageManager.cpp
  5. +1
    -1
      modules/juce_gui_basics/native/juce_android_Windowing.cpp
  6. +2
    -1
      modules/juce_gui_basics/native/juce_ios_Windowing.mm

+ 3
- 27
modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp View File

@@ -177,30 +177,6 @@ struct AAXClasses
return nullptr;
}
//==============================================================================
struct JUCELibraryRefCount
{
JUCELibraryRefCount() { if (getCount()++ == 0) initialise(); }
~JUCELibraryRefCount() { if (--getCount() == 0) shutdown(); }
private:
static void initialise()
{
initialiseJuce_GUI();
}
static void shutdown()
{
shutdownJuce_GUI();
}
int& getCount() noexcept
{
static int count = 0;
return count;
}
};
//==============================================================================
class JuceAAX_Processor;
@@ -389,7 +365,7 @@ struct AAXClasses
ScopedPointer<ContentWrapperComponent> component;
JUCELibraryRefCount juceCount;
ScopedJuceInitialiser_GUI libraryInitialiser;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceAAX_GUI)
};
@@ -896,7 +872,7 @@ struct AAXClasses
check (Controller()->SetSignalLatency (audioProcessor.getLatencySamples()));
}
JUCELibraryRefCount juceCount;
ScopedJuceInitialiser_GUI libraryInitialiser;
ScopedPointer<AudioProcessor> pluginInstance;
MidiBuffer midiBuffer;
@@ -1020,7 +996,7 @@ struct AAXClasses
AAX_Result JUCE_CDECL GetEffectDescriptions (AAX_ICollection*);
AAX_Result JUCE_CDECL GetEffectDescriptions (AAX_ICollection* collection)
{
AAXClasses::JUCELibraryRefCount libraryRefCount;
ScopedJuceInitialiser_GUI libraryInitialiser;
if (AAX_IEffectDescriptor* const descriptor = collection->NewDescriptor())
{


+ 6
- 20
modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp View File

@@ -60,23 +60,6 @@ namespace juce
using namespace Steinberg;
//==============================================================================
class JuceLibraryRefCount
{
public:
JuceLibraryRefCount() { if ((getCount()++) == 0) initialiseJuce_GUI(); }
~JuceLibraryRefCount() { if ((--getCount()) == 0) shutdownJuce_GUI(); }
private:
int& getCount() noexcept
{
static int count = 0;
return count;
}
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceLibraryRefCount)
};
//==============================================================================
#if JUCE_MAC
extern void initialiseMac();
@@ -104,6 +87,7 @@ public:
private:
Atomic<int> refCount;
ScopedPointer<AudioProcessor> audioProcessor;
ScopedJuceInitialiser_GUI libraryInitialiser;
JuceAudioProcessor() JUCE_DELETED_FUNCTION;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceAudioProcessor)
@@ -301,7 +285,7 @@ public:
private:
//==============================================================================
ComSmartPtr<JuceAudioProcessor> audioProcessor;
const JuceLibraryRefCount juceCount;
ScopedJuceInitialiser_GUI libraryInitialiser;
//==============================================================================
void setupParameters()
@@ -539,6 +523,8 @@ private:
WindowsHooks hooks;
#endif
ScopedJuceInitialiser_GUI libraryInitialiser;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceVST3Editor)
};
@@ -1338,7 +1324,7 @@ private:
MidiBuffer midiBuffer;
Array<float*> channelList;
const JuceLibraryRefCount juceCount;
ScopedJuceInitialiser_GUI libraryInitialiser;
//==============================================================================
void addBusTo (Vst::BusList& busList, Vst::Bus* newBus)
@@ -1696,7 +1682,7 @@ public:
private:
//==============================================================================
const JuceLibraryRefCount juceCount;
ScopedJuceInitialiser_GUI libraryInitialiser;
Atomic<int> refCount;
const PFactoryInfo factoryInfo;
ComSmartPtr<Vst::IHostApplication> host;


+ 7
- 3
modules/juce_events/messages/juce_Initialisation.h View File

@@ -55,13 +55,17 @@ JUCE_API void JUCE_CALLTYPE shutdownJuce_GUI();
/** A utility object that helps you initialise and shutdown Juce correctly
using an RAII pattern.
When an instance of this class is created, it calls initialiseJuce_GUI(),
and when it's deleted, it calls shutdownJuce_GUI(), which lets you easily
make sure that these functions are matched correctly.
When the first instance of this class is created, it calls initialiseJuce_GUI(),
and when the last instance is deleted, it calls shutdownJuce_GUI(), so that you
can easily be sure that as long as at least one instance of the class exists, the
library will be initialised.
This class is particularly handy to use at the beginning of a console app's
main() function, because it'll take care of shutting down whenever you return
from the main() call.
Be careful with your threading though - to be safe, you should always make sure
that these objects are created and deleted on the message thread.
*/
class JUCE_API ScopedJuceInitialiser_GUI
{


+ 4
- 2
modules/juce_events/messages/juce_MessageManager.cpp View File

@@ -334,5 +334,7 @@ JUCE_API void JUCE_CALLTYPE shutdownJuce_GUI()
}
}
ScopedJuceInitialiser_GUI::ScopedJuceInitialiser_GUI() { initialiseJuce_GUI(); }
ScopedJuceInitialiser_GUI::~ScopedJuceInitialiser_GUI() { shutdownJuce_GUI(); }
static int numScopedInitInstances = 0;
ScopedJuceInitialiser_GUI::ScopedJuceInitialiser_GUI() { if (numScopedInitInstances++ == 0) initialiseJuce_GUI(); }
ScopedJuceInitialiser_GUI::~ScopedJuceInitialiser_GUI() { if (--numScopedInitInstances == 0) shutdownJuce_GUI(); }

+ 1
- 1
modules/juce_gui_basics/native/juce_android_Windowing.cpp View File

@@ -39,7 +39,7 @@ JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, launchApp, void, (JNIEnv* en
JUCEApplicationBase::createInstance = &juce_CreateApplication;
initialiseJuce_GUI();
ScopedJuceInitialiser_GUI libraryInitialiser;
JUCEApplicationBase* app = JUCEApplicationBase::createInstance();
if (! app->initialiseApp())


+ 2
- 1
modules/juce_gui_basics/native/juce_ios_Windowing.mm View File

@@ -44,7 +44,8 @@ extern bool isIOSAppActive;
- (void) applicationDidFinishLaunching: (UIApplication*) application
{
(void) application;
initialiseJuce_GUI();
ScopedJuceInitialiser_GUI libraryInitialiser;
JUCEApplicationBase* app = JUCEApplicationBase::createInstance();


Loading…
Cancel
Save