Browse Source

replace GLFW by LGLW

pull/1639/head
bsp2 6 years ago
parent
commit
b7ef460fa0
36 changed files with 1165 additions and 1164 deletions
  1. BIN
      dep/dep.7z
  2. +1
    -1
      include/global.hpp
  3. +4
    -26
      include/global_ui.hpp
  4. +1
    -1
      include/settings.hpp
  5. +10
    -2
      include/window.hpp
  6. +4
    -2
      make.objects
  7. +2
    -2
      makefile.msvc
  8. +2
    -1
      makefile_lib.msvc
  9. +1
    -1
      plugins/build_plugin_pre.mk
  10. +3
    -2
      plugins/community/repos/Bidoo/make.objects
  11. +1
    -1
      plugins/community/repos/Bidoo/src/ACNE.cpp
  12. BIN
      plugins/community/repos/Template_shared/Template_shared.dll
  13. +4
    -0
      plugins/community/repos/Template_shared/makefile.msvc
  14. BIN
      plugins/community/repos/dBiz/dBiz.dll
  15. +4
    -0
      plugins/community/repos/dBiz/makefile.msvc
  16. +61
    -61
      plugins/community/repos/trowaSoft/src/TSTextField.cpp
  17. +2
    -1
      src/Core/MIDICCToCVInterface.cpp
  18. +6
    -6
      src/app/ModuleBrowser.cpp
  19. +52
    -22
      src/app/ModuleWidget.cpp
  20. +13
    -13
      src/app/RackScene.cpp
  21. +19
    -26
      src/main.cpp
  22. +12
    -3
      src/settings.cpp
  23. +4
    -2
      src/ui/MenuOverlay.cpp
  24. +2
    -1
      src/ui/ScrollWidget.cpp
  25. +40
    -22
      src/ui/TextField.cpp
  26. +116
    -424
      src/vst2_main.cpp
  27. +720
    -456
      src/window.cpp
  28. +8
    -0
      vst2_bin/CHANGELOG_VST.txt
  29. +4
    -4
      vst2_bin/README_vst2.txt
  30. +64
    -80
      vst2_bin/log.txt
  31. BIN
      vst2_bin/plugins/Template_shared/plugin.dll
  32. BIN
      vst2_bin/plugins/dBiz/plugin.dll
  33. +2
    -2
      vst2_bin/settings.json
  34. BIN
      vst2_bin/veeseevstrack_instr.dll__
  35. +1
    -1
      vst2_common.mk
  36. +2
    -1
      vst2_common_msvc_pre.mk

BIN
dep/dep.7z View File


+ 1
- 1
include/global.hpp View File

@@ -12,7 +12,7 @@


#ifdef USE_VST2
struct VSTPluginWrapper;
class VSTPluginWrapper;
#endif // USE_VST2




+ 4
- 26
include/global_ui.hpp View File

@@ -8,7 +8,6 @@
#include "widgets.hpp"


struct GLFWwindow;
struct NVGcontext;


@@ -31,7 +30,7 @@ struct Model;
struct GlobalUI {

struct {
GLFWwindow *gWindow;
void *lglw; // lglw_t
NVGcontext *gVg;
NVGcontext *gFramebufferVg;
std::shared_ptr<Font> gGuiFont;
@@ -92,28 +91,16 @@ struct GlobalUI {
int bnd_font;
} blendish;

#ifdef USE_VST2
struct {
volatile int b_close_window;
volatile int b_hide_window;
#ifdef WIN32
void *parent_hwnd;
bool b_queued_maximize_window;
#endif // WIN32
} vst2;
#endif // USE_VST2

void init(void) {
window.gWindow = NULL;
window.lglw = NULL;
window.gVg = NULL;
window.gFramebufferVg = NULL;
window.gPixelRatio = 1.0;
window.gWindowRatio = 1.0;
// #ifdef USE_VST2
// window.gAllowCursorLock = false;
// #else
window.gAllowCursorLock = true;
// #endif // USE_VST2
window.gGuiFrame = 0;
window.windowX = 0;
window.windowY = 0;
window.windowWidth = 0;
@@ -143,15 +130,6 @@ struct GlobalUI {

blendish.bnd_icon_image = -1;
blendish.bnd_font = -1;

#ifdef USE_VST2
vst2.b_close_window = 0;
vst2.b_hide_window = 0;
#ifdef WIN32
vst2.parent_hwnd = 0;
vst2.b_queued_maximize_window = false;
#endif
#endif // USE_VST2
}

};


+ 1
- 1
include/settings.hpp View File

@@ -9,7 +9,7 @@ namespace rack {
extern bool gSkipAutosaveOnLaunch;

void settingsSave(std::string filename);
void settingsLoad(std::string filename);
void settingsLoad(std::string filename, bool bWindowSizeOnly);


} // namespace rack

+ 10
- 2
include/window.hpp View File

@@ -2,7 +2,8 @@
#include "widgets.hpp"
#define GLEW_STATIC
#include <GL/glew.h>
#include <GLFW/glfw3.h>
////#include <GLFW/glfw3.h>
#include <lglw/lglw.h>


#ifdef ARCH_MAC
@@ -12,12 +13,19 @@
#endif


// backwards compatibility:
// (note) currently only used by Bidoo.ACNE module
#define RACK_MOUSE_BUTTON_LEFT 0
#define RACK_MOUSE_BUTTON_RIGHT 1
#define RACK_MOUSE_BUTTON_MIDDLE 2


extern const char *g_program_dir;

namespace rack {


extern GLFWwindow *gWindow;
// extern GLFWwindow *gWindow;
extern NVGcontext *gVg;
extern NVGcontext *gFramebufferVg;
/** The default font to use for GUI elements */


+ 4
- 2
make.objects View File

@@ -40,7 +40,6 @@ COMMON_OBJ= \
src/audio.o \
src/dsp/minblep.o \
src/engine.o \
src/keyboard.o \
src/midi.o \
src/plugin.o \
src/settings.o \
@@ -83,6 +82,8 @@ COMMON_OBJ= \
src/window.o \
src/vstmidi.o

# src/keyboard.o

HOST_OBJ= \
src/Core/AudioInterface.o \
src/Core/Blank.o \
@@ -98,7 +99,8 @@ LIB_OBJ= \
$(HOST_OBJ)

LIB_OBJ_WIN= \
src/util/dirent_win32/dirent.o
src/util/dirent_win32/dirent.o \
dep/lglw/lglw_windows.o

SHARED_LIB_OBJ= \
$(COMMON_OBJ)


+ 2
- 2
makefile.msvc View File

@@ -23,9 +23,9 @@ vst: lib
rm -f src/vst2_main.o
make -f makefile_vst_effect.msvc bin -j $(NUM_JOBS)
# (note) cannot use both instrument and effect plugin at the same time!
mv veeseevstrack_instr.dll vst2_bin/veeseevstrack_instr.dll__
mv veeseevstrack_instr.dll vst2_bin/
mv veeseevstrack_effect.dll vst2_bin/
@ls -l vst2_bin/veeseevstrack_instr.dll__
@ls -l vst2_bin/veeseevstrack_instr.dll
@ls -l vst2_bin/veeseevstrack_effect.dll

clean:


+ 2
- 1
makefile_lib.msvc View File

@@ -7,7 +7,8 @@ include dep/yac/install_msvc.mk

TARGET_BASENAME=Rack

EXTRAFLAGS= -DVERSION=0.6.1 -DARCH_WIN -D_USE_MATH_DEFINES -DRACK_HOST -DUSE_VST2 -DVST2_REPARENT_WINDOW_HACK -Iinclude/ -Idep/include
EXTRAFLAGS= -DVERSION=0.6.1 -DARCH_WIN -D_USE_MATH_DEFINES -DRACK_HOST -DUSE_VST2 -Iinclude/ -Idep/include -Idep/
#-DVST2_REPARENT_WINDOW_HACK

ifeq ($(BUILD_64),y)
EXTRALIBS= -LIBPATH:dep/lib/msvc/x64


+ 1
- 1
plugins/build_plugin_pre.mk View File

@@ -7,7 +7,7 @@ include ../../../../dep/yac/install_msvc.mk

TARGET_BASENAME=$(SLUG)

EXTRAFLAGS+= -DVERSION=0.6.1 -D_USE_MATH_DEFINES -DUSE_VST2 -DRACK_PLUGIN -DSLUG=$(SLUG) -I../../../../include/ -I../../../../dep/include -Idep/include
EXTRAFLAGS+= -DVERSION=0.6.1 -D_USE_MATH_DEFINES -DUSE_VST2 -DRACK_PLUGIN -DSLUG=$(SLUG) -I../../../../include/ -I../../../../dep/include -I../../../../dep/ -Idep/include
EXTRAFLAGS+=

EXTRALIBS+=


+ 3
- 2
plugins/community/repos/Bidoo/make.objects View File

@@ -23,8 +23,9 @@ ALL_OBJ= \
src/TOCANTE.o \
src/VOID.o \
src/ZINC.o \
src/dep/kiss_fft130/kiss_fft.o \
src/dep/minimp3/minimp3_test.o
src/dep/kiss_fft130/kiss_fft.o

# src/dep/minimp3/minimp3_test.o


# already used in AS modules


+ 1
- 1
plugins/community/repos/Bidoo/src/ACNE.cpp View File

@@ -227,7 +227,7 @@ struct ACNETrimPot : BidooColoredTrimpot {
ACNEWidget *parent = dynamic_cast<ACNEWidget*>(this->parent);
ACNE *module = dynamic_cast<ACNE*>(this->module);
if (parent && module) {
if ((e.button == GLFW_MOUSE_BUTTON_MIDDLE) || ((e.button == GLFW_MOUSE_BUTTON_LEFT) && (windowIsShiftPressed()))) {
if ((e.button == RACK_MOUSE_BUTTON_MIDDLE) || ((e.button == RACK_MOUSE_BUTTON_LEFT) && (windowIsShiftPressed()))) {
this->setValue(10);
module->snapshots[module->currentSnapshot][(int)((this->paramId - ACNE::FADERS_PARAMS)/ACNE_NB_TRACKS)][(this->paramId - ACNE::FADERS_PARAMS)%ACNE_NB_TRACKS] = 10;
}


BIN
plugins/community/repos/Template_shared/Template_shared.dll View File


+ 4
- 0
plugins/community/repos/Template_shared/makefile.msvc View File

@@ -4,4 +4,8 @@ include ../../../build_shared_plugin_pre.mk

include make.objects

define BIN_POST_FXN
cp -f $(SLUG).dll ../../../../vst2_bin/plugins/$(SLUG)/plugin.dll
endef

include ../../../build_shared_plugin_post.mk

BIN
plugins/community/repos/dBiz/dBiz.dll View File


+ 4
- 0
plugins/community/repos/dBiz/makefile.msvc View File

@@ -4,4 +4,8 @@ include ../../../build_shared_plugin_pre.mk

include make.objects

define BIN_POST_FXN
cp -f $(SLUG).dll ../../../../vst2_bin/plugins/$(SLUG)/plugin.dll
endef

include ../../../build_shared_plugin_post.mk

+ 61
- 61
plugins/community/repos/trowaSoft/src/TSTextField.cpp View File

@@ -5,7 +5,7 @@
// for gVg
#include "window.hpp"
// for key codes
#include <GLFW/glfw3.h>
// // #include <GLFW/glfw3.h>
#include "global_ui.hpp"
using namespace rack;

@@ -217,7 +217,7 @@ void TSTextField::onKey(EventKey &e) {
//// Flag if we need to validate/cleanse this character (only if printable and if we are doing validation).
//bool checkKey = (this->allowedTextType != TextType::Any) && isPrintableKey(e.key);
switch (e.key) {
case GLFW_KEY_TAB:
case LGLW_VKEY_TAB/*GLFW_KEY_TAB*/:
// If we have an event to fire, then do it
if (windowIsShiftPressed())//(guiIsShiftPressed())
{
@@ -297,13 +297,13 @@ void TSTextField::onKey(EventKey &e) {
}
} // end if next field
break;
case GLFW_KEY_KP_ENTER:
{
// Key pad enter should also trigger event action
EventAction evt;
onAction(evt);
}
break;
// case GLFW_KEY_KP_ENTER:
// {
// // Key pad enter should also trigger event action
// EventAction evt;
// onAction(evt);
// }
// break;
default:
// Call base method
TextField::onKey(e);
@@ -324,58 +324,58 @@ bool isPrintableKey(int key)
bool isPrintable = false;
switch (key)
{
case GLFW_KEY_SPACE:
case GLFW_KEY_APOSTROPHE:
case GLFW_KEY_COMMA:
case GLFW_KEY_MINUS:
case GLFW_KEY_PERIOD:
case GLFW_KEY_SLASH:
case GLFW_KEY_0:
case GLFW_KEY_1:
case GLFW_KEY_2:
case GLFW_KEY_3:
case GLFW_KEY_4:
case GLFW_KEY_5:
case GLFW_KEY_6:
case GLFW_KEY_7:
case GLFW_KEY_8:
case GLFW_KEY_9:
case GLFW_KEY_SEMICOLON:
case GLFW_KEY_EQUAL:
case GLFW_KEY_A:
case GLFW_KEY_B:
case GLFW_KEY_C:
case GLFW_KEY_D:
case GLFW_KEY_E:
case GLFW_KEY_F:
case GLFW_KEY_G:
case GLFW_KEY_H:
case GLFW_KEY_I:
case GLFW_KEY_J:
case GLFW_KEY_K:
case GLFW_KEY_L:
case GLFW_KEY_M:
case GLFW_KEY_N:
case GLFW_KEY_O:
case GLFW_KEY_P:
case GLFW_KEY_Q:
case GLFW_KEY_R:
case GLFW_KEY_S:
case GLFW_KEY_T:
case GLFW_KEY_U:
case GLFW_KEY_V:
case GLFW_KEY_W:
case GLFW_KEY_X:
case GLFW_KEY_Y:
case GLFW_KEY_Z:
case GLFW_KEY_LEFT_BRACKET:
case GLFW_KEY_BACKSLASH:
case GLFW_KEY_RIGHT_BRACKET:
case GLFW_KEY_GRAVE_ACCENT:
case GLFW_KEY_WORLD_1:
case GLFW_KEY_WORLD_2:
isPrintable = true;
break;
case ' '/*GLFW_KEY_SPACE*/:
case '\''/*GLFW_KEY_APOSTROPHE*/:
case ','/*GLFW_KEY_COMMA*/:
case '-'/*GLFW_KEY_MINUS*/:
case '.'/*GLFW_KEY_PERIOD*/:
case '/'/*GLFW_KEY_SLASH*/:
case '0'/*GLFW_KEY_0*/:
case '1'/*GLFW_KEY_1*/:
case '2'/*GLFW_KEY_2*/:
case '3'/*GLFW_KEY_3*/:
case '4'/*GLFW_KEY_4*/:
case '5'/*GLFW_KEY_5*/:
case '6'/*GLFW_KEY_6*/:
case '7'/*GLFW_KEY_7*/:
case '8'/*GLFW_KEY_8*/:
case '9'/*GLFW_KEY_9*/:
case ';'/*GLFW_KEY_SEMICOLON*/:
case '='/*GLFW_KEY_EQUAL*/:
case 'a'/*GLFW_KEY_A*/:
case 'b'/*GLFW_KEY_B*/:
case 'c'/*GLFW_KEY_C*/:
case 'd'/*GLFW_KEY_D*/:
case 'e'/*GLFW_KEY_E*/:
case 'f'/*GLFW_KEY_F*/:
case 'g'/*GLFW_KEY_G*/:
case 'h'/*GLFW_KEY_H*/:
case 'i'/*GLFW_KEY_I*/:
case 'j'/*GLFW_KEY_J*/:
case 'k'/*GLFW_KEY_K*/:
case 'l'/*GLFW_KEY_L*/:
case 'm'/*GLFW_KEY_M*/:
case 'n'/*GLFW_KEY_N*/:
case 'o'/*GLFW_KEY_O*/:
case 'p'/*GLFW_KEY_P*/:
case 'q'/*GLFW_KEY_Q*/:
case 'r'/*GLFW_KEY_R*/:
case 's'/*GLFW_KEY_S*/:
case 't'/*GLFW_KEY_T*/:
case 'u'/*GLFW_KEY_U*/:
case 'v'/*GLFW_KEY_V*/:
case 'w'/*GLFW_KEY_W*/:
case 'x'/*GLFW_KEY_X*/:
case 'y'/*GLFW_KEY_Y*/:
case 'z'/*GLFW_KEY_Z*/:
case '['/*GLFW_KEY_LEFT_BRACKET*/:
case '\\'/*GLFW_KEY_BACKSLASH*/:
case ']'/*GLFW_KEY_RIGHT_BRACKET*/:
case '^'/*GLFW_KEY_GRAVE_ACCENT*/:
// case GLFW_KEY_WORLD_1:
// case GLFW_KEY_WORLD_2:
isPrintable = true;
break;
}
return isPrintable;
} // end isPrintableKey()

+ 2
- 1
src/Core/MIDICCToCVInterface.cpp View File

@@ -166,7 +166,8 @@ struct MidiCcChoice : GridChoice {

void onKey(EventKey &e) override {
if (global_ui->widgets.gFocusedWidget == this) {
if (e.key == GLFW_KEY_ENTER || e.key == GLFW_KEY_KP_ENTER) {
// if (e.key == GLFW_KEY_ENTER || e.key == GLFW_KEY_KP_ENTER) {
if(LGLW_VKEY_RETURN == e.key) {
EventDefocus eDefocus;
onDefocus(eDefocus);
global_ui->widgets.gFocusedWidget = NULL;


+ 6
- 6
src/app/ModuleBrowser.cpp View File

@@ -497,32 +497,32 @@ void SearchModuleField::onTextChange() {

void SearchModuleField::onKey(EventKey &e) {
switch (e.key) {
case GLFW_KEY_ESCAPE: {
case LGLW_VKEY_ESCAPE/*GLFW_KEY_ESCAPE*/: {
global_ui->ui.gScene->setOverlay(NULL);
e.consumed = true;
return;
} break;
case GLFW_KEY_UP: {
case LGLW_VKEY_UP/*GLFW_KEY_UP*/: {
moduleBrowser->moduleList->incrementSelection(-1);
moduleBrowser->moduleList->scrollSelected();
e.consumed = true;
} break;
case GLFW_KEY_DOWN: {
case LGLW_VKEY_DOWN/*GLFW_KEY_DOWN*/: {
moduleBrowser->moduleList->incrementSelection(1);
moduleBrowser->moduleList->scrollSelected();
e.consumed = true;
} break;
case GLFW_KEY_PAGE_UP: {
case LGLW_VKEY_PAGEUP/*GLFW_KEY_PAGE_UP*/: {
moduleBrowser->moduleList->incrementSelection(-5);
moduleBrowser->moduleList->scrollSelected();
e.consumed = true;
} break;
case GLFW_KEY_PAGE_DOWN: {
case LGLW_VKEY_PAGEDOWN/*GLFW_KEY_PAGE_DOWN*/: {
moduleBrowser->moduleList->incrementSelection(5);
moduleBrowser->moduleList->scrollSelected();
e.consumed = true;
} break;
case GLFW_KEY_ENTER: {
case LGLW_VKEY_RETURN/*GLFW_KEY_ENTER*/: {
BrowserListItem *item = moduleBrowser->moduleList->getSelectedItem();
if (item) {
item->doAction();


+ 52
- 22
src/app/ModuleWidget.cpp View File

@@ -8,7 +8,7 @@


#ifdef USE_VST2
extern "C" void glfw_hack_makeContextCurrent(GLFWwindow *handle);
// // extern "C" void glfw_hack_makeContextCurrent(GLFWwindow *handle);
// #include <windows.h>
#endif // USE_VST2

@@ -310,51 +310,81 @@ void ModuleWidget::onMouseDown(EventMouseDown &e) {
void ModuleWidget::onMouseMove(EventMouseMove &e) {
OpaqueWidget::onMouseMove(e);

// Don't delete the ModuleWidget if a TextField is focused
if (!global_ui->widgets.gFocusedWidget) {
// Instead of checking key-down events, delete the module even if key-repeat hasn't fired yet and the cursor is hovering over the widget.
if (glfwGetKey(global_ui->window.gWindow, GLFW_KEY_DELETE) == GLFW_PRESS || glfwGetKey(global_ui->window.gWindow, GLFW_KEY_BACKSPACE) == GLFW_PRESS) {
if (!windowIsModPressed() && !windowIsShiftPressed()) {
global_ui->app.gRackWidget->deleteModule(this);
this->finalizeEvents();
delete this;
e.consumed = true;
return;
}
}
}
// // #if 0
// // // Don't delete the ModuleWidget if a TextField is focused
// // if (!global_ui->widgets.gFocusedWidget) {
// // // Instead of checking key-down events, delete the module even if key-repeat hasn't fired yet and the cursor is hovering over the widget.
// // if (glfwGetKey(global_ui->window.gWindow, GLFW_KEY_DELETE) == GLFW_PRESS || glfwGetKey(global_ui->window.gWindow, GLFW_KEY_BACKSPACE) == GLFW_PRESS) {
// // if (!windowIsModPressed() && !windowIsShiftPressed()) {
// // global_ui->app.gRackWidget->deleteModule(this);
// // this->finalizeEvents();
// // delete this;
// // e.consumed = true;
// // return;
// // }
// // }
// // }
// // #endif
}

void ModuleWidget::onHoverKey(EventHoverKey &e) {
switch (e.key) {
case GLFW_KEY_I: {

case 'i'/*GLFW_KEY_I*/:
if (windowIsModPressed() && !windowIsShiftPressed()) {
reset();
e.consumed = true;
return;
}
} break;
case GLFW_KEY_R: {
break;

case 'r'/*GLFW_KEY_R*/:
if (windowIsModPressed() && !windowIsShiftPressed()) {
randomize();
e.consumed = true;
return;
}
} break;
case GLFW_KEY_D: {
break;

case 'd'/*GLFW_KEY_D*/:
if (windowIsModPressed() && !windowIsShiftPressed()) {
global_ui->app.gRackWidget->cloneModule(this);
e.consumed = true;
return;
}
} break;
case GLFW_KEY_U: {
break;

case 'u'/*GLFW_KEY_U*/:
if (windowIsModPressed() && !windowIsShiftPressed()) {
disconnect();
e.consumed = true;
return;
}
} break;
break;

case LGLW_VKEY_DELETE:
case LGLW_VKEY_BACKSPACE:
if (!global_ui->widgets.gFocusedWidget) {
if (!windowIsModPressed() && !windowIsShiftPressed()) {
global_ui->app.gRackWidget->deleteModule(this);
this->finalizeEvents();
delete this;
e.consumed = true;
return;
}
}
break;

case 'w':
if (windowIsModPressed() && !windowIsShiftPressed()) {
global_ui->app.gRackWidget->deleteModule(this);
this->finalizeEvents();
delete this;
e.consumed = true;
return;
}
break;

}

Widget::onHoverKey(e);


+ 13
- 13
src/app/RackScene.cpp View File

@@ -65,19 +65,19 @@ void RackScene::onHoverKey(EventHoverKey &e) {

if (!e.consumed) {
switch (e.key) {
case GLFW_KEY_N: {
case 'n'/*GLFW_KEY_N*/:
if (windowIsModPressed() && !windowIsShiftPressed()) {
global_ui->app.gRackWidget->reset();
e.consumed = true;
}
} break;
case GLFW_KEY_Q: {
break;
case 'q'/*GLFW_KEY_Q*/:
if (windowIsModPressed() && !windowIsShiftPressed()) {
windowClose();
e.consumed = true;
}
} break;
case GLFW_KEY_O: {
break;
case 'o'/*GLFW_KEY_O*/:
if (windowIsModPressed() && !windowIsShiftPressed()) {
global_ui->app.gRackWidget->openDialog();
e.consumed = true;
@@ -86,8 +86,8 @@ void RackScene::onHoverKey(EventHoverKey &e) {
global_ui->app.gRackWidget->revert();
e.consumed = true;
}
} break;
case GLFW_KEY_S: {
break;
case 's'/*GLFW_KEY_S*/:
if (windowIsModPressed() && !windowIsShiftPressed()) {
global_ui->app.gRackWidget->saveDialog();
e.consumed = true;
@@ -96,15 +96,15 @@ void RackScene::onHoverKey(EventHoverKey &e) {
global_ui->app.gRackWidget->saveAsDialog();
e.consumed = true;
}
} break;
case GLFW_KEY_ENTER:
case GLFW_KEY_KP_ENTER: {
break;
case LGLW_VKEY_RETURN/*GLFW_KEY_ENTER*/:
// case GLFW_KEY_KP_ENTER:
appModuleBrowserCreate();
e.consumed = true;
} break;
case GLFW_KEY_F11: {
break;
case LGLW_VKEY_F11/*GLFW_KEY_F11*/:
windowSetFullScreen(!windowGetFullScreen());
}
break;
}
}
}


+ 19
- 26
src/main.cpp View File

@@ -21,16 +21,12 @@
#include "global.hpp"
#include "global_ui.hpp"

// #if defined(YAC_WIN32) && defined(VST2_REPARENT_WINDOW_HACK)
// #include <windows.h>
// extern "C" extern HWND __hack__glfwGetHWND (GLFWwindow *window);
// #endif


using namespace rack;

/*__declspec(dllexport) won't link*/ YAC_TLS rack::Global *rack::global;
/*__declspec(dllexport) won't link*/ YAC_TLS rack::GlobalUI *rack::global_ui;
YAC_TLS rack::Global *rack::global;
YAC_TLS rack::GlobalUI *rack::global_ui;


#ifdef USE_VST2
int vst2_init(int argc, char* argv[]) {
@@ -74,12 +70,13 @@ int vst2_init(int argc, char* argv[]) {
bridgeInit();
#endif // USE_VST2
vstmidiInit();
keyboardInit();
#ifndef USE_VST2
keyboardInit();
gamepadInit();
windowInit(); // must be done in vst2 ui thread
#endif // USE_VST2
windowInit();
appInit(devMode);
settingsLoad(assetLocal("settings.json"), false/*bWindowSizeOnly*/);

#if 0
if (patchFile.empty()) {
@@ -108,20 +105,6 @@ int vst2_init(int argc, char* argv[]) {
return 0;
}

void vst2_editor_create(void) {
windowInit();
settingsLoad(assetLocal("settings.json"));
glfwHideWindow(rack::global_ui->window.gWindow);
}

void vst2_editor_destroy(void) {
windowDestroy();
}

void vst2_editor_loop(void) {
windowRun();
}

void vst2_exit(void) {
// Destroy namespaces
// // engineStop();
@@ -129,26 +112,36 @@ void vst2_exit(void) {
// global_ui->app.gRackWidget->savePatch(assetLocal("autosave.vcv"));
// settingsSave(assetLocal("settings.json"));
printf("xxx vst2_exit 2\n");
#if 0 // (note) setting this to 1 seems to work fine (and it fixes the obvious mem leaks)

#if 1
lglw_glcontext_push(global_ui->window.lglw);
appDestroy();
lglw_glcontext_pop(global_ui->window.lglw);
#endif

printf("xxx vst2_exit 3\n");
windowDestroy();

#if 0
#ifndef USE_VST2
windowDestroy();
bridgeDestroy();
#endif // USE_VST2
printf("xxx vst2_exit 4\n");
engineDestroy();
printf("xxx vst2_exit 5\n");
#endif

printf("xxx vst2_exit destroy midi\n");
midiDestroy();
printf("xxx vst2_exit destroy midi done\n");
#if 0

#if 1
printf("xxx vst2_exit 6\n");
pluginDestroy();
printf("xxx vst2_exit 7\n");
loggerDestroy();
#endif

printf("xxx vst2_exit 8 (leave)\n");
}



+ 12
- 3
src/settings.cpp View File

@@ -9,6 +9,8 @@
#include "global_ui.hpp"


extern void vst2_window_size_set (int _width, int _height);

namespace rack {


@@ -76,7 +78,7 @@ static json_t *settingsToJson() {
return rootJ;
}

static void settingsFromJson(json_t *rootJ) {
static void settingsFromJson(json_t *rootJ, bool bWindowSizeOnly) {
// token
json_t *tokenJ = json_object_get(rootJ, "token");
if (tokenJ)
@@ -89,6 +91,13 @@ static void settingsFromJson(json_t *rootJ) {
json_unpack(windowSizeJ, "[F, F]", &width, &height);
#ifdef USE_VST2
// (note) calling windowSetWindowSize() causes the window to be not resizable initially, and when it is moved, it reverts to a default size (TBI)
if(bWindowSizeOnly)
{
global_ui->window.windowWidth = int(width);
global_ui->window.windowHeight = int(height);
vst2_window_size_set((int)width, (int)height);
return;
}
#else
windowSetWindowSize(Vec(width, height));
#endif // USE_VST2
@@ -181,7 +190,7 @@ void settingsSave(std::string filename) {
}
}

void settingsLoad(std::string filename) {
void settingsLoad(std::string filename, bool bWindowSizeOnly) {
info("Loading settings %s", filename.c_str());
FILE *file = fopen(filename.c_str(), "r");
if (!file)
@@ -190,7 +199,7 @@ void settingsLoad(std::string filename) {
json_error_t error;
json_t *rootJ = json_loadf(file, 0, &error);
if (rootJ) {
settingsFromJson(rootJ);
settingsFromJson(rootJ, bWindowSizeOnly);
json_decref(rootJ);
}
else {


+ 4
- 2
src/ui/MenuOverlay.cpp View File

@@ -27,11 +27,13 @@ void MenuOverlay::onMouseDown(EventMouseDown &e) {

void MenuOverlay::onHoverKey(EventHoverKey &e) {
switch (e.key) {
case GLFW_KEY_ESCAPE: {
default:
break;

case LGLW_VKEY_ESCAPE/*GLFW_KEY_ESCAPE*/:
global_ui->ui.gScene->setOverlay(NULL);
e.consumed = true;
return;
} break;
}

if (!e.consumed) {


+ 2
- 1
src/ui/ScrollWidget.cpp View File

@@ -111,6 +111,7 @@ void ScrollWidget::step() {

void ScrollWidget::onMouseMove(EventMouseMove &e) {
// Scroll with arrow keys
#if 0
if (!global_ui->widgets.gFocusedWidget) {
float arrowSpeed = 30.0;
if (windowIsShiftPressed() && windowIsModPressed())
@@ -133,7 +134,7 @@ void ScrollWidget::onMouseMove(EventMouseMove &e) {
offset.y += arrowSpeed;
}
}
#endif
Widget::onMouseMove(e);
}



+ 40
- 22
src/ui/TextField.cpp View File

@@ -63,7 +63,8 @@ void TextField::onText(EventText &e) {

void TextField::onKey(EventKey &e) {
switch (e.key) {
case GLFW_KEY_BACKSPACE: {

case LGLW_VKEY_BACKSPACE/*GLFW_KEY_BACKSPACE*/:
if (cursor == selection) {
cursor--;
if (cursor >= 0) {
@@ -78,8 +79,9 @@ void TextField::onKey(EventKey &e) {
onTextChange();
cursor = selection = begin;
}
} break;
case GLFW_KEY_DELETE: {
break;

case LGLW_VKEY_DELETE/*GLFW_KEY_DELETE*/:
if (cursor == selection) {
text.erase(cursor, 1);
onTextChange();
@@ -90,8 +92,9 @@ void TextField::onKey(EventKey &e) {
onTextChange();
cursor = selection = begin;
}
} break;
case GLFW_KEY_LEFT: {
break;

case LGLW_VKEY_LEFT/*GLFW_KEY_LEFT*/:
if (windowIsModPressed()) {
while (--cursor > 0) {
if (text[cursor] == ' ')
@@ -104,8 +107,9 @@ void TextField::onKey(EventKey &e) {
if (!windowIsShiftPressed()) {
selection = cursor;
}
} break;
case GLFW_KEY_RIGHT: {
break;

case LGLW_VKEY_RIGHT/*GLFW_KEY_RIGHT*/:
if (windowIsModPressed()) {
while (++cursor < (int) text.size()) {
if (text[cursor] == ' ')
@@ -118,21 +122,28 @@ void TextField::onKey(EventKey &e) {
if (!windowIsShiftPressed()) {
selection = cursor;
}
} break;
case GLFW_KEY_HOME: {
break;

case LGLW_VKEY_HOME/*GLFW_KEY_HOME*/:
selection = cursor = 0;
} break;
case GLFW_KEY_END: {
break;

case LGLW_VKEY_END/*GLFW_KEY_END*/:
selection = cursor = text.size();
} break;
case GLFW_KEY_V: {
break;

case 'v'/*GLFW_KEY_V*/:
#if 0
if (windowIsModPressed()) {
const char *newText = glfwGetClipboardString(global_ui->window.gWindow);
if (newText)
insertText(newText);
}
} break;
case GLFW_KEY_X: {
#endif
break;

case 'x'/*GLFW_KEY_X*/:
#if 0
if (windowIsModPressed()) {
if (cursor != selection) {
int begin = min(cursor, selection);
@@ -141,8 +152,11 @@ void TextField::onKey(EventKey &e) {
insertText("");
}
}
} break;
case GLFW_KEY_C: {
#endif
break;

case 'c'/*GLFW_KEY_C*/:
#if 0
if (windowIsModPressed()) {
if (cursor != selection) {
int begin = min(cursor, selection);
@@ -150,14 +164,18 @@ void TextField::onKey(EventKey &e) {
glfwSetClipboardString(global_ui->window.gWindow, selectedText.c_str());
}
}
} break;
case GLFW_KEY_A: {
#endif
break;

case 'a'/*GLFW_KEY_A*/:
if (windowIsModPressed()) {
selection = 0;
cursor = text.size();
}
} break;
case GLFW_KEY_ENTER: {
break;

case LGLW_VKEY_RETURN/*GLFW_KEY_ENTER*/:
// printf("xxx TextField::onKey: RETURN\n");
if (multiline) {
insertText("\n");
}
@@ -165,7 +183,7 @@ void TextField::onKey(EventKey &e) {
EventAction e;
onAction(e);
}
} break;
break;
}

cursor = clamp(cursor, 0, (int) text.size());


+ 116
- 424
src/vst2_main.cpp View File

@@ -17,7 +17,7 @@
///
/// created: 25Jun2018
/// changed: 26Jun2018, 27Jun2018, 29Jun2018, 01Jul2018, 02Jul2018, 06Jul2018, 13Jul2018
/// 26Jul2018
/// 26Jul2018, 04Aug2018, 05Aug2018
///
///
///
@@ -45,11 +45,16 @@ YAC_Host *yac_host; // not actually used, just to satisfy the linker
#include "global.hpp"
#include "global_ui.hpp"

#define EDITWIN_X 0
#define EDITWIN_Y 0
#define EDITWIN_W 1200
#define EDITWIN_H 800

extern int vst2_init (int argc, char* argv[]);
extern void vst2_exit (void);
extern void vst2_editor_create (void);
extern void vst2_editor_loop (void);
extern void vst2_editor_destroy (void);
namespace rack {
extern void vst2_editor_redraw (void);
}
extern void vst2_set_samplerate (sF32 _rate);
extern void vst2_engine_process (float *const*_in, float **_out, unsigned int _numFrames);
extern void vst2_process_midi_input_event (sU8 _a, sU8 _b, sU8 _c);
@@ -59,6 +64,10 @@ extern float vst2_get_param (int uniqueParamId);
extern void vst2_get_param_name (int uniqueParamId, char *s, int sMaxLen);
extern void vst2_set_shared_plugin_tls_globals (void);

namespace rack {
extern void settingsLoad(std::string filename, bool bWindowSizeOnly);
}


#include "../include/window.hpp"
#include "../dep/include/osdialog.h"
@@ -76,9 +85,6 @@ extern void vst2_set_shared_plugin_tls_globals (void);

EXTERN_C IMAGE_DOS_HEADER __ImageBase;

extern "C" extern HWND g_glfw_vst2_parent_hwnd; // read by modified version of GLFW (see glfw/src/win32_window.c)
extern "C" extern HWND __hack__glfwGetHWND (GLFWwindow *window);


// Windows:
#define VST_EXPORT extern "C" __declspec(dllexport)
@@ -378,7 +384,7 @@ const VstInt32 PLUGIN_VERSION = 1000;
*/
class VSTPluginWrapper {
public:
static const uint32_t MIN_SAMPLE_RATE = 8192u; // (note) cannot be float in C++
static const uint32_t MIN_SAMPLE_RATE = 8192u;
static const uint32_t MAX_SAMPLE_RATE = 384000u;
static const uint32_t MIN_BLOCK_SIZE = 64u;
static const uint32_t MAX_BLOCK_SIZE = 65536u;
@@ -404,38 +410,13 @@ public:
bool b_processing; // true=generate output, false=suspended

ERect editor_rect;
sBool b_editor_open;

char *last_program_chunk_str;

static sSI instance_count;
sSI instance_id;

// // sU8 glfw_internal[64*1024]; // far larger than it needs to be, must be >=sizeof(_GLFWlibrary)

public:
#ifdef YAC_LINUX
pthread_t pthread_id;
#endif
#ifdef YAC_WIN32
HANDLE hThread;
DWORD dwThreadId;
#endif
sBool b_thread_created;
volatile sBool b_thread_started;
volatile sBool b_thread_running;
volatile sBool b_thread_done;

volatile sBool b_queued_open_editor;
volatile sBool b_queued_destroy_editor;
volatile sBool b_editor_open;
volatile sBool b_editor_created;

struct {
volatile uint32_t size;
volatile uint8_t *addr;
volatile bool b_ret;
} queued_load_patch;

sF32 tmp_input_buffers[NUM_INPUTS * MAX_BLOCK_SIZE];

public:
@@ -454,13 +435,9 @@ public:
return &_vstPlugin;
}

void startUIThread (void);
void stopUIThread (void);

void setGlobals(void) {
rack::global = &rack_global;
rack::global_ui = &rack_global_ui;
// // glfwSetInstance((void*)glfw_internal);
}

sSI openEffect(void) {
@@ -468,16 +445,6 @@ public:
printf("xxx vstrack_plugin::openEffect\n");

// (todo) use mutex

if(1 == instance_count)
{
int err = glfwInit();
if (err != GLFW_TRUE) {
osdialog_message(OSDIALOG_ERROR, OSDIALOG_OK, "Could not initialize GLFW.");
return 0;
}
}

instance_id = instance_count;
printf("xxx vstrack_plugin::openEffect: instance_id=%d\n", instance_id);

@@ -494,7 +461,6 @@ public:
rack_global.init();
rack_global_ui.init();
rack::global->vst2.last_seen_instance_count = instance_count;
// // ::memset((void*)glfw_internal, 0, sizeof(glfw_internal));

char oldCWD[1024];
char dllnameraw[1024];
@@ -518,24 +484,56 @@ public:
(void)vst2_init(argc, argv);
printf("xxx vstrack_plugin::openEffect: vst2_init() done\n");

queued_load_patch.size = 0u;
queued_load_patch.addr = NULL;
queued_load_patch.b_ret = false;

startUIThread();
vst2_set_shared_plugin_tls_globals();

printf("xxx vstrack_plugin::openEffect: restore cwd=\"%s\"\n", oldCWD);
::SetCurrentDirectory(oldCWD);

setSampleRate(sample_rate);

b_open = 1;
b_open = true;
b_editor_open = false;

printf("xxx vstrack_plugin::openEffect: LEAVE\n");
return 1;
}

void setWindowSize(int _width, int _height) {
if(_width < 640)
_width = 640;
if(_height < 480)
_height = 480;

editor_rect.right = EDITWIN_X + _width;
editor_rect.bottom = EDITWIN_Y + _height;
}

void openEditor(void *_hwnd) {
printf("xxx vstrack_plugin: openEditor() parentHWND=%p\n", _hwnd);
setGlobals();
(void)lglw_window_open(rack_global_ui.window.lglw,
_hwnd,
0/*x*/, 0/*y*/,
(editor_rect.right - editor_rect.left),
(editor_rect.bottom - editor_rect.top)
);
b_editor_open = true;
}

void closeEditor(void) {
printf("xxx vstrack_plugin: closeEditor() b_editor_open=%d\n", b_editor_open);
if(b_editor_open)
{
setGlobals();
lglw_window_close(rack_global_ui.window.lglw);
b_editor_open = false;
}
}

void closeEffect(void) {

closeEditor();

// (todo) use mutex
printf("xxx vstrack_plugin::closeEffect: last_program_chunk_str=%p\n", last_program_chunk_str);
if(NULL != last_program_chunk_str)
@@ -548,32 +546,17 @@ public:

if(b_open)
{
b_open = 0;
b_open = false;

setGlobals();
rack::global->vst2.last_seen_instance_count = instance_count;

b_queued_destroy_editor = true;
rack::global_ui->vst2.b_close_window = 1;
while(b_queued_destroy_editor)
{
printf("[dbg] vstrack_plugin: wait until editor's been destroyed\n");
sleepMillisecs(100); // (todo) condition
}

stopUIThread();

printf("xxx vstrack_plugin: call vst2_exit()\n");

vst2_exit();

printf("xxx vstrack_plugin: vst2_exit() done\n");

if(1 == instance_count)
{
glfwTerminate();
}

#ifdef USE_CONSOLE
// FreeConsole();
#endif // USE_CONSOLE
@@ -581,54 +564,6 @@ public:

}

#ifdef YAC_WIN32
void openEditor(HWND _hwnd) {
//g_glfw_vst2_parent_hwnd = _hwnd;
g_glfw_vst2_parent_hwnd = 0;
#else
#error implement me (openEditor)
#endif
printf("xxx vstrack_plugin: openEditor()\n");
b_queued_open_editor = true;

#ifdef YAC_WIN32
rack::global_ui->vst2.parent_hwnd = (void*)_hwnd;
printf("xxx vstrack_plugin: DAW parent hwnd=%p\n", rack::global_ui->vst2.parent_hwnd);
#endif // YAC_WIN32

int iter = 0;
while(iter++ < 50)
{
if(b_editor_open)
break;
sleepMillisecs(100); // (todo) condition
}

if(100 == iter)
printf("xxx vstrack_plugin: failed to show editor after %d milliseconds!!\n", (iter*100));
else
printf("xxx vstrack_plugin: editor opened after %d milliseconds\n", (iter*100));
// // vst2_show_editor();
}

void hideEditor(void) {
printf("xxx vstrack_plugin: hideEditor() b_editor_open=%d\n", b_editor_open);
if(b_editor_open)
{
setGlobals();
rack::global_ui->vst2.b_hide_window = 1;
}
}

void closeEditor(void) {
printf("xxx vstrack_plugin: closeEditor() b_editor_open=%d\n", b_editor_open);
if(b_editor_open)
{
setGlobals();
rack::global_ui->vst2.b_close_window = 1;
}
}

void lockAudio(void) {
mtx_audio.lock();
}
@@ -686,7 +621,7 @@ public:
return 0;
}

sUI getProgramChunk(uint8_t **_addr) {
sUI getProgramChunk(uint8_t**_addr) {
setGlobals();
if(NULL != last_program_chunk_str)
{
@@ -696,61 +631,29 @@ public:
if(NULL != last_program_chunk_str)
{
*_addr = (uint8_t*)last_program_chunk_str;
return strlen(last_program_chunk_str) + 1/*ASCIIZ*/;
return (sUI)strlen(last_program_chunk_str) + 1/*ASCIIZ*/;
}
return 0;
}

bool setBankChunk(size_t _size, uint8_t*_addr) {
bool setBankChunk(size_t _size, uint8_t *_addr) {
bool r = false;
return r;
}

bool setProgramChunk_Async(size_t _size, uint8_t*_addr) {
bool r = false;
bool setProgramChunk(size_t _size, uint8_t *_addr) {
setGlobals();

if(NULL != _addr)
{
queued_load_patch.b_ret = false;
queued_load_patch.size = _size;
queued_load_patch.addr = _addr; // triggers loader in UI thread

int iter = 0;
for(;;)
{
if(NULL == queued_load_patch.addr)
{
queued_load_patch.b_ret = r;
break;
}
else if(++iter > 500)
{
printf("[---] vstrack_plugin:queueSetProgramChunk: timeout while waiting for UI thread.\n");
break;
}
sleepMillisecs(10);
}
}
return r;
}

void handleSetQueuedProgramChunk(void) {
if(NULL != queued_load_patch.addr)
{
setGlobals();
lockAudio();
lockAudio();
#if 0
printf("xxx vstrack_plugin:setProgramChunk: size=%u str=\n-------------------%s\n------------------\n", queued_load_patch.size, (const char*)queued_load_patch.addr);
#else
printf("xxx vstrack_plugin:setProgramChunk: size=%u\n", queued_load_patch.size);
printf("xxx vstrack_plugin:setProgramChunk: size=%u\n", _size);
#endif
bool r = rack::global_ui->app.gRackWidget->loadPatchFromString((const char*)queued_load_patch.addr);
printf("xxx vstrack_plugin:setProgramChunk: r=%d\n", r);
queued_load_patch.b_ret = r;
queued_load_patch.addr = NULL;
unlockAudio();
}
lglw_glcontext_push(rack::global_ui->window.lglw);
bool r = rack::global_ui->app.gRackWidget->loadPatchFromString((const char*)_addr);
rack::global_ui->ui.gScene->step(); // w/o this the patch is bypassed
lglw_glcontext_pop(rack::global_ui->window.lglw);
printf("xxx vstrack_plugin:setProgramChunk: r=%d\n", r);
unlockAudio();
return r;
}

#ifdef HAVE_WINDOWS
@@ -799,7 +702,7 @@ public:

if(0 != (timeInfo->flags & kVstPpqPosValid))
{
*_retSongPosPPQ = timeInfo->ppqPos;
*_retSongPosPPQ = (float)timeInfo->ppqPos;
}
}
}
@@ -816,171 +719,6 @@ private:
sSI VSTPluginWrapper::instance_count = 0;


#ifdef YAC_LINUX
static void *vst2_ui_thread_entry(VSTPluginWrapper *_wrapper) {
#elif defined(YAC_WIN32)
static DWORD WINAPI vst2_ui_thread_entry(VSTPluginWrapper *_wrapper) {
#endif

printf("xxx vstrack_plugin: UI thread started\n");
_wrapper->setGlobals();
printf("xxx vstrack_plugin<ui>: global=%p global_ui=%p\n", rack::global, rack::global_ui);

printf("xxx vstrack_plugin<ui>: call vst2_editor_create()\n");
_wrapper->lockAudio();
vst2_editor_create();
printf("xxx vstrack_plugin<ui>: vst2_editor_create() done\n");
_wrapper->b_editor_created = YAC_TRUE;
_wrapper->unlockAudio();

_wrapper->b_thread_started = YAC_TRUE;

vst2_set_shared_plugin_tls_globals();

while(_wrapper->b_thread_running || _wrapper->b_queued_destroy_editor || _wrapper->queued_load_patch.addr)
{
// printf("xxx vstrack_plugin<ui>: idle loop\n");
if(_wrapper->b_queued_open_editor && !_wrapper->b_editor_open)
{
if(!_wrapper->b_editor_created)
{
}

_wrapper->b_queued_open_editor = YAC_FALSE;

// Show previously hidden window
#if defined(YAC_WIN32) && defined(VST2_REPARENT_WINDOW_HACK)
#if 0
HWND glfwHWND = __hack__glfwGetHWND(rack::global_ui->window.gWindow);
::SetParent(glfwHWND,
(HWND)rack::global_ui->vst2.parent_hwnd
);
printf("xxx vstrack: SetParent(glfwHWND=%p, dawParentHWND=%p)\n", (void*)glfwHWND, rack::global_ui->vst2.parent_hwnd);
#endif
#endif // YAC_WIN32

glfwShowWindow(rack::global_ui->window.gWindow);

#ifdef VST2_REPARENT_WINDOW_HACK
// maximize window once it starts to receive events (see window.cpp)
rack::global_ui->vst2.b_queued_maximize_window = true;
#endif // VST2_REPARENT_WINDOW_HACK

_wrapper->b_editor_open = YAC_TRUE;

rack::global_ui->vst2.b_close_window = 0;
printf("xxx vstrack_plugin[%d]: entering editor_loop\n", _wrapper->instance_id);
vst2_editor_loop(); // sets b_editor_open=true and b_queued_open_editor=false (must be delayed until window is actually visible or window create/focus tracking will not work)
_wrapper->b_editor_open = YAC_FALSE;
printf("xxx vstrack_plugin[%d]: editor_loop finished\n", _wrapper->instance_id);
// if(!_wrapper->b_window_created)
// {
// ShowUIWindow();
// use metahost_onTimer for SDL.onTimer;
// b_window_created = true;

// trace "[dbg] eureka: entering eventloop 2";
// b_editor_open = true;
// UI.Run();
// }
}
else if(_wrapper->b_queued_destroy_editor)
{
printf("xxx vstrack<ui>: _wrapper->b_queued_destroy_editor is 1, b_editor_created=%d\n", _wrapper->b_editor_created);
if(_wrapper->b_editor_created)
{
#if 0
#if defined(YAC_WIN32) && defined(VST2_REPARENT_WINDOW_HACK)
::SetParent(__hack__glfwGetHWND(rack::global_ui->window.gWindow), NULL); // [bsp 04Jul2018] reparent hack (fix hang up when DAW editor is closed)
#endif // VST2_REPARENT_WINDOW_HACK
#endif
vst2_editor_destroy();
_wrapper->b_editor_created = YAC_FALSE;
}
_wrapper->b_queued_destroy_editor = YAC_FALSE;
}
else if(NULL != _wrapper->queued_load_patch.addr)
{
_wrapper->handleSetQueuedProgramChunk();
}
else
{
_wrapper->sleepMillisecs(100);
}
}

printf("xxx vstrack_plugin: UI thread finished\n");
_wrapper->b_thread_done = YAC_TRUE;
return 0;
}

void VSTPluginWrapper::startUIThread(void) {
b_queued_open_editor = false;
b_queued_destroy_editor = false;
b_editor_open = false;
b_editor_created = false;
queued_load_patch.b_ret = false;
queued_load_patch.size = 0u;
queued_load_patch.addr = NULL;

b_thread_created = YAC_FALSE;
b_thread_running = YAC_TRUE;
b_thread_done = YAC_FALSE;

#ifdef YAC_LINUX
b_thread_created = (pthread_create( &pthread_id, NULL, vst2_ui_thread_entry, (void*) this ) == 0);

if(b_thread_created)
{
/* wait for lwp_id field to become valid */
while(!b_thread_started)
{
pthread_yield();
}
}
#endif // YAC_POSIX

#ifdef YAC_WIN32
hThread = CreateThread(
NULL, // default security attributes
0, // use default stack size
(LPTHREAD_START_ROUTINE)vst2_ui_thread_entry,// thread function
(LPVOID)this, // argument to thread function
0, // use default creation flags
&dwThreadId); // returns the thread identifier
b_thread_created = (hThread != NULL);

while(!b_thread_started)
sleepMillisecs(10); // (todo) use condition
#endif
}

void VSTPluginWrapper::stopUIThread(void) {
b_thread_running = YAC_FALSE;

while(!b_thread_done)
{
sleepMillisecs(10); // (todo) use condition
}

#ifdef YAC_LINUX
///pthread_join( pthread_id, NULL);
pthread_detach( pthread_id );
pthread_cancel( pthread_id );
pthread_id = 0;
#endif
#ifdef YAC_WIN32
SuspendThread( hThread );
TerminateThread( hThread, 10 ); // 10 = exit code
WaitForMultipleObjects(1, &hThread, TRUE, 5000 /*INFINITE*/); // wait max. 5sec
CloseHandle(hThread);
hThread = NULL;
#endif

}


/*******************************************
* Callbacks: Host -> Plugin
@@ -1022,7 +760,6 @@ void VSTPluginProcessReplacingFloat32(VSTPlugin *vstPlugin,
//printf("xxx vstrack_plugin: VSTPluginProcessReplacingFloat32: wrapper=%p\n", wrapper);

sUI chIdx;
sUI i;

// (note) Cubase (tested with 9.5.30) uses the same buffer(s) for both input&output
// => back up the inputs before clearing the outputs
@@ -1061,46 +798,6 @@ void VSTPluginProcessReplacingFloat32(VSTPlugin *vstPlugin,
}


#if 0
/**
* This is the callback that will be called to process the samples in the case of double precision. This is where the
* meat of the logic happens!
*
* @param vstPlugin the object returned by VSTPluginMain
* @param inputs an array of array of input samples. You read from it. First dimension is for inputs, second dimension is for samples: inputs[numInputs][sampleFrames]
* @param outputs an array of array of output samples. You write to it. First dimension is for outputs, second dimension is for samples: outputs[numOuputs][sampleFrames]
* @param sampleFrames the number of samples (second dimension in both arrays)
*/
void VSTPluginProcessReplacingFloat64(VSTPlugin *vstPlugin,
double **inputs,
double **outputs,
VstInt32 sampleFrames
) {
// we can get a hold to our C++ class since we stored it in the `object` field (see constructor)
VSTPluginWrapper *wrapper = static_cast<VSTPluginWrapper *>(vstPlugin->object);

wrapper->lockAudio();

if(wrapper->b_processing)
{
// code speaks for itself: for each input (2 when stereo input), iterating over every sample and writing the
// result in the outputs array after multiplying by 0.5 (which result in a 3dB attenuation of the sound)
for(int i = 0; i < wrapper->getNumInputs(); i++)
{
auto inputSamples = inputs[i];
auto outputSamples = outputs[i];

for(int j = 0; j < sampleFrames; j++)
{
outputSamples[j] = inputSamples[j] * 0.5;
}
}
}

wrapper->unlockAudio();
}
#endif // 0


/**
* This is the plugin called by the host to communicate with the plugin, mainly to request information (like the
@@ -1297,14 +994,14 @@ VstIntPtr VSTPluginDispatcher(VSTPlugin *vstPlugin,
// ptr: buffer address
// r: buffer size
printf("xxx effGetChunk index=%d ptr=%p\n", index, ptr);
// if(0 == index)
// {
// r = wrapper->getBankChunk((uint8_t**)ptr);
// }
// else
// {
// // if(0 == index)
// // {
// // r = wrapper->getBankChunk((uint8_t**)ptr);
// // }
// // else
// // {
r = wrapper->getProgramChunk((uint8_t**)ptr);
// }
// // }
break;

case effSetChunk:
@@ -1313,14 +1010,14 @@ VstIntPtr VSTPluginDispatcher(VSTPlugin *vstPlugin,
// ptr: buffer address
// r: 1
printf("xxx effSetChunk index=%d size=%lld ptr=%p\n", index, value, ptr);
// if(0 == index)
// {
// r = wrapper->setBankChunk(size_t(value), (uint8_t*)ptr) ? 1 : 0;
// }
// else
// {
r = wrapper->setProgramChunk_Async(size_t(value), (uint8_t*)ptr) ? 1 : 0;
// }
// // if(0 == index)
// // {
// // r = wrapper->setBankChunk(size_t(value), (uint8_t*)ptr) ? 1 : 0;
// // }
// // else
// // {
r = wrapper->setProgramChunk(size_t(value), (uint8_t*)ptr) ? 1 : 0;
// // }
break;

case effShellGetNextPlugin:
@@ -1431,6 +1128,19 @@ VstIntPtr VSTPluginDispatcher(VSTPlugin *vstPlugin,
#endif

case effEditIdle:
wrapper->setGlobals();
if(lglw_window_is_visible(rack::global_ui->window.lglw))
{
vst2_set_shared_plugin_tls_globals();

// Save DAW GL context and bind our own
lglw_glcontext_push(rack::global_ui->window.lglw);

rack::vst2_editor_redraw();

// Restore the DAW's GL context
lglw_glcontext_pop(rack::global_ui->window.lglw);
}
break;

case effEditGetRect:
@@ -1439,16 +1149,6 @@ VstIntPtr VSTPluginDispatcher(VSTPlugin *vstPlugin,
if(NULL != ptr) // yeah, this should never be NULL
{
// ...
#define EDITWIN_X 20
#define EDITWIN_Y 20
// #define EDITWIN_W 1200
// #define EDITWIN_H 800
#define EDITWIN_W 60
#define EDITWIN_H 21
wrapper->editor_rect.left = EDITWIN_X;
wrapper->editor_rect.top = EDITWIN_Y;
wrapper->editor_rect.right = EDITWIN_X + EDITWIN_W;
wrapper->editor_rect.bottom = EDITWIN_Y + EDITWIN_H;
*(void**)ptr = (void*) &wrapper->editor_rect;
r = 1;
}
@@ -1468,16 +1168,13 @@ VstIntPtr VSTPluginDispatcher(VSTPlugin *vstPlugin,
case effEditOpen:
// Show editor window
// ptr: native window handle (hWnd on Windows)
#ifdef YAC_WIN32
wrapper->openEditor((HWND)ptr);
#endif
wrapper->openEditor(ptr);
r = 1;
break;

case effEditClose:
// Hide editor window
// // wrapper->closeEditor();
wrapper->hideEditor();
// Close editor window
wrapper->closeEditor();
r = 1;
break;

@@ -1563,7 +1260,7 @@ VSTPluginWrapper::VSTPluginWrapper(audioMasterCallback vstHostCallback,
effFlagsIsSynth |
#endif
effFlagsCanReplacing |
(effFlagsCanDoubleReplacing & 0) |
// (effFlagsCanDoubleReplacing & 0) |
effFlagsProgramChunks |
effFlagsHasEditor ;

@@ -1592,8 +1289,12 @@ VSTPluginWrapper::VSTPluginWrapper(audioMasterCallback vstHostCallback,
last_program_chunk_str = NULL;

b_open = false;
b_editor_open = false;

// script_context = NULL;
editor_rect.left = EDITWIN_X;
editor_rect.top = EDITWIN_Y;
editor_rect.right = EDITWIN_X + EDITWIN_W;
editor_rect.bottom = EDITWIN_Y + EDITWIN_H;
}

/**
@@ -1615,9 +1316,9 @@ void vst2_unlock_midi_device() {
rack::global->vst2.wrapper->mtx_mididev.unlock();
}

void vst2_handle_queued_set_program_chunk(void) {
(void)rack::global->vst2.wrapper->handleSetQueuedProgramChunk();
}
// void vst2_handle_queued_set_program_chunk(void) {
// (void)rack::global->vst2.wrapper->handleSetQueuedProgramChunk();
// }

void vst2_handle_ui_param(int uniqueParamId, float normValue) {
// Called by engineSetParam()
@@ -1629,24 +1330,15 @@ void vst2_get_timing_info(int *_retPlaying, float *_retBPM, float *_retSongPosPP
rack::global->vst2.wrapper->getTimingInfo(_retPlaying, _retBPM, _retSongPosPPQ);
}

#ifdef VST2_REPARENT_WINDOW_HACK
#ifdef YAC_WIN32
void vst2_maximize_reparented_window(void) {
#if 0
HWND glfwHWND = __hack__glfwGetHWND(rack::global_ui->window.gWindow);
HWND parentHWND = (HWND)rack::global_ui->vst2.parent_hwnd;
printf("xxx vstrack_plugin:vst2_maximize_reparented_window: hwnd=%p\n", (void*)glfwHWND);
RECT rect;
(void)::GetClientRect(parentHWND, &rect);
///(void)::AdjustWindowRect(..)
printf("xxx vstrack_plugin:vst2_maximize_reparented_window: new size=(%d; %d)\n", rect.right-rect.left, rect.bottom-rect.top);
::MoveWindow(glfwHWND, 0, 0, rect.right-rect.left, rect.bottom-rect.top, TRUE/*bRepaint*/);
// ::ShowWindow(glfwHWND, SW_MAXIMIZE);
// // ::ShowWindow(glfwHWND, SW_SHOWMAXIMIZED);
#endif // 0
void vst2_set_globals(void *_wrapper) {
VSTPluginWrapper *wrapper = (VSTPluginWrapper *)_wrapper;
wrapper->setGlobals();
}
#endif // YAC_WIN32
#endif // VST2_REPARENT_WINDOW_HACK

void vst2_window_size_set(int _width, int _height) {
rack::global->vst2.wrapper->setWindowSize(_width, _height);
}


/**
* Implementation of the main entry point of the plugin


+ 720
- 456
src/window.cpp
File diff suppressed because it is too large
View File


+ 8
- 0
vst2_bin/CHANGELOG_VST.txt View File

@@ -1,3 +1,11 @@
** August 5th, 2018
- replace GLFW window / input event handling by LGLW library
=> no more "dummy" windows
=> automation should now work in all DAWs
=> effect and instrument plugins may now be used in the same DAW project
- window size can now be configured via settings.json "windowSize" property

** July 26th, 2018
- fix effect processing in Cubase 9.5.30



+ 4
- 4
vst2_bin/README_vst2.txt View File

@@ -1,5 +1,5 @@
VeeSeeVST Rack VST 2.4 Plugin -- July 26th, 2018
================================================
VeeSeeVST Rack VST 2.4 Plugin -- August 5th, 2018
=================================================

!!!------------------------------------------------------------------------------
!!! ***** THIS IS NOT AN OFFICIAL VCV RACK RELEASE ***** !!!
@@ -16,8 +16,6 @@ This is a quick'n'dirty adaption of VCV Rack 0.6.1 for the VST2 format.
+ supports VST program chunks (=> patches are saved with the DAW's project file or as .fxp files)
+ supports VST host timing (audioMasterGetTime / kVstTempoValid / kVstTransportPlaying, see Core.MIDI-1 module)
+ supports VST parameters (send / recv)
- does not support plugin DLLs due to VCV Rack's architecture which prevents this when it is run as a plugin itself
- future releases will contain additional (open source) add-ons modules

Here's a demo video of it: https://vimeo.com/277703414

@@ -25,6 +23,8 @@ Tested in
- Eureka (my own work-in-progress VST host)
- Cockos Reaper
- Propellerhead Reason 10
- Steinberg Cubase Pro 9.5.30
- LMMS 1.2.0-rc6

The VST2 plugin includes the following add-on modules:
- Alikins.IdleSwitch


+ 64
- 80
vst2_bin/log.txt View File

@@ -1,6 +1,6 @@
[0.000 info src/main.cpp:63] VeeSeeVST Rack 0.6.1
[0.000 info src/main.cpp:66] Global directory: f:\git\VeeSeeVSTRack\vst2_bin\/
[0.000 info src/main.cpp:67] Local directory: f:\git\VeeSeeVSTRack\vst2_bin\/
[0.000 info src/main.cpp:59] VeeSeeVST Rack 0.6.1
[0.000 info src/main.cpp:62] Global directory: F:\git\VeeSeeVSTRack\vst2_bin\/
[0.000 info src/main.cpp:63] Local directory: F:\git\VeeSeeVSTRack\vst2_bin\/
[0.000 info src/plugin.cpp:673] vcvrack: Loaded static plugin Alikins 0.6.1
[0.000 info src/plugin.cpp:673] vcvrack: Loaded static plugin AS 0.6.1
[0.000 info src/plugin.cpp:673] vcvrack: Loaded static plugin AudibleInstruments 0.6.1
@@ -22,12 +22,12 @@
[0.001 info src/plugin.cpp:673] vcvrack: Loaded static plugin Koralfx-Modules 0.6.1
[0.001 info src/plugin.cpp:673] vcvrack: Loaded static plugin LindenbergResearch 0.6.1
[0.001 info src/plugin.cpp:673] vcvrack: Loaded static plugin LOGinstruments 0.6.1
[0.001 info src/plugin.cpp:673] vcvrack: Loaded static plugin ML_modules 0.6.1
[0.001 info src/plugin.cpp:673] vcvrack: Loaded static plugin moDllz 0.6.1
[0.001 info src/plugin.cpp:673] vcvrack: Loaded static plugin modular80 0.6.1
[0.001 info src/plugin.cpp:673] vcvrack: Loaded static plugin mscHack 0.6.1
[0.001 info src/plugin.cpp:673] vcvrack: Loaded static plugin mtsch-plugins 0.6.1
[0.001 info src/plugin.cpp:673] vcvrack: Loaded static plugin NauModular 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin ML_modules 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin moDllz 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin modular80 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin mscHack 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin mtsch-plugins 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin NauModular 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin Ohmer 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin Qwelk 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin RJModules 0.6.1
@@ -40,74 +40,58 @@
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin trowaSoft 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin unless_modules 0.6.1
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin Valley 0.6.1
[0.002 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Alikins/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/AS/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/AudibleInstruments/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/BaconMusic/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Befaco/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Bidoo/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Bogaudio/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/BOKONTEPByteBeatMachine/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/cf/plugin.dll does not exist
[0.002 info src/plugin.cpp:155] Loaded plugin dBiz 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll
[0.002 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/DHE-Modules/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/DrumKit/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/ErraticInstruments/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/ESeries/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/FrozenWasteland/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Fundamental/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Gratrix/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/HetrickCV/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/huaba/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/JW-Modules/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Koralfx-Modules/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/LindenbergResearch/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/LOGinstruments/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/ML_modules/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/moDllz/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/modular80/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/mscHack/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/mtsch-plugins/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/NauModular/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Ohmer/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Qwelk/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/RJModules/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/SerialRacker/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/SonusModular/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Southpole-parasites/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/squinkylabs-plug1/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/SubmarineFree/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template/plugin.dll does not exist
[0.003 info src/plugin.cpp:155] Loaded plugin Template_shared 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/trowaSoft/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/unless_modules/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Valley/plugin.dll does not exist
[0.003 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_146097_cc.svg
[0.003 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_31859_cc.svg
[0.004 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343816_cc.svg
[0.004 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343811_cc.svg
[0.004 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1084369_cc.svg
[0.004 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1745061_cc.svg
[0.004 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1240789_cc.svg
[0.004 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_305536_cc.svg
[0.004 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_468341_cc.svg
[0.186 info src/window.cpp:711] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/DejaVuSans.ttf
[0.187 info src/settings.cpp:185] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json
[0.191 info src/app/RackWidget.cpp:158] Saving patch to string
[0.288 info src/app/RackWidget.cpp:196] Loading patch from string
[0.290 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/MIDIToCVInterface.svg
[0.290 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/ScrewSilver.svg
[0.290 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ301M.svg
[0.290 info src/window.cpp:711] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/ShareTechMono-Regular.ttf
[0.291 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/ADSR.svg
[0.291 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundLargeBlackKnob.svg
[0.292 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCO-1.svg
[0.292 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/CKSS_0.svg
[0.292 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/CKSS_1.svg
[0.292 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundHugeBlackKnob.svg
[0.293 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCA.svg
[0.294 info src/window.cpp:764] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/AudioInterface.svg
[61.404 info src/app/RackWidget.cpp:158] Saving patch to string
[62.652 info src/app/RackWidget.cpp:158] Saving patch to string
[65.283 info src/app/RackWidget.cpp:158] Saving patch to string
[72.333 info src/app/RackWidget.cpp:158] Saving patch to string
[0.002 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Alikins/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/AS/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/AudibleInstruments/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/BaconMusic/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Befaco/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Bidoo/plugin.dll does not exist
[0.002 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Bogaudio/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/BOKONTEPByteBeatMachine/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/cf/plugin.dll does not exist
[0.003 info src/plugin.cpp:155] Loaded plugin dBiz 0.6.1 from F:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll
[0.003 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/DHE-Modules/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/DrumKit/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/ErraticInstruments/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/ESeries/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/FrozenWasteland/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Fundamental/plugin.dll does not exist
[0.003 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Gratrix/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/HetrickCV/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/huaba/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/JW-Modules/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Koralfx-Modules/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/LindenbergResearch/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/LOGinstruments/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/ML_modules/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/moDllz/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/modular80/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/mscHack/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/mtsch-plugins/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/NauModular/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Ohmer/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Qwelk/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/RJModules/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/SerialRacker/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/SonusModular/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Southpole-parasites/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/squinkylabs-plug1/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/SubmarineFree/plugin.dll does not exist
[0.004 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template/plugin.dll does not exist
[0.005 info src/plugin.cpp:155] Loaded plugin Template_shared 0.6.1 from F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll
[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/trowaSoft/plugin.dll does not exist
[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/unless_modules/plugin.dll does not exist
[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Valley/plugin.dll does not exist
[0.005 info src/settings.cpp:194] Loading settings F:\git\VeeSeeVSTRack\vst2_bin\/settings.json
[0.030 info src/window.cpp:973] Loaded font F:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/DejaVuSans.ttf
[0.030 info src/window.cpp:1028] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_146097_cc.svg
[0.030 info src/window.cpp:1028] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_31859_cc.svg
[0.031 info src/window.cpp:1028] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343816_cc.svg
[0.031 info src/window.cpp:1028] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343811_cc.svg
[0.031 info src/window.cpp:1028] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1084369_cc.svg
[0.031 info src/window.cpp:1028] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1745061_cc.svg
[0.031 info src/window.cpp:1028] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1240789_cc.svg
[0.031 info src/window.cpp:1028] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_305536_cc.svg
[0.031 info src/window.cpp:1028] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_468341_cc.svg
[0.031 info src/settings.cpp:194] Loading settings F:\git\VeeSeeVSTRack\vst2_bin\/settings.json
[0.032 info src/app/RackWidget.cpp:158] Saving patch to string

BIN
vst2_bin/plugins/Template_shared/plugin.dll View File


BIN
vst2_bin/plugins/dBiz/plugin.dll View File


+ 2
- 2
vst2_bin/settings.json View File

@@ -2,14 +2,14 @@
"token": "",
"windowSize": [
1240.0,
810.0
820.0
],
"windowPos": [
60.0,
83.0
],
"wireOpacity": 50.0,
"wireTension": 1.0,
"wireTension": 0.97,
"zoom": 1.0,
"allowCursorLock": true,
"sampleRate": 44100.0,


BIN
vst2_bin/veeseevstrack_instr.dll__ View File


+ 1
- 1
vst2_common.mk View File

@@ -3,7 +3,7 @@
#
#

EXTRAFLAGS+= -DVERSION=0.6.1 -D_USE_MATH_DEFINES -Iinclude/ -Idep/include -DUSE_VST2
EXTRAFLAGS+= -DVERSION=0.6.1 -D_USE_MATH_DEFINES -Iinclude/ -Idep/include -Idep/ -DUSE_VST2

include vst2_common_msvc_pre.mk



+ 2
- 1
vst2_common_msvc_pre.mk View File

@@ -10,6 +10,7 @@ else
EXTRALIBS+= -LIBPATH:dep/lib/msvc/x86
endif

EXTRALIBS+= libspeexdsp.lib glew.lib glfw.lib opengl32.lib gdi32.lib user32.lib kernel32.lib Comdlg32.lib Shell32.lib ws2_32.lib winmm.lib
EXTRALIBS+= libspeexdsp.lib glew.lib opengl32.lib gdi32.lib user32.lib kernel32.lib Comdlg32.lib Shell32.lib ws2_32.lib winmm.lib
#glfw.lib

plugin_lib = $(PLUGIN_DIR)/$(1)/$(1).lib

Loading…
Cancel
Save