Fix issues with singleton instance with plugins

pre-release-3
James H Ball 2025-01-05 09:44:55 +00:00
rodzic ed7f046beb
commit dcfd9e1db2
5 zmienionych plików z 71 dodań i 10 usunięć

Wyświetl plik

@ -75,7 +75,7 @@ CommonPluginEditor::CommonPluginEditor(CommonAudioProcessor& p, juce::String app
tooltipDropShadow.setOwner(&tooltipWindow);
#if SOSCI_FEATURES
SharedTextureManager::getInstance()->initGL();
sharedTextureManager.initGL();
#endif
}

Wyświetl plik

@ -43,12 +43,28 @@ public:
juce::String appName;
juce::String projectFileType;
#if SOSCI_FEATURES
SharedTextureManager sharedTextureManager;
#endif
VisualiserSettings visualiserSettings = VisualiserSettings(audioProcessor.visualiserParameters, 3);
SettingsWindow visualiserSettingsWindow = SettingsWindow("Visualiser Settings", visualiserSettings);
RecordingSettings recordingSettings = RecordingSettings(audioProcessor.recordingParameters);
SettingsWindow recordingSettingsWindow = SettingsWindow("Recording Settings", recordingSettings);
VisualiserComponent visualiser{audioProcessor.lastOpenedDirectory, applicationFolder.getChildFile(ffmpegFileName), audioProcessor.haltRecording, audioProcessor.threadManager, visualiserSettings, audioProcessor.recordingParameters, nullptr, appName == "sosci"};
VisualiserComponent visualiser{
audioProcessor.lastOpenedDirectory,
#if SOSCI_FEATURES
sharedTextureManager,
#endif
applicationFolder.getChildFile(ffmpegFileName),
audioProcessor.haltRecording,
audioProcessor.threadManager,
visualiserSettings,
audioProcessor.recordingParameters,
nullptr,
appName == "sosci"
};
std::unique_ptr<juce::FileChooser> chooser;
juce::MenuBarComponent menuBar;

Wyświetl plik

@ -15,7 +15,30 @@
#include "TexturedFragmentShader.glsl"
#include "TexturedVertexShader.glsl"
VisualiserComponent::VisualiserComponent(juce::File& lastOpenedDirectory, juce::File ffmpegFile, std::function<void()>& haltRecording, AudioBackgroundThreadManager& threadManager, VisualiserSettings& settings, RecordingParameters& recordingParameters, VisualiserComponent* parent, bool visualiserOnly) : lastOpenedDirectory(lastOpenedDirectory), ffmpegFile(ffmpegFile), haltRecording(haltRecording), settings(settings), recordingParameters(recordingParameters), threadManager(threadManager), visualiserOnly(visualiserOnly), AudioBackgroundThread("VisualiserComponent" + juce::String(parent != nullptr ? " Child" : ""), threadManager), parent(parent) {
VisualiserComponent::VisualiserComponent(
juce::File& lastOpenedDirectory,
#if SOSCI_FEATURES
SharedTextureManager& sharedTextureManager,
#endif
juce::File ffmpegFile,
std::function<void()>& haltRecording,
AudioBackgroundThreadManager& threadManager,
VisualiserSettings& settings,
RecordingParameters& recordingParameters,
VisualiserComponent* parent,
bool visualiserOnly
) : lastOpenedDirectory(lastOpenedDirectory),
ffmpegFile(ffmpegFile),
#if SOSCI_FEATURES
sharedTextureManager(sharedTextureManager),
#endif
haltRecording(haltRecording),
settings(settings),
recordingParameters(recordingParameters),
threadManager(threadManager),
visualiserOnly(visualiserOnly),
AudioBackgroundThread("VisualiserComponent" + juce::String(parent != nullptr ? " Child" : ""), threadManager),
parent(parent) {
#if SOSCI_FEATURES
addAndMakeVisible(ffmpegDownloader);
@ -416,7 +439,18 @@ void VisualiserComponent::popoutWindow() {
}
#endif
setRecording(false);
auto visualiser = new VisualiserComponent(lastOpenedDirectory, ffmpegFile, haltRecording, threadManager, settings, recordingParameters, this);
auto visualiser = new VisualiserComponent(
lastOpenedDirectory,
#if SOSCI_FEATURES
sharedTextureManager,
#endif
ffmpegFile,
haltRecording,
threadManager,
settings,
recordingParameters,
this
);
visualiser->settings.setLookAndFeel(&getLookAndFeel());
visualiser->openSettings = openSettings;
visualiser->closeSettings = closeSettings;
@ -453,7 +487,7 @@ void VisualiserComponent::childUpdated() {
#if SOSCI_FEATURES
void VisualiserComponent::initialiseSharedTexture() {
sharedTextureSender = SharedTextureManager::getInstance()->addSender("osci-render - " + juce::String(juce::Time::getCurrentTime().toMilliseconds()), renderTexture.width, renderTexture.height);
sharedTextureSender = sharedTextureManager.addSender("osci-render - " + juce::String(juce::Time::getCurrentTime().toMilliseconds()), renderTexture.width, renderTexture.height);
sharedTextureSender->initGL();
sharedTextureSender->setSharedTextureId(renderTexture.id);
sharedTextureSender->setDrawFunction([this] {
@ -464,9 +498,7 @@ void VisualiserComponent::initialiseSharedTexture() {
void VisualiserComponent::closeSharedTexture() {
if (sharedTextureSender != nullptr) {
if (SharedTextureManager::getInstanceWithoutCreating() != nullptr) {
SharedTextureManager::getInstance()->removeSender(sharedTextureSender);
}
sharedTextureManager.removeSender(sharedTextureSender);
sharedTextureSender = nullptr;
}

Wyświetl plik

@ -32,7 +32,19 @@ struct Texture {
class VisualiserWindow;
class VisualiserComponent : public juce::Component, public AudioBackgroundThread, public juce::MouseListener, public juce::OpenGLRenderer, public juce::AsyncUpdater {
public:
VisualiserComponent(juce::File& lastOpenedDirectory, juce::File ffmpegFile, std::function<void()>& haltRecording, AudioBackgroundThreadManager& threadManager, VisualiserSettings& settings, RecordingParameters& recordingParameters, VisualiserComponent* parent = nullptr, bool visualiserOnly = false);
VisualiserComponent(
juce::File& lastOpenedDirectory,
#if SOSCI_FEATURES
SharedTextureManager& sharedTextureManager,
#endif
juce::File ffmpegFile,
std::function<void()>& haltRecording,
AudioBackgroundThreadManager& threadManager,
VisualiserSettings& settings,
RecordingParameters& recordingParameters,
VisualiserComponent* parent = nullptr,
bool visualiserOnly = false
);
~VisualiserComponent() override;
std::function<void()> openSettings;
@ -78,6 +90,7 @@ private:
#if SOSCI_FEATURES
SvgButton sharedTextureButton{ "sharedTexture", BinaryData::spout_svg, juce::Colours::white, juce::Colours::red };
SharedTextureManager& sharedTextureManager;
SharedTextureSender* sharedTextureSender = nullptr;
#endif

@ -1 +1 @@
Subproject commit ad3cfff406675ee680380b8f4b71bb0f9ffa7ea9
Subproject commit f2faeeb981b5b1676c3aa349e60335922c966ae4