| @@ -148,6 +148,23 @@ struct PluginMutex { | |||||
| #include <fcntl.h> | #include <fcntl.h> | ||||
| #include <sys/mman.h> | #include <sys/mman.h> | ||||
| #include <fenv.h> // fesetround() | #include <fenv.h> // fesetround() | ||||
| #include <stdarg.h> | |||||
| static FILE *logfile; | |||||
| #undef Dprintf | |||||
| #define Dprintf log_printf | |||||
| static void log_printf(const char *logData, ...) { | |||||
| static char buf[16*1024]; | |||||
| va_list va; | |||||
| va_start(va, logData); | |||||
| vsprintf(buf, logData, va); | |||||
| va_end(va); | |||||
| printf(buf); | |||||
| fputs(buf, logfile); | |||||
| fflush(logfile); | |||||
| } | |||||
| // #define _GNU_SOURCE | // #define _GNU_SOURCE | ||||
| #include <dlfcn.h> | #include <dlfcn.h> | ||||
| @@ -689,7 +706,6 @@ public: | |||||
| } | } | ||||
| void closeEffect(void) { | void closeEffect(void) { | ||||
| closeEditor(); | closeEditor(); | ||||
| // (todo) use mutex | // (todo) use mutex | ||||
| @@ -998,18 +1014,26 @@ public: | |||||
| } | } | ||||
| bool setProgramChunk(size_t _size, uint8_t *_addr) { | bool setProgramChunk(size_t _size, uint8_t *_addr) { | ||||
| Dprintf("xxx vstrack_plugin:setProgramChunk: 1\n"); | |||||
| setGlobals(); | setGlobals(); | ||||
| Dprintf("xxx vstrack_plugin:setProgramChunk: 2\n"); | |||||
| lockAudio(); | lockAudio(); | ||||
| Dprintf("xxx vstrack_plugin:setProgramChunk: 3\n"); | |||||
| vst2_set_shared_plugin_tls_globals(); | vst2_set_shared_plugin_tls_globals(); | ||||
| Dprintf("xxx vstrack_plugin:setProgramChunk: 4\n"); | |||||
| #if 0 | #if 0 | ||||
| Dprintf("xxx vstrack_plugin:setProgramChunk: size=%u\n", _size); | Dprintf("xxx vstrack_plugin:setProgramChunk: size=%u\n", _size); | ||||
| #endif | #endif | ||||
| lglw_glcontext_push(rack::global_ui->window.lglw); | lglw_glcontext_push(rack::global_ui->window.lglw); | ||||
| Dprintf("xxx vstrack_plugin:setProgramChunk: 5\n"); | |||||
| bool r = rack::global_ui->app.gRackWidget->loadPatchFromString((const char*)_addr); | bool r = rack::global_ui->app.gRackWidget->loadPatchFromString((const char*)_addr); | ||||
| Dprintf("xxx vstrack_plugin:setProgramChunk: 6\n"); | |||||
| rack::global_ui->ui.gScene->step(); // w/o this the patch is bypassed | rack::global_ui->ui.gScene->step(); // w/o this the patch is bypassed | ||||
| Dprintf("xxx vstrack_plugin:setProgramChunk: 7\n"); | |||||
| lglw_glcontext_pop(rack::global_ui->window.lglw); | lglw_glcontext_pop(rack::global_ui->window.lglw); | ||||
| Dprintf("xxx vstrack_plugin:setProgramChunk: r=%d\n", r); | |||||
| Dprintf("xxx vstrack_plugin:setProgramChunk: 8 r=%d\n", r); | |||||
| unlockAudio(); | unlockAudio(); | ||||
| Dprintf("xxx vstrack_plugin:setProgramChunk: 9\n"); | |||||
| return r; | return r; | ||||
| } | } | ||||
| @@ -1102,6 +1126,7 @@ public: | |||||
| } | } | ||||
| void redraw(void) { | void redraw(void) { | ||||
| #if 1 | |||||
| setGlobals(); | setGlobals(); | ||||
| if(lglw_window_is_visible(rack::global_ui->window.lglw)) | if(lglw_window_is_visible(rack::global_ui->window.lglw)) | ||||
| @@ -1116,6 +1141,7 @@ public: | |||||
| // Restore the DAW's GL context | // Restore the DAW's GL context | ||||
| lglw_glcontext_pop(rack::global_ui->window.lglw); | lglw_glcontext_pop(rack::global_ui->window.lglw); | ||||
| } | } | ||||
| #endif | |||||
| } | } | ||||
| #ifdef YAC_LINUX | #ifdef YAC_LINUX | ||||
| @@ -1690,6 +1716,7 @@ VstIntPtr VSTPluginDispatcher(VSTPlugin *vstPlugin, | |||||
| // // { | // // { | ||||
| r = wrapper->setProgramChunk(size_t(value), (uint8_t*)ptr) ? 1 : 0; | r = wrapper->setProgramChunk(size_t(value), (uint8_t*)ptr) ? 1 : 0; | ||||
| // // } | // // } | ||||
| Dprintf("xxx vstrack_plugin: effSetChunk LEAVE\n"); | |||||
| break; | break; | ||||
| case effShellGetNextPlugin: | case effShellGetNextPlugin: | ||||
| @@ -2205,6 +2232,11 @@ void vst2_idle_detect_mode_get(int *_mode) { | |||||
| * Implementation of the main entry point of the plugin | * Implementation of the main entry point of the plugin | ||||
| */ | */ | ||||
| VST_EXPORT VSTPlugin *VSTPluginMain(VSTHostCallback vstHostCallback) { | VST_EXPORT VSTPlugin *VSTPluginMain(VSTHostCallback vstHostCallback) { | ||||
| #ifdef YAC_LINUX | |||||
| logfile = fopen("/tmp/vst2_log.txt", "w"); | |||||
| #endif | |||||
| Dprintf("vstrack_plugin: called VSTPluginMain... \n"); | Dprintf("vstrack_plugin: called VSTPluginMain... \n"); | ||||
| #if 0 | #if 0 | ||||