From d92afcaf269559363e49e542d5bfdd7f27b39db3 Mon Sep 17 00:00:00 2001 From: nebogeo Date: Thu, 24 Oct 2002 21:24:13 +0000 Subject: [PATCH] GUI optimisation, added --CallbackOnly mode, detection of fltk built with --enable-shared --- .../Plugins/MatrixPlugin/MatrixPluginGUI.C | 6 +++--- .../Plugins/MatrixPlugin/MatrixPluginGUI.h | 3 ++- .../Plugins/PoshSamplerPlugin/Makefile.in | 2 +- .../PoshSamplerPlugin/PoshSamplerPluginGUI.C | 4 ++-- .../PoshSamplerPlugin/PoshSamplerPluginGUI.h | 2 +- SpiralSound/Plugins/SpiralPluginGUI.C | 6 +++++- SpiralSound/Plugins/SpiralPluginGUI.h | 2 ++ SpiralSynthModular.C | 7 ++++--- configure.in | 4 ++++ main.cpp | 18 +++++++++++++++--- 10 files changed, 39 insertions(+), 15 deletions(-) diff --git a/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.C b/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.C index 29cf6ee..d2a8cff 100644 --- a/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.C +++ b/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.C @@ -141,16 +141,16 @@ SpiralPluginGUI(w,h,o,ch) end(); } -void MatrixPluginGUI::draw() +void MatrixPluginGUI::Update() { - SpiralPluginGUI::draw(); - for(int x=0; xvalue(0); } m_Flash[m_GUICH->GetInt("Step")]->value(1); + + redraw(); } void MatrixPluginGUI::UpdateValues(SpiralPlugin *o) diff --git a/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h b/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h index 5585a38..28d6faa 100644 --- a/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h +++ b/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h @@ -37,8 +37,9 @@ class MatrixPluginGUI : public SpiralPluginGUI { public: MatrixPluginGUI(int w, int h, MatrixPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void draw(); + virtual void UpdateValues(SpiralPlugin *o); + virtual void Update(); private: diff --git a/SpiralSound/Plugins/PoshSamplerPlugin/Makefile.in b/SpiralSound/Plugins/PoshSamplerPlugin/Makefile.in index a88a83e..1148c2c 100644 --- a/SpiralSound/Plugins/PoshSamplerPlugin/Makefile.in +++ b/SpiralSound/Plugins/PoshSamplerPlugin/Makefile.in @@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ @FLTK_CXXFLAGS@ INCPATH = LINK = g++ -shared LFLAGS = -LIBS = @FLTK_LIBS@ -lm -ldl +LIBS = @FLTK_LIBS@ MOC = moc UIC = diff --git a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.C b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.C index 599f186..e142034 100644 --- a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.C +++ b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.C @@ -406,10 +406,10 @@ void PoshSamplerPluginGUI::UpdateSampleDisplay(int num) } } -void PoshSamplerPluginGUI::draw() +void PoshSamplerPluginGUI::Update() { - SpiralPluginGUI::draw(); SetPlayPos(m_GUICH->GetLong("PlayPos")); + redraw(); } void PoshSamplerPluginGUI::UpdateValues(SpiralPlugin *o) diff --git a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.h b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.h index 00678f8..81d78af 100644 --- a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.h +++ b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.h @@ -74,7 +74,7 @@ public: PoshSamplerPluginGUI(int w, int h, PoshSamplerPlugin *o,ChannelHandler *ch, const HostInfo *Info); virtual void UpdateValues(SpiralPlugin *o); - virtual void draw(); + virtual void Update(); void SetPlayPos(long s) { m_Display->SetPlayPos(s); } int GetCurrentSample() { return (int)m_SampleNum->value(); } diff --git a/SpiralSound/Plugins/SpiralPluginGUI.C b/SpiralSound/Plugins/SpiralPluginGUI.C index 5ee737d..29302b7 100644 --- a/SpiralSound/Plugins/SpiralPluginGUI.C +++ b/SpiralSound/Plugins/SpiralPluginGUI.C @@ -49,7 +49,11 @@ SpiralPluginGUI::~SpiralPluginGUI() // Needed to properly remove the window. Fl::check(); } - + +void SpiralPluginGUI::Update() +{ +} + //// Callbacks //// inline void SpiralPluginGUI::cb_Hide_i(Fl_Button* o, void* v) diff --git a/SpiralSound/Plugins/SpiralPluginGUI.h b/SpiralSound/Plugins/SpiralPluginGUI.h index 523b471..17a19aa 100644 --- a/SpiralSound/Plugins/SpiralPluginGUI.h +++ b/SpiralSound/Plugins/SpiralPluginGUI.h @@ -36,6 +36,8 @@ public: SpiralPluginGUI(int w, int h, SpiralPlugin* o, ChannelHandler *ch); ~SpiralPluginGUI(); + virtual void Update(); + // called while audio thread is suspended, so direct access to the // spiralplugin is acceptable virtual void UpdateValues(SpiralPlugin *o)=0; diff --git a/SpiralSynthModular.C b/SpiralSynthModular.C index 182865d..259c43b 100644 --- a/SpiralSynthModular.C +++ b/SpiralSynthModular.C @@ -185,7 +185,8 @@ void SynthModular::UpdatePluginGUIs() { if (i->second->m_DeviceGUI->GetPluginWindow()) { - i->second->m_DeviceGUI->GetPluginWindow()->redraw(); + SpiralPluginGUI *GUI=(SpiralPluginGUI *)i->second->m_DeviceGUI->GetPluginWindow(); + GUI->Update(); } if (i->second->m_DeviceGUI->Killed()) @@ -632,7 +633,7 @@ void SynthModular::UpdateHostInfo() m_Info.OUTPUTFILE = SpiralInfo::OUTPUTFILE; m_Info.MIDIFILE = SpiralInfo::MIDIFILE; m_Info.POLY = SpiralInfo::POLY; - + str>>*this; } @@ -674,7 +675,7 @@ istream &operator>>(istream &s, SynthModular &o) int Num, ID, PluginID, x,y,ps,px,py; s>>dummy>>Num; - + for(int n=0; nCallbackMode()) { + // do funky stuff synth->Update(); + + // slow down this thread if we are not going to be using the + // oss plugin. prevents maxing the CPU out for no reason. + if (CallbackOnly) usleep(100); } else { + // the engine is currently in callback mode, so we don't + // need to do anything unless we are switched back usleep(1000000); } } @@ -69,6 +78,7 @@ int main(int argc, char **argv) { if (!strcmp(argv[a],"--NoGUI")) GUI = false; else if (!strcmp(argv[a],"--SHED_FIFO")) FIFO = true; + else if (!strcmp(argv[a],"--CallbackOnly")) CallbackOnly = true; else { cmd_filename = argv[1]; @@ -85,17 +95,19 @@ int main(int argc, char **argv) Fl_Window* win = synth->CreateWindow(); synth->LoadPlugins(); win->xclass(""); - if (GUI) win->show(argc, argv); // prevents stuff happening before the plugins have loaded + if (GUI) win->show(1, argv); // prevents stuff happening before the plugins have loaded // set some fltk defaults Fl_Tooltip::size(10); Fl::visible_focus(false); - + // spawn the audio thread int ret; if (FIFO) ret=pthread_create_realtime(&loopthread,(void*(*)(void*))audioloop,NULL,10); else ret=pthread_create(&loopthread,NULL,(void*(*)(void*))audioloop,NULL); - + + pthread_t GUIThread = pthread_self(); + // do we need to load a patch on startup? if (cmd_specd) synth->LoadPatch(cmd_filename.c_str());