@@ -27,7 +27,7 @@ Tested in | |||||
# Downloads | # Downloads | ||||
The current release can be found in the [vst2_bin/](vst2_bin/) folder. | The current release can be found in the [vst2_bin/](vst2_bin/) folder. | ||||
Here's a snapshot of it: [veeseevstrack_0_6_1_win64_bin-06Aug2018.7z](dist/veeseevstrack_0_6_1_win64_bin-06Aug2018.7z) (64bit) | |||||
Here's a snapshot of it: [veeseevstrack_0_6_1_win64_bin-07Aug2018.7z](dist/veeseevstrack_0_6_1_win64_bin-07Aug2018.7z) (64bit) | |||||
Note: The effect plugin can used be as an instrument, too. You just have to send it MIDI events ! | Note: The effect plugin can used be as an instrument, too. You just have to send it MIDI events ! | ||||
@@ -349,6 +349,7 @@ struct ModuleBrowser : OpaqueWidget { | |||||
} | } | ||||
void refreshSearch() { | void refreshSearch() { | ||||
printf("xxx ModuleBrowser::refreshSearch\n"); | |||||
std::string search = searchField->text; | std::string search = searchField->text; | ||||
moduleList->clearChildren(); | moduleList->clearChildren(); | ||||
moduleList->selected = 0; | moduleList->selected = 0; | ||||
@@ -361,13 +362,31 @@ struct ModuleBrowser : OpaqueWidget { | |||||
item->setText("Favorites"); | item->setText("Favorites"); | ||||
moduleList->addChild(item); | moduleList->addChild(item); | ||||
} | } | ||||
for (Model *model : global_ui->module_browser.sFavoriteModels) { | |||||
if (isModelFiltered(model) && isModelMatch(model, search)) { | |||||
ModelItem *item = new ModelItem(); | |||||
item->setModel(model); | |||||
moduleList->addChild(item); | |||||
} | |||||
} | |||||
{ | |||||
std::vector<Model*> sortedModels; | |||||
for (Model *model : global_ui->module_browser.sFavoriteModels) { | |||||
if (isModelFiltered(model) && isModelMatch(model, search)) { | |||||
uint32_t i = 0u; | |||||
for(Model *sortedModel : sortedModels) { | |||||
if(model->name < sortedModel->name) { | |||||
sortedModels.insert(sortedModels.begin() + i, model); | |||||
break; | |||||
} | |||||
i++; | |||||
} | |||||
if(i == sortedModels.size()) { | |||||
sortedModels.push_back(model); | |||||
} | |||||
} | |||||
} | |||||
for(Model *model : sortedModels) { | |||||
ModelItem *item = new ModelItem(); | |||||
item->setModel(model); | |||||
moduleList->addChild(item); | |||||
} | |||||
} | |||||
// Author items | // Author items | ||||
{ | { | ||||
SeparatorItem *item = new SeparatorItem(); | SeparatorItem *item = new SeparatorItem(); | ||||
@@ -497,32 +516,38 @@ void SearchModuleField::onTextChange() { | |||||
void SearchModuleField::onKey(EventKey &e) { | void SearchModuleField::onKey(EventKey &e) { | ||||
switch (e.key) { | switch (e.key) { | ||||
case LGLW_VKEY_ESCAPE/*GLFW_KEY_ESCAPE*/: { | |||||
case LGLW_VKEY_ESCAPE: | |||||
global_ui->ui.gScene->setOverlay(NULL); | global_ui->ui.gScene->setOverlay(NULL); | ||||
e.consumed = true; | e.consumed = true; | ||||
return; | return; | ||||
} break; | |||||
case LGLW_VKEY_UP/*GLFW_KEY_UP*/: { | |||||
break; | |||||
case LGLW_VKEY_UP: | |||||
moduleBrowser->moduleList->incrementSelection(-1); | moduleBrowser->moduleList->incrementSelection(-1); | ||||
moduleBrowser->moduleList->scrollSelected(); | moduleBrowser->moduleList->scrollSelected(); | ||||
e.consumed = true; | e.consumed = true; | ||||
} break; | |||||
case LGLW_VKEY_DOWN/*GLFW_KEY_DOWN*/: { | |||||
break; | |||||
case LGLW_VKEY_DOWN: | |||||
moduleBrowser->moduleList->incrementSelection(1); | moduleBrowser->moduleList->incrementSelection(1); | ||||
moduleBrowser->moduleList->scrollSelected(); | moduleBrowser->moduleList->scrollSelected(); | ||||
e.consumed = true; | e.consumed = true; | ||||
} break; | |||||
case LGLW_VKEY_PAGEUP/*GLFW_KEY_PAGE_UP*/: { | |||||
break; | |||||
case LGLW_VKEY_PAGEUP: | |||||
moduleBrowser->moduleList->incrementSelection(-5); | moduleBrowser->moduleList->incrementSelection(-5); | ||||
moduleBrowser->moduleList->scrollSelected(); | moduleBrowser->moduleList->scrollSelected(); | ||||
e.consumed = true; | e.consumed = true; | ||||
} break; | |||||
case LGLW_VKEY_PAGEDOWN/*GLFW_KEY_PAGE_DOWN*/: { | |||||
break; | |||||
case LGLW_VKEY_PAGEDOWN: | |||||
moduleBrowser->moduleList->incrementSelection(5); | moduleBrowser->moduleList->incrementSelection(5); | ||||
moduleBrowser->moduleList->scrollSelected(); | moduleBrowser->moduleList->scrollSelected(); | ||||
e.consumed = true; | e.consumed = true; | ||||
} break; | |||||
case LGLW_VKEY_RETURN/*GLFW_KEY_ENTER*/: { | |||||
break; | |||||
case LGLW_VKEY_RETURN: { | |||||
BrowserListItem *item = moduleBrowser->moduleList->getSelectedItem(); | BrowserListItem *item = moduleBrowser->moduleList->getSelectedItem(); | ||||
if (item) { | if (item) { | ||||
item->doAction(); | item->doAction(); | ||||
@@ -64,7 +64,6 @@ struct SyncButton : Button { | |||||
t.detach(); | t.detach(); | ||||
checked = true; | checked = true; | ||||
} | } | ||||
#endif // USE_VST2 | |||||
// Display message if we've completed updates | // Display message if we've completed updates | ||||
if (completed) { | if (completed) { | ||||
if (osdialog_message(OSDIALOG_INFO, OSDIALOG_OK_CANCEL, "All plugins have been updated. Close Rack and re-launch it to load new updates.")) { | if (osdialog_message(OSDIALOG_INFO, OSDIALOG_OK_CANCEL, "All plugins have been updated. Close Rack and re-launch it to load new updates.")) { | ||||
@@ -72,6 +71,7 @@ struct SyncButton : Button { | |||||
} | } | ||||
completed = false; | completed = false; | ||||
} | } | ||||
#endif // USE_VST2 | |||||
} | } | ||||
void draw(NVGcontext *vg) override { | void draw(NVGcontext *vg) override { | ||||
Button::draw(vg); | Button::draw(vg); | ||||
@@ -724,6 +724,15 @@ public: | |||||
} | } | ||||
} | } | ||||
void queueRedraw(void) { | |||||
setGlobals(); | |||||
if(lglw_window_is_visible(rack::global_ui->window.lglw)) | |||||
{ | |||||
lglw_redraw(rack::global_ui->window.lglw); | |||||
} | |||||
} | |||||
void redraw(void) { | void redraw(void) { | ||||
setGlobals(); | setGlobals(); | ||||
@@ -1163,7 +1172,7 @@ VstIntPtr VSTPluginDispatcher(VSTPlugin *vstPlugin, | |||||
case effEditIdle: | case effEditIdle: | ||||
if(0 == wrapper->redraw_ival_ms) | if(0 == wrapper->redraw_ival_ms) | ||||
{ | { | ||||
wrapper->redraw(); | |||||
wrapper->queueRedraw(); | |||||
} | } | ||||
break; | break; | ||||
@@ -1370,6 +1379,11 @@ void vst2_refresh_rate_set (float _hz) { | |||||
} | } | ||||
extern "C" void lglw_timer_cbk(lglw_t _lglw) { | extern "C" void lglw_timer_cbk(lglw_t _lglw) { | ||||
VSTPluginWrapper *wrapper = (VSTPluginWrapper*)lglw_userdata_get(_lglw); | |||||
wrapper->queueRedraw(); | |||||
} | |||||
extern "C" void lglw_redraw_cbk(lglw_t _lglw) { | |||||
VSTPluginWrapper *wrapper = (VSTPluginWrapper*)lglw_userdata_get(_lglw); | VSTPluginWrapper *wrapper = (VSTPluginWrapper*)lglw_userdata_get(_lglw); | ||||
wrapper->redraw(); | wrapper->redraw(); | ||||
} | } | ||||
@@ -36,268 +36,12 @@ | |||||
#include "global_ui.hpp" | #include "global_ui.hpp" | ||||
extern void vst2_set_globals (void *_wrapper); | extern void vst2_set_globals (void *_wrapper); | ||||
extern "C" extern void lglw_timer_cbk (lglw_t _lglw); | |||||
extern "C" extern void lglw_timer_cbk (lglw_t _lglw); // implemented in vst2_main.cpp | |||||
extern "C" extern void lglw_redraw_cbk (lglw_t _lglw); // implemented in vst2_main.cpp | |||||
namespace rack { | namespace rack { | ||||
// void windowSizeCallback(GLFWwindow* window, int width, int height) { | |||||
// } | |||||
// void mouseButtonCallback(GLFWwindow *window, int button, int action, int mods) { | |||||
// #ifdef ARCH_MAC | |||||
// // Ctrl-left click --> right click | |||||
// if (button == GLFW_MOUSE_BUTTON_LEFT) { | |||||
// if (glfwGetKey(global_ui->window.gWindow, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS || glfwGetKey(global_ui->window.gWindow, GLFW_KEY_RIGHT_CONTROL) == GLFW_PRESS) { | |||||
// button = GLFW_MOUSE_BUTTON_RIGHT; | |||||
// } | |||||
// } | |||||
// #endif | |||||
// if (action == GLFW_PRESS) { | |||||
// global_ui->widgets.gTempWidget = NULL; | |||||
// // onMouseDown | |||||
// { | |||||
// EventMouseDown e; | |||||
// e.pos = global_ui->window.gMousePos; | |||||
// e.button = button; | |||||
// global_ui->ui.gScene->onMouseDown(e); | |||||
// global_ui->widgets.gTempWidget = e.target; | |||||
// } | |||||
// if (button == GLFW_MOUSE_BUTTON_LEFT) { | |||||
// if (global_ui->widgets.gTempWidget) { | |||||
// // onDragStart | |||||
// EventDragStart e; | |||||
// global_ui->widgets.gTempWidget->onDragStart(e); | |||||
// } | |||||
// global_ui->widgets.gDraggedWidget = global_ui->widgets.gTempWidget; | |||||
// if (global_ui->widgets.gTempWidget != global_ui->widgets.gFocusedWidget) { | |||||
// if (global_ui->widgets.gFocusedWidget) { | |||||
// // onDefocus | |||||
// EventDefocus e; | |||||
// global_ui->widgets.gFocusedWidget->onDefocus(e); | |||||
// } | |||||
// global_ui->widgets.gFocusedWidget = NULL; | |||||
// if (global_ui->widgets.gTempWidget) { | |||||
// // onFocus | |||||
// EventFocus e; | |||||
// global_ui->widgets.gTempWidget->onFocus(e); | |||||
// if (e.consumed) { | |||||
// global_ui->widgets.gFocusedWidget = global_ui->widgets.gTempWidget; | |||||
// } | |||||
// } | |||||
// } | |||||
// } | |||||
// global_ui->widgets.gTempWidget = NULL; | |||||
// } | |||||
// else if (action == GLFW_RELEASE) { | |||||
// // onMouseUp | |||||
// global_ui->widgets.gTempWidget = NULL; | |||||
// { | |||||
// EventMouseUp e; | |||||
// e.pos = global_ui->window.gMousePos; | |||||
// e.button = button; | |||||
// global_ui->ui.gScene->onMouseUp(e); | |||||
// global_ui->widgets.gTempWidget = e.target; | |||||
// } | |||||
// if (button == GLFW_MOUSE_BUTTON_LEFT) { | |||||
// if (global_ui->widgets.gDraggedWidget) { | |||||
// // onDragDrop | |||||
// EventDragDrop e; | |||||
// e.origin = global_ui->widgets.gDraggedWidget; | |||||
// global_ui->widgets.gTempWidget->onDragDrop(e); | |||||
// } | |||||
// // gDraggedWidget might have been set to null in the last event, recheck here | |||||
// if (global_ui->widgets.gDraggedWidget) { | |||||
// // onDragEnd | |||||
// EventDragEnd e; | |||||
// global_ui->widgets.gDraggedWidget->onDragEnd(e); | |||||
// } | |||||
// global_ui->widgets.gDraggedWidget = NULL; | |||||
// global_ui->widgets.gDragHoveredWidget = NULL; | |||||
// } | |||||
// global_ui->widgets.gTempWidget = NULL; | |||||
// } | |||||
// } | |||||
// struct MouseButtonArguments { | |||||
// GLFWwindow *window; | |||||
// int button; | |||||
// int action; | |||||
// int mods; | |||||
// }; | |||||
// static std::queue<MouseButtonArguments> mouseButtonQueue; | |||||
// void mouseButtonStickyPop() { | |||||
// if (!mouseButtonQueue.empty()) { | |||||
// MouseButtonArguments args = mouseButtonQueue.front(); | |||||
// mouseButtonQueue.pop(); | |||||
// mouseButtonCallback(args.window, args.button, args.action, args.mods); | |||||
// } | |||||
// } | |||||
// void mouseButtonStickyCallback(GLFWwindow *window, int button, int action, int mods) { | |||||
// // Defer multiple clicks per frame to future frames | |||||
// MouseButtonArguments args = {window, button, action, mods}; | |||||
// mouseButtonQueue.push(args); | |||||
// } | |||||
// void cursorPosCallback(GLFWwindow* window, double xpos, double ypos) { | |||||
// Vec mousePos = Vec(xpos, ypos).div(global_ui->window.gPixelRatio / global_ui->window.gWindowRatio).round(); | |||||
// Vec mouseRel = mousePos.minus(global_ui->window.gMousePos); | |||||
// int cursorMode = glfwGetInputMode(global_ui->window.gWindow, GLFW_CURSOR); | |||||
// (void) cursorMode; | |||||
// #ifdef ARCH_MAC | |||||
// // Workaround for Mac. We can't use GLFW_CURSOR_DISABLED because it's buggy, so implement it on our own. | |||||
// // This is not an ideal implementation. For example, if the user drags off the screen, the new mouse position will be clamped. | |||||
// if (cursorMode == GLFW_CURSOR_HIDDEN) { | |||||
// // CGSetLocalEventsSuppressionInterval(0.0); | |||||
// glfwSetCursorPos(global_ui->window.gWindow, global_ui->window.gMousePos.x, global_ui->window.gMousePos.y); | |||||
// CGAssociateMouseAndMouseCursorPosition(true); | |||||
// mousePos = global_ui->window.gMousePos; | |||||
// } | |||||
// // Because sometimes the cursor turns into an arrow when its position is on the boundary of the window | |||||
// glfwSetCursor(global_ui->window.gWindow, NULL); | |||||
// #endif | |||||
// global_ui->window.gMousePos = mousePos; | |||||
// global_ui->widgets.gTempWidget = NULL; | |||||
// // onMouseMove | |||||
// { | |||||
// EventMouseMove e; | |||||
// e.pos = mousePos; | |||||
// e.mouseRel = mouseRel; | |||||
// global_ui->ui.gScene->onMouseMove(e); | |||||
// global_ui->widgets.gTempWidget = e.target; | |||||
// } | |||||
// if (global_ui->widgets.gDraggedWidget) { | |||||
// // onDragMove | |||||
// EventDragMove e; | |||||
// e.mouseRel = mouseRel; | |||||
// global_ui->widgets.gDraggedWidget->onDragMove(e); | |||||
// if (global_ui->widgets.gTempWidget != global_ui->widgets.gDragHoveredWidget) { | |||||
// if (global_ui->widgets.gDragHoveredWidget) { | |||||
// EventDragEnter e; | |||||
// e.origin = global_ui->widgets.gDraggedWidget; | |||||
// global_ui->widgets.gDragHoveredWidget->onDragLeave(e); | |||||
// } | |||||
// global_ui->widgets.gDragHoveredWidget = global_ui->widgets.gTempWidget; | |||||
// if (global_ui->widgets.gDragHoveredWidget) { | |||||
// EventDragEnter e; | |||||
// e.origin = global_ui->widgets.gDraggedWidget; | |||||
// global_ui->widgets.gDragHoveredWidget->onDragEnter(e); | |||||
// } | |||||
// } | |||||
// } | |||||
// else { | |||||
// if (global_ui->widgets.gTempWidget != global_ui->widgets.gHoveredWidget) { | |||||
// if (global_ui->widgets.gHoveredWidget) { | |||||
// // onMouseLeave | |||||
// EventMouseLeave e; | |||||
// global_ui->widgets.gHoveredWidget->onMouseLeave(e); | |||||
// } | |||||
// global_ui->widgets.gHoveredWidget = global_ui->widgets.gTempWidget; | |||||
// if (global_ui->widgets.gHoveredWidget) { | |||||
// // onMouseEnter | |||||
// EventMouseEnter e; | |||||
// global_ui->widgets.gHoveredWidget->onMouseEnter(e); | |||||
// } | |||||
// } | |||||
// } | |||||
// global_ui->widgets.gTempWidget = NULL; | |||||
// if (glfwGetMouseButton(global_ui->window.gWindow, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS) { | |||||
// // TODO | |||||
// // Define a new global called gScrollWidget, which remembers the widget where middle-click was first pressed | |||||
// EventScroll e; | |||||
// e.pos = mousePos; | |||||
// e.scrollRel = mouseRel; | |||||
// global_ui->ui.gScene->onScroll(e); | |||||
// } | |||||
// } | |||||
// void cursorEnterCallback(GLFWwindow* window, int entered) { | |||||
// if (!entered) { | |||||
// if (global_ui->widgets.gHoveredWidget) { | |||||
// // onMouseLeave | |||||
// EventMouseLeave e; | |||||
// global_ui->widgets.gHoveredWidget->onMouseLeave(e); | |||||
// } | |||||
// global_ui->widgets.gHoveredWidget = NULL; | |||||
// } | |||||
// } | |||||
// void scrollCallback(GLFWwindow *window, double x, double y) { | |||||
// Vec scrollRel = Vec(x, y); | |||||
// #if ARCH_LIN || ARCH_WIN | |||||
// if (windowIsShiftPressed()) | |||||
// scrollRel = Vec(y, x); | |||||
// #endif | |||||
// // onScroll | |||||
// EventScroll e; | |||||
// e.pos = global_ui->window.gMousePos; | |||||
// e.scrollRel = scrollRel.mult(50.0); | |||||
// global_ui->ui.gScene->onScroll(e); | |||||
// } | |||||
// // void charCallback(GLFWwindow *window, unsigned int codepoint) { | |||||
// // if (global_ui->widgets.gFocusedWidget) { | |||||
// // // onText | |||||
// // EventText e; | |||||
// // e.codepoint = codepoint; | |||||
// // global_ui->widgets.gFocusedWidget->onText(e); | |||||
// // } | |||||
// // } | |||||
// void keyCallback(GLFWwindow *window, int key, int scancode, int action, int mods) { | |||||
// if (action == GLFW_PRESS || action == GLFW_REPEAT) { | |||||
// if (global_ui->widgets.gFocusedWidget) { | |||||
// // onKey | |||||
// EventKey e; | |||||
// e.key = key; | |||||
// global_ui->widgets.gFocusedWidget->onKey(e); | |||||
// if (e.consumed) | |||||
// return; | |||||
// } | |||||
// // onHoverKey | |||||
// EventHoverKey e; | |||||
// e.pos = global_ui->window.gMousePos; | |||||
// e.key = key; | |||||
// global_ui->ui.gScene->onHoverKey(e); | |||||
// } | |||||
// // Keyboard MIDI driver | |||||
// if (!(mods & (GLFW_MOD_SHIFT | GLFW_MOD_CONTROL | GLFW_MOD_ALT | GLFW_MOD_SUPER))) { | |||||
// if (action == GLFW_PRESS) { | |||||
// keyboardPress(key); | |||||
// } | |||||
// else if (action == GLFW_RELEASE) { | |||||
// keyboardRelease(key); | |||||
// } | |||||
// } | |||||
// } | |||||
// // void dropCallback(GLFWwindow *window, int count, const char **paths) { | |||||
// // // onPathDrop | |||||
// // EventPathDrop e; | |||||
// // e.pos = global_ui->window.gMousePos; | |||||
// // for (int i = 0; i < count; i++) { | |||||
// // e.paths.push_back(paths[i]); | |||||
// // } | |||||
// // global_ui->ui.gScene->onPathDrop(e); | |||||
// // } | |||||
// // void errorCallback(int error, const char *description) { | |||||
// // warn("GLFW error %d: %s", error, description); | |||||
// // } | |||||
extern "C" { | extern "C" { | ||||
static void lglw_mouse_cbk(lglw_t _lglw, int32_t _x, int32_t _y, uint32_t _buttonState, uint32_t _changedButtonState) { | static void lglw_mouse_cbk(lglw_t _lglw, int32_t _x, int32_t _y, uint32_t _buttonState, uint32_t _changedButtonState) { | ||||
@@ -328,9 +72,6 @@ static void lglw_mouse_cbk(lglw_t _lglw, int32_t _x, int32_t _y, uint32_t _butto | |||||
Vec mousePos = Vec(_x, _y);//.div(global_ui->window.gPixelRatio / global_ui->window.gWindowRatio).round(); | Vec mousePos = Vec(_x, _y);//.div(global_ui->window.gPixelRatio / global_ui->window.gWindowRatio).round(); | ||||
Vec mouseRel = mousePos.minus(global_ui->window.gMousePos); | Vec mouseRel = mousePos.minus(global_ui->window.gMousePos); | ||||
// int cursorMode = glfwGetInputMode(global_ui->window.gWindow, GLFW_CURSOR); | |||||
// (void) cursorMode; | |||||
// #ifdef ARCH_MAC | // #ifdef ARCH_MAC | ||||
// // Workaround for Mac. We can't use GLFW_CURSOR_DISABLED because it's buggy, so implement it on our own. | // // Workaround for Mac. We can't use GLFW_CURSOR_DISABLED because it's buggy, so implement it on our own. | ||||
// // This is not an ideal implementation. For example, if the user drags off the screen, the new mouse position will be clamped. | // // This is not an ideal implementation. For example, if the user drags off the screen, the new mouse position will be clamped. | ||||
@@ -347,6 +88,7 @@ static void lglw_mouse_cbk(lglw_t _lglw, int32_t _x, int32_t _y, uint32_t _butto | |||||
global_ui->window.gMousePos = mousePos; | global_ui->window.gMousePos = mousePos; | ||||
global_ui->widgets.gTempWidget = NULL; | global_ui->widgets.gTempWidget = NULL; | ||||
// onMouseMove | // onMouseMove | ||||
{ | { | ||||
EventMouseMove e; | EventMouseMove e; | ||||
@@ -392,7 +134,7 @@ static void lglw_mouse_cbk(lglw_t _lglw, int32_t _x, int32_t _y, uint32_t _butto | |||||
} | } | ||||
} | } | ||||
global_ui->widgets.gTempWidget = NULL; | global_ui->widgets.gTempWidget = NULL; | ||||
// // if (glfwGetMouseButton(global_ui->window.gWindow, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS) { | |||||
if(0u != (_buttonState & LGLW_MOUSE_MBUTTON)) { | if(0u != (_buttonState & LGLW_MOUSE_MBUTTON)) { | ||||
// TODO | // TODO | ||||
// Define a new global called gScrollWidget, which remembers the widget where middle-click was first pressed | // Define a new global called gScrollWidget, which remembers the widget where middle-click was first pressed | ||||
@@ -415,9 +157,9 @@ static void lglw_mouse_cbk(lglw_t _lglw, int32_t _x, int32_t _y, uint32_t _butto | |||||
// } | // } | ||||
// #endif | // #endif | ||||
int button = | int button = | ||||
(0u != (_changedButtonState & LGLW_MOUSE_LBUTTON)) ? 0 : | |||||
(0u != (_changedButtonState & LGLW_MOUSE_RBUTTON)) ? 1 : | |||||
(0u != (_changedButtonState & LGLW_MOUSE_MBUTTON)) ? 2 : | |||||
(0u != (_changedButtonState & LGLW_MOUSE_LBUTTON)) ? RACK_MOUSE_BUTTON_LEFT/*0*/ : | |||||
(0u != (_changedButtonState & LGLW_MOUSE_RBUTTON)) ? RACK_MOUSE_BUTTON_RIGHT/*1*/ : | |||||
(0u != (_changedButtonState & LGLW_MOUSE_MBUTTON)) ? RACK_MOUSE_BUTTON_MIDDLE/*2*/ : | |||||
-1; | -1; | ||||
bool bPressed = (0u != (_changedButtonState & _buttonState)); | bool bPressed = (0u != (_changedButtonState & _buttonState)); | ||||
@@ -433,7 +175,7 @@ static void lglw_mouse_cbk(lglw_t _lglw, int32_t _x, int32_t _y, uint32_t _butto | |||||
global_ui->widgets.gTempWidget = e.target; | global_ui->widgets.gTempWidget = e.target; | ||||
} | } | ||||
if (button == 0/*GLFW_MOUSE_BUTTON_LEFT*/) { | |||||
if (RACK_MOUSE_BUTTON_LEFT/*0*/ == button) { | |||||
if (global_ui->widgets.gTempWidget) { | if (global_ui->widgets.gTempWidget) { | ||||
// onDragStart | // onDragStart | ||||
EventDragStart e; | EventDragStart e; | ||||
@@ -460,7 +202,7 @@ static void lglw_mouse_cbk(lglw_t _lglw, int32_t _x, int32_t _y, uint32_t _butto | |||||
} | } | ||||
global_ui->widgets.gTempWidget = NULL; | global_ui->widgets.gTempWidget = NULL; | ||||
} | } | ||||
else { ///if (action == GLFW_RELEASE) { | |||||
else { | |||||
// onMouseUp | // onMouseUp | ||||
global_ui->widgets.gTempWidget = NULL; | global_ui->widgets.gTempWidget = NULL; | ||||
{ | { | ||||
@@ -471,7 +213,7 @@ static void lglw_mouse_cbk(lglw_t _lglw, int32_t _x, int32_t _y, uint32_t _butto | |||||
global_ui->widgets.gTempWidget = e.target; | global_ui->widgets.gTempWidget = e.target; | ||||
} | } | ||||
if (button == 0/*GLFW_MOUSE_BUTTON_LEFT*/) { | |||||
if (RACK_MOUSE_BUTTON_LEFT/*0*/ == button) { | |||||
if (global_ui->widgets.gDraggedWidget) { | if (global_ui->widgets.gDraggedWidget) { | ||||
// onDragDrop | // onDragDrop | ||||
EventDragDrop e; | EventDragDrop e; | ||||
@@ -489,7 +231,6 @@ static void lglw_mouse_cbk(lglw_t _lglw, int32_t _x, int32_t _y, uint32_t _butto | |||||
} | } | ||||
global_ui->widgets.gTempWidget = NULL; | global_ui->widgets.gTempWidget = NULL; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -518,7 +259,7 @@ static void lglw_focus_cbk(lglw_t _lglw, uint32_t _focusState, uint32_t _changed | |||||
} | } | ||||
static void lglw_keyboard_cbk(lglw_t _lglw, uint32_t _vkey, uint32_t _kmod, lglw_bool_t _bPressed) { | static void lglw_keyboard_cbk(lglw_t _lglw, uint32_t _vkey, uint32_t _kmod, lglw_bool_t _bPressed) { | ||||
printf("xxx lglw_keyboard_cbk: lglw=%p vkey=0x%08x (\'%c\') kmod=0x%08x bPressed=%d\n", _lglw, _vkey, (char)_vkey, _kmod, _bPressed); | |||||
// printf("xxx lglw_keyboard_cbk: lglw=%p vkey=0x%08x (\'%c\') kmod=0x%08x bPressed=%d\n", _lglw, _vkey, (char)_vkey, _kmod, _bPressed); | |||||
vst2_set_globals(lglw_userdata_get(_lglw)); | vst2_set_globals(lglw_userdata_get(_lglw)); | ||||
@@ -557,12 +298,21 @@ static void lglw_keyboard_cbk(lglw_t _lglw, uint32_t _vkey, uint32_t _kmod, lglw | |||||
} | } | ||||
} | } | ||||
void lglw_dropfiles_cbk(lglw_t _lglw, int32_t _x, int32_t _y, uint32_t _numFiles, const char **_pathNames) { | |||||
// onPathDrop | |||||
EventPathDrop e; | |||||
e.pos = Vec(_x, _y); | |||||
for(uint32_t i = 0u; i < _numFiles; i++) { | |||||
e.paths.push_back(_pathNames[i]); | |||||
} | |||||
global_ui->ui.gScene->onPathDrop(e); | |||||
} | |||||
} // extern C | } // extern C | ||||
void renderGui() { | void renderGui() { | ||||
int width, height; | int width, height; | ||||
// printf("xxx renderGui: ENTER\n"); | // printf("xxx renderGui: ENTER\n"); | ||||
// glfwGetFramebufferSize(global_ui->window.gWindow, &width, &height); | |||||
lglw_window_size_get(global_ui->window.lglw, &width, &height); | lglw_window_size_get(global_ui->window.lglw, &width, &height); | ||||
// Update and render | // Update and render | ||||
@@ -578,7 +328,6 @@ void renderGui() { | |||||
glClearColor(0.0, 0.0, 0.0, 1.0); | glClearColor(0.0, 0.0, 0.0, 1.0); | ||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | ||||
nvgEndFrame(global_ui->window.gVg); | nvgEndFrame(global_ui->window.gVg); | ||||
// // glfwSwapBuffers(global_ui->window.gWindow); | |||||
// printf("xxx renderGui: LEAVE\n"); | // printf("xxx renderGui: LEAVE\n"); | ||||
} | } | ||||
@@ -592,45 +341,17 @@ void windowInit() { | |||||
lglw_userdata_set(global_ui->window.lglw, global->vst2.wrapper); | lglw_userdata_set(global_ui->window.lglw, global->vst2.wrapper); | ||||
// #if defined NANOVG_GL2 | |||||
// glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); | |||||
// glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); | |||||
// #elif defined NANOVG_GL3 | |||||
// glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); | |||||
// glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); | |||||
// glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); | |||||
// glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); | |||||
// #endif | |||||
// glfwWindowHint(GLFW_MAXIMIZED, GLFW_TRUE); | |||||
// glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_TRUE); | |||||
global_ui->window.lastWindowTitle = ""; | global_ui->window.lastWindowTitle = ""; | ||||
// global_ui->window.gWindow = glfwCreateWindow(640, 480, global_ui->window.lastWindowTitle.c_str(), NULL, NULL); | |||||
// if (!global_ui->window.gWindow) { | |||||
// osdialog_message(OSDIALOG_ERROR, OSDIALOG_OK, "Cannot open window with OpenGL 2.0 renderer. Does your graphics card support OpenGL 2.0 or greater? If so, make sure you have the latest graphics drivers installed."); | |||||
// exit(1); | |||||
// } | |||||
// // glfwMakeContextCurrent(global_ui->window.gWindow); | |||||
// // glfwSwapInterval(1); | |||||
lglw_glcontext_push(global_ui->window.lglw); | lglw_glcontext_push(global_ui->window.lglw); | ||||
lglw_swap_interval(global_ui->window.lglw, 1); // can be overridden via settings.json:"vsync" property | lglw_swap_interval(global_ui->window.lglw, 1); // can be overridden via settings.json:"vsync" property | ||||
// // glfwSetInputMode(global_ui->window.gWindow, GLFW_LOCK_KEY_MODS, 1); | |||||
// // glfwSetWindowSizeCallback(global_ui->window.gWindow, windowSizeCallback); | |||||
// // glfwSetMouseButtonCallback(global_ui->window.gWindow, mouseButtonStickyCallback); | |||||
lglw_mouse_callback_set(global_ui->window.lglw, &lglw_mouse_cbk); | |||||
lglw_focus_callback_set(global_ui->window.lglw, &lglw_focus_cbk); | |||||
lglw_keyboard_callback_set(global_ui->window.lglw, &lglw_keyboard_cbk); | |||||
lglw_timer_callback_set(global_ui->window.lglw, &lglw_timer_cbk); | |||||
// Call this ourselves, but on every frame instead of only when the mouse moves | |||||
// glfwSetCursorPosCallback(gWindow, cursorPosCallback); | |||||
// glfwSetCursorEnterCallback(global_ui->window.gWindow, cursorEnterCallback); | |||||
// glfwSetScrollCallback(global_ui->window.gWindow, scrollCallback); | |||||
// glfwSetCharCallback(global_ui->window.gWindow, charCallback); | |||||
// glfwSetKeyCallback(global_ui->window.gWindow, keyCallback); | |||||
// glfwSetDropCallback(global_ui->window.gWindow, dropCallback); | |||||
lglw_mouse_callback_set (global_ui->window.lglw, &lglw_mouse_cbk); | |||||
lglw_focus_callback_set (global_ui->window.lglw, &lglw_focus_cbk); | |||||
lglw_keyboard_callback_set (global_ui->window.lglw, &lglw_keyboard_cbk); | |||||
lglw_timer_callback_set (global_ui->window.lglw, &lglw_timer_cbk); | |||||
lglw_dropfiles_callback_set (global_ui->window.lglw, &lglw_dropfiles_cbk); | |||||
lglw_redraw_callback_set (global_ui->window.lglw, &lglw_redraw_cbk); | |||||
// Set up GLEW | // Set up GLEW | ||||
glewExperimental = GL_TRUE; | glewExperimental = GL_TRUE; | ||||
@@ -644,8 +365,6 @@ void windowInit() { | |||||
// GLEW generates GL error because it calls glGetString(GL_EXTENSIONS), we'll consume it here. | // GLEW generates GL error because it calls glGetString(GL_EXTENSIONS), we'll consume it here. | ||||
glGetError(); | glGetError(); | ||||
// glfwSetWindowSizeLimits(global_ui->window.gWindow, 640, 480, GLFW_DONT_CARE, GLFW_DONT_CARE); | |||||
// Set up NanoVG | // Set up NanoVG | ||||
int nvgFlags = NVG_ANTIALIAS; | int nvgFlags = NVG_ANTIALIAS; | ||||
#if defined NANOVG_GL2 | #if defined NANOVG_GL2 | ||||
@@ -710,6 +429,7 @@ void vst2_editor_redraw(void) { | |||||
#if 0 | #if 0 | ||||
// Set window title | // Set window title | ||||
// (note) the VST plugin editor window title is set by the VST host | |||||
std::string windowTitle; | std::string windowTitle; | ||||
windowTitle = global_ui->app.gApplicationName; | windowTitle = global_ui->app.gApplicationName; | ||||
windowTitle += " "; | windowTitle += " "; | ||||
@@ -741,144 +461,39 @@ void vst2_editor_redraw(void) { | |||||
lglw_swap_buffers(global_ui->window.lglw); | lglw_swap_buffers(global_ui->window.lglw); | ||||
} | } | ||||
// #if 0 | |||||
// void windowRun() { | |||||
// printf("xxx vcvrack: windowRun() ENTER\n"); | |||||
// assert(global_ui->window.gWindow); | |||||
// global_ui->window.gGuiFrame = 0; | |||||
// while(!glfwWindowShouldClose(global_ui->window.gWindow) | |||||
// #ifdef USE_VST2 | |||||
// && !global_ui->vst2.b_close_window | |||||
// #endif // USE_VST2 | |||||
// ) { | |||||
// double startTime = glfwGetTime(); | |||||
// global_ui->window.gGuiFrame++; | |||||
// // printf("xxx vcvrack: windowRun(): startTime=%g\n", startTime); | |||||
// // Poll events | |||||
// glfwPollEvents(); | |||||
// { | |||||
// double xpos, ypos; | |||||
// glfwGetCursorPos(global_ui->window.gWindow, &xpos, &ypos); | |||||
// cursorPosCallback(global_ui->window.gWindow, xpos, ypos); | |||||
// } | |||||
// mouseButtonStickyPop(); | |||||
// #ifndef USE_VST2 | |||||
// gamepadStep(); | |||||
// #endif // !USE_VST2 | |||||
// // Set window title | |||||
// std::string windowTitle; | |||||
// windowTitle = global_ui->app.gApplicationName; | |||||
// windowTitle += " "; | |||||
// windowTitle += global_ui->app.gApplicationVersion; | |||||
// if (!global_ui->app.gRackWidget->lastPath.empty()) { | |||||
// windowTitle += " - "; | |||||
// windowTitle += stringFilename(global_ui->app.gRackWidget->lastPath); | |||||
// } | |||||
// if (windowTitle != global_ui->window.lastWindowTitle) { | |||||
// // // glfwSetWindowTitle(global_ui->window.gWindow, windowTitle.c_str()); | |||||
// global_ui->window.lastWindowTitle = windowTitle; | |||||
// } | |||||
// // Get desired scaling | |||||
// // // float pixelRatio; | |||||
// // // glfwGetWindowContentScale(global_ui->window.gWindow, &pixelRatio, NULL); | |||||
// // // pixelRatio = roundf(pixelRatio); | |||||
// // // if (pixelRatio != global_ui->window.gPixelRatio) { | |||||
// // // EventZoom eZoom; | |||||
// // // global_ui->ui.gScene->onZoom(eZoom); | |||||
// // // global_ui->window.gPixelRatio = pixelRatio; | |||||
// // // } | |||||
// // Get framebuffer/window ratio | |||||
// int width, height; | |||||
// glfwGetFramebufferSize(global_ui->window.gWindow, &width, &height); | |||||
// int windowWidth, windowHeight; | |||||
// glfwGetWindowSize(global_ui->window.gWindow, &windowWidth, &windowHeight); | |||||
// global_ui->window.gWindowRatio = (float)width / windowWidth; | |||||
// global_ui->ui.gScene->box.size = Vec(width, height).div(global_ui->window.gPixelRatio); | |||||
// // Step scene | |||||
// global_ui->ui.gScene->step(); | |||||
// // Render | |||||
// bool visible = glfwGetWindowAttrib(global_ui->window.gWindow, GLFW_VISIBLE) && !glfwGetWindowAttrib(global_ui->window.gWindow, GLFW_ICONIFIED); | |||||
// if (visible) { | |||||
// renderGui(); | |||||
// } | |||||
// // Limit framerate manually if vsync isn't working | |||||
// double endTime = glfwGetTime(); | |||||
// double frameTime = endTime - startTime; | |||||
// double minTime = 1.0 / 90.0; | |||||
// if (frameTime < minTime) { | |||||
// std::this_thread::sleep_for(std::chrono::duration<double>(minTime - frameTime)); | |||||
// } | |||||
// endTime = glfwGetTime(); | |||||
// // info("%lf fps", 1.0 / (endTime - startTime)); | |||||
// } | |||||
// printf("xxx vcvrack: windowRun() LEAVE\n"); | |||||
// } | |||||
// #endif | |||||
void windowClose() { | |||||
// // glfwSetWindowShouldClose(global_ui->window.gWindow, GLFW_TRUE); | |||||
} | |||||
void windowCursorLock() { | void windowCursorLock() { | ||||
if (global_ui->window.gAllowCursorLock) { | if (global_ui->window.gAllowCursorLock) { | ||||
// #ifdef ARCH_MAC | |||||
// glfwSetInputMode(global_ui->window.gWindow, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); | |||||
// #else | |||||
// glfwSetInputMode(global_ui->window.gWindow, GLFW_CURSOR, GLFW_CURSOR_DISABLED); | |||||
// #endif | |||||
lglw_mouse_grab(global_ui->window.lglw, LGLW_MOUSE_GRAB_WARP); | lglw_mouse_grab(global_ui->window.lglw, LGLW_MOUSE_GRAB_WARP); | ||||
} | } | ||||
} | } | ||||
void windowCursorUnlock() { | void windowCursorUnlock() { | ||||
if (global_ui->window.gAllowCursorLock) { | if (global_ui->window.gAllowCursorLock) { | ||||
// glfwSetInputMode(global_ui->window.gWindow, GLFW_CURSOR, GLFW_CURSOR_NORMAL); | |||||
lglw_mouse_ungrab(global_ui->window.lglw); | lglw_mouse_ungrab(global_ui->window.lglw); | ||||
} | } | ||||
} | } | ||||
bool windowIsModPressed() { | bool windowIsModPressed() { | ||||
// #ifdef ARCH_MAC | |||||
// return glfwGetKey(global_ui->window.gWindow, GLFW_KEY_LEFT_SUPER) == GLFW_PRESS || glfwGetKey(global_ui->window.gWindow, GLFW_KEY_RIGHT_SUPER) == GLFW_PRESS; | |||||
// #else | |||||
// return glfwGetKey(global_ui->window.gWindow, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS || glfwGetKey(global_ui->window.gWindow, GLFW_KEY_RIGHT_CONTROL) == GLFW_PRESS; | |||||
// #endif | |||||
return (0u != (lglw_keyboard_get_modifiers(global_ui->window.lglw) & (LGLW_KMOD_LCTRL | LGLW_KMOD_RCTRL))); | return (0u != (lglw_keyboard_get_modifiers(global_ui->window.lglw) & (LGLW_KMOD_LCTRL | LGLW_KMOD_RCTRL))); | ||||
} | } | ||||
bool windowIsShiftPressed() { | bool windowIsShiftPressed() { | ||||
// return glfwGetKey(global_ui->window.gWindow, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS || glfwGetKey(global_ui->window.gWindow, GLFW_KEY_RIGHT_SHIFT) == GLFW_PRESS; | |||||
return (0u != (lglw_keyboard_get_modifiers(global_ui->window.lglw) & (LGLW_KMOD_LSHIFT | LGLW_KMOD_RSHIFT))); | return (0u != (lglw_keyboard_get_modifiers(global_ui->window.lglw) & (LGLW_KMOD_LSHIFT | LGLW_KMOD_RSHIFT))); | ||||
} | } | ||||
Vec windowGetWindowSize() { | Vec windowGetWindowSize() { | ||||
int width, height; | int width, height; | ||||
lglw_window_size_get(global_ui->window.lglw, &width, &height); | lglw_window_size_get(global_ui->window.lglw, &width, &height); | ||||
// glfwGetWindowSize(global_ui->window.gWindow, &width, &height); | |||||
return Vec(width, height); | return Vec(width, height); | ||||
} | } | ||||
void windowSetWindowSize(Vec size) { | void windowSetWindowSize(Vec size) { | ||||
int width = size.x; | |||||
int height = size.y; | |||||
// glfwSetWindowSize(global_ui->window.gWindow, width, height); | |||||
(void)size; | |||||
// (note) not supported | |||||
} | } | ||||
Vec windowGetWindowPos() { | Vec windowGetWindowPos() { | ||||
int x, y; | int x, y; | ||||
// glfwGetWindowPos(global_ui->window.gWindow, &x, &y); | |||||
x = 0; | x = 0; | ||||
y = 0; | y = 0; | ||||
return Vec(x, y); | return Vec(x, y); | ||||
@@ -887,14 +502,10 @@ Vec windowGetWindowPos() { | |||||
void windowSetWindowPos(Vec pos) { | void windowSetWindowPos(Vec pos) { | ||||
int x = pos.x; | int x = pos.x; | ||||
int y = pos.y; | int y = pos.y; | ||||
// glfwSetWindowPos(global_ui->window.gWindow, x, y); | |||||
// (note) not supported | |||||
} | } | ||||
bool windowIsMaximized() { | bool windowIsMaximized() { | ||||
// if(global_ui->window.gWindow) | |||||
// return glfwGetWindowAttrib(global_ui->window.gWindow, GLFW_MAXIMIZED); | |||||
// else | |||||
// return false; | |||||
return true; | return true; | ||||
} | } | ||||
@@ -945,24 +556,17 @@ void windowSetTheme(NVGcolor bg, NVGcolor fg) { | |||||
} | } | ||||
void windowSetFullScreen(bool fullScreen) { | void windowSetFullScreen(bool fullScreen) { | ||||
// if (windowGetFullScreen()) { | |||||
// glfwSetWindowMonitor(global_ui->window.gWindow, NULL, global_ui->window.windowX, global_ui->window.windowY, global_ui->window.windowWidth, global_ui->window.windowHeight, GLFW_DONT_CARE); | |||||
// } | |||||
// else { | |||||
// glfwGetWindowPos(global_ui->window.gWindow, &global_ui->window.windowX, &global_ui->window.windowY); | |||||
// glfwGetWindowSize(global_ui->window.gWindow, &global_ui->window.windowWidth, &global_ui->window.windowHeight); | |||||
// GLFWmonitor *monitor = glfwGetPrimaryMonitor(); | |||||
// const GLFWvidmode* mode = glfwGetVideoMode(monitor); | |||||
// glfwSetWindowMonitor(global_ui->window.gWindow, monitor, 0, 0, mode->width, mode->height, mode->refreshRate); | |||||
// } | |||||
(void)fullScreen; | |||||
// (note) not supported | |||||
} | } | ||||
bool windowGetFullScreen() { | bool windowGetFullScreen() { | ||||
// GLFWmonitor *monitor = glfwGetWindowMonitor(global_ui->window.gWindow); | |||||
// return monitor != NULL; | |||||
return false; | return false; | ||||
} | } | ||||
void windowClose(void) { | |||||
// (note) not supported | |||||
} | |||||
//////////////////// | //////////////////// | ||||
// resources | // resources | ||||
@@ -1,3 +1,9 @@ | |||||
** August 7th, 2018 | |||||
- fix Windows 7 mouse lock issue (no redraw while mouse is locked) | |||||
- fix / re-add file drag'n'drop support | |||||
- modulebrowser: sort favorite modules by name | |||||
** August 6th, 2018 | ** August 6th, 2018 | ||||
- add settings.json "refreshRate" property | - add settings.json "refreshRate" property | ||||
- <15: use VST host timer | - <15: use VST host timer | ||||
@@ -1,4 +1,4 @@ | |||||
VeeSeeVST Rack VST 2.4 Plugin -- August 6th, 2018 | |||||
VeeSeeVST Rack VST 2.4 Plugin -- August 7th, 2018 | |||||
================================================= | ================================================= | ||||
!!!------------------------------------------------------------------------------ | !!!------------------------------------------------------------------------------ | ||||
@@ -1,121 +1,121 @@ | |||||
[0.000 info src/main.cpp:59] VeeSeeVST Rack 0.6.1 | [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: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/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 | |||||
[0.001 info src/plugin.cpp:673] vcvrack: Loaded static plugin BaconMusic 0.6.1 | |||||
[0.001 info src/plugin.cpp:673] vcvrack: Loaded static plugin Befaco 0.6.1 | |||||
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin Bidoo 0.6.1 | |||||
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin Bogaudio 0.6.1 | |||||
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin cf 0.6.1 | |||||
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin DHE-Modules 0.6.1 | |||||
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin DrumKit 0.6.1 | |||||
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin ErraticInstruments 0.6.1 | |||||
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin ESeries 0.6.1 | |||||
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin FrozenWasteland 0.6.1 | |||||
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin Fundamental 0.6.1 | |||||
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin Gratrix 0.6.1 | |||||
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin HetrickCV 0.6.1 | |||||
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin huaba 0.6.1 | |||||
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin JW-Modules 0.6.1 | |||||
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin Koralfx-Modules 0.6.1 | |||||
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin LindenbergResearch 0.6.1 | |||||
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin LOGinstruments 0.6.1 | |||||
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin ML_modules 0.6.1 | |||||
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin moDllz 0.6.1 | |||||
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin modular80 0.6.1 | |||||
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin mscHack 0.6.1 | |||||
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin mtsch-plugins 0.6.1 | |||||
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin NauModular 0.6.1 | |||||
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin Ohmer 0.6.1 | |||||
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin Qwelk 0.6.1 | |||||
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin RJModules 0.6.1 | |||||
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin SerialRacker 0.6.1 | |||||
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin SonusModular 0.6.1 | |||||
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin Southpole-parasites 0.6.1 | |||||
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin squinkylabs-plug1 0.6.1 | |||||
[0.006 info src/plugin.cpp:673] vcvrack: Loaded static plugin SubmarineFree 0.6.1 | |||||
[0.006 info src/plugin.cpp:673] vcvrack: Loaded static plugin Template 0.6.1 | |||||
[0.006 info src/plugin.cpp:673] vcvrack: Loaded static plugin trowaSoft 0.6.1 | |||||
[0.006 info src/plugin.cpp:673] vcvrack: Loaded static plugin unless_modules 0.6.1 | |||||
[0.006 info src/plugin.cpp:673] vcvrack: Loaded static plugin Valley 0.6.1 | |||||
[0.006 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Alikins/plugin.dll does not exist | |||||
[0.007 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/AS/plugin.dll does not exist | |||||
[0.007 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/AudibleInstruments/plugin.dll does not exist | |||||
[0.007 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/BaconMusic/plugin.dll does not exist | |||||
[0.007 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Befaco/plugin.dll does not exist | |||||
[0.007 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Bidoo/plugin.dll does not exist | |||||
[0.007 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Bogaudio/plugin.dll does not exist | |||||
[0.007 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/BOKONTEPByteBeatMachine/plugin.dll does not exist | |||||
[0.008 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/cf/plugin.dll does not exist | |||||
[0.008 info src/plugin.cpp:155] Loaded plugin dBiz 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll | |||||
[0.008 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/DHE-Modules/plugin.dll does not exist | |||||
[0.009 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/DrumKit/plugin.dll does not exist | |||||
[0.009 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/ErraticInstruments/plugin.dll does not exist | |||||
[0.009 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/ESeries/plugin.dll does not exist | |||||
[0.009 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/FrozenWasteland/plugin.dll does not exist | |||||
[0.009 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Fundamental/plugin.dll does not exist | |||||
[0.009 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Gratrix/plugin.dll does not exist | |||||
[0.009 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/HetrickCV/plugin.dll does not exist | |||||
[0.010 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/huaba/plugin.dll does not exist | |||||
[0.010 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/JW-Modules/plugin.dll does not exist | |||||
[0.010 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Koralfx-Modules/plugin.dll does not exist | |||||
[0.010 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/LindenbergResearch/plugin.dll does not exist | |||||
[0.010 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/LOGinstruments/plugin.dll does not exist | |||||
[0.010 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/ML_modules/plugin.dll does not exist | |||||
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/moDllz/plugin.dll does not exist | |||||
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/modular80/plugin.dll does not exist | |||||
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/mscHack/plugin.dll does not exist | |||||
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/mtsch-plugins/plugin.dll does not exist | |||||
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/NauModular/plugin.dll does not exist | |||||
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Ohmer/plugin.dll does not exist | |||||
[0.011 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Qwelk/plugin.dll does not exist | |||||
[0.012 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/RJModules/plugin.dll does not exist | |||||
[0.012 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/SerialRacker/plugin.dll does not exist | |||||
[0.012 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/SonusModular/plugin.dll does not exist | |||||
[0.012 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Southpole-parasites/plugin.dll does not exist | |||||
[0.012 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/squinkylabs-plug1/plugin.dll does not exist | |||||
[0.012 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/SubmarineFree/plugin.dll does not exist | |||||
[0.012 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template/plugin.dll does not exist | |||||
[0.013 info src/plugin.cpp:155] Loaded plugin Template_shared 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll | |||||
[0.013 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/trowaSoft/plugin.dll does not exist | |||||
[0.013 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/unless_modules/plugin.dll does not exist | |||||
[0.014 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Valley/plugin.dll does not exist | |||||
[0.014 info src/settings.cpp:211] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json | |||||
[0.030 info src/window.cpp:975] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/DejaVuSans.ttf | |||||
[0.031 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_146097_cc.svg | |||||
[0.031 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_31859_cc.svg | |||||
[0.032 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343816_cc.svg | |||||
[0.032 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343811_cc.svg | |||||
[0.032 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1084369_cc.svg | |||||
[0.032 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1745061_cc.svg | |||||
[0.033 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1240789_cc.svg | |||||
[0.033 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_305536_cc.svg | |||||
[0.033 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_468341_cc.svg | |||||
[0.033 info src/settings.cpp:211] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json | |||||
[0.037 info src/app/RackWidget.cpp:196] Loading patch from string | |||||
[0.039 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/AudioInterface.svg | |||||
[0.039 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/ScrewSilver.svg | |||||
[0.040 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ301M.svg | |||||
[0.040 info src/window.cpp:975] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/ShareTechMono-Regular.ttf | |||||
[0.042 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/MIDIToCVInterface.svg | |||||
[0.046 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/XCO.svg | |||||
[0.046 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_68px.svg | |||||
[0.046 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_16px.svg | |||||
[0.047 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_0.svg | |||||
[0.047 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_1.svg | |||||
[0.047 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_38px.svg | |||||
[0.048 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_0.svg | |||||
[0.048 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_1.svg | |||||
[0.048 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/port.svg | |||||
[0.050 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCA.svg | |||||
[0.050 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundLargeBlackKnob.svg | |||||
[0.052 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCF.svg | |||||
[0.052 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundHugeBlackKnob.svg | |||||
[0.054 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/ADSR.svg | |||||
[0.054 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-hexscrew.svg | |||||
[0.055 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePot.svg | |||||
[0.055 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePotHandle.svg | |||||
[0.056 info src/window.cpp:1030] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-PJ301M.svg | |||||
[7.922 info src/app/RackWidget.cpp:158] Saving patch to string | |||||
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin Alikins 0.6.1 | |||||
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin AS 0.6.1 | |||||
[0.002 info src/plugin.cpp:673] vcvrack: Loaded static plugin AudibleInstruments 0.6.1 | |||||
[0.003 info src/plugin.cpp:673] vcvrack: Loaded static plugin BaconMusic 0.6.1 | |||||
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin Befaco 0.6.1 | |||||
[0.004 info src/plugin.cpp:673] vcvrack: Loaded static plugin Bidoo 0.6.1 | |||||
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin Bogaudio 0.6.1 | |||||
[0.005 info src/plugin.cpp:673] vcvrack: Loaded static plugin cf 0.6.1 | |||||
[0.006 info src/plugin.cpp:673] vcvrack: Loaded static plugin DHE-Modules 0.6.1 | |||||
[0.006 info src/plugin.cpp:673] vcvrack: Loaded static plugin DrumKit 0.6.1 | |||||
[0.007 info src/plugin.cpp:673] vcvrack: Loaded static plugin ErraticInstruments 0.6.1 | |||||
[0.007 info src/plugin.cpp:673] vcvrack: Loaded static plugin ESeries 0.6.1 | |||||
[0.008 info src/plugin.cpp:673] vcvrack: Loaded static plugin FrozenWasteland 0.6.1 | |||||
[0.008 info src/plugin.cpp:673] vcvrack: Loaded static plugin Fundamental 0.6.1 | |||||
[0.009 info src/plugin.cpp:673] vcvrack: Loaded static plugin Gratrix 0.6.1 | |||||
[0.010 info src/plugin.cpp:673] vcvrack: Loaded static plugin HetrickCV 0.6.1 | |||||
[0.010 info src/plugin.cpp:673] vcvrack: Loaded static plugin huaba 0.6.1 | |||||
[0.011 info src/plugin.cpp:673] vcvrack: Loaded static plugin JW-Modules 0.6.1 | |||||
[0.011 info src/plugin.cpp:673] vcvrack: Loaded static plugin Koralfx-Modules 0.6.1 | |||||
[0.012 info src/plugin.cpp:673] vcvrack: Loaded static plugin LindenbergResearch 0.6.1 | |||||
[0.012 info src/plugin.cpp:673] vcvrack: Loaded static plugin LOGinstruments 0.6.1 | |||||
[0.013 info src/plugin.cpp:673] vcvrack: Loaded static plugin ML_modules 0.6.1 | |||||
[0.013 info src/plugin.cpp:673] vcvrack: Loaded static plugin moDllz 0.6.1 | |||||
[0.014 info src/plugin.cpp:673] vcvrack: Loaded static plugin modular80 0.6.1 | |||||
[0.014 info src/plugin.cpp:673] vcvrack: Loaded static plugin mscHack 0.6.1 | |||||
[0.015 info src/plugin.cpp:673] vcvrack: Loaded static plugin mtsch-plugins 0.6.1 | |||||
[0.015 info src/plugin.cpp:673] vcvrack: Loaded static plugin NauModular 0.6.1 | |||||
[0.016 info src/plugin.cpp:673] vcvrack: Loaded static plugin Ohmer 0.6.1 | |||||
[0.016 info src/plugin.cpp:673] vcvrack: Loaded static plugin Qwelk 0.6.1 | |||||
[0.017 info src/plugin.cpp:673] vcvrack: Loaded static plugin RJModules 0.6.1 | |||||
[0.017 info src/plugin.cpp:673] vcvrack: Loaded static plugin SerialRacker 0.6.1 | |||||
[0.018 info src/plugin.cpp:673] vcvrack: Loaded static plugin SonusModular 0.6.1 | |||||
[0.018 info src/plugin.cpp:673] vcvrack: Loaded static plugin Southpole-parasites 0.6.1 | |||||
[0.019 info src/plugin.cpp:673] vcvrack: Loaded static plugin squinkylabs-plug1 0.6.1 | |||||
[0.019 info src/plugin.cpp:673] vcvrack: Loaded static plugin SubmarineFree 0.6.1 | |||||
[0.020 info src/plugin.cpp:673] vcvrack: Loaded static plugin Template 0.6.1 | |||||
[0.020 info src/plugin.cpp:673] vcvrack: Loaded static plugin trowaSoft 0.6.1 | |||||
[0.021 info src/plugin.cpp:673] vcvrack: Loaded static plugin unless_modules 0.6.1 | |||||
[0.021 info src/plugin.cpp:673] vcvrack: Loaded static plugin Valley 0.6.1 | |||||
[0.022 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Alikins/plugin.dll does not exist | |||||
[0.022 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/AS/plugin.dll does not exist | |||||
[0.023 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/AudibleInstruments/plugin.dll does not exist | |||||
[0.023 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/BaconMusic/plugin.dll does not exist | |||||
[0.024 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Befaco/plugin.dll does not exist | |||||
[0.024 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Bidoo/plugin.dll does not exist | |||||
[0.025 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Bogaudio/plugin.dll does not exist | |||||
[0.025 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/BOKONTEPByteBeatMachine/plugin.dll does not exist | |||||
[0.026 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/cf/plugin.dll does not exist | |||||
[0.027 info src/plugin.cpp:155] Loaded plugin dBiz 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll | |||||
[0.027 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/DHE-Modules/plugin.dll does not exist | |||||
[0.027 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/DrumKit/plugin.dll does not exist | |||||
[0.028 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/ErraticInstruments/plugin.dll does not exist | |||||
[0.029 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/ESeries/plugin.dll does not exist | |||||
[0.029 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/FrozenWasteland/plugin.dll does not exist | |||||
[0.030 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Fundamental/plugin.dll does not exist | |||||
[0.030 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Gratrix/plugin.dll does not exist | |||||
[0.031 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/HetrickCV/plugin.dll does not exist | |||||
[0.031 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/huaba/plugin.dll does not exist | |||||
[0.032 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/JW-Modules/plugin.dll does not exist | |||||
[0.032 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Koralfx-Modules/plugin.dll does not exist | |||||
[0.033 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/LindenbergResearch/plugin.dll does not exist | |||||
[0.033 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/LOGinstruments/plugin.dll does not exist | |||||
[0.034 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/ML_modules/plugin.dll does not exist | |||||
[0.034 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/moDllz/plugin.dll does not exist | |||||
[0.035 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/modular80/plugin.dll does not exist | |||||
[0.035 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/mscHack/plugin.dll does not exist | |||||
[0.036 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/mtsch-plugins/plugin.dll does not exist | |||||
[0.036 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/NauModular/plugin.dll does not exist | |||||
[0.037 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Ohmer/plugin.dll does not exist | |||||
[0.037 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Qwelk/plugin.dll does not exist | |||||
[0.038 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/RJModules/plugin.dll does not exist | |||||
[0.038 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/SerialRacker/plugin.dll does not exist | |||||
[0.039 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/SonusModular/plugin.dll does not exist | |||||
[0.039 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Southpole-parasites/plugin.dll does not exist | |||||
[0.040 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/squinkylabs-plug1/plugin.dll does not exist | |||||
[0.040 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/SubmarineFree/plugin.dll does not exist | |||||
[0.041 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template/plugin.dll does not exist | |||||
[0.042 info src/plugin.cpp:155] Loaded plugin Template_shared 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll | |||||
[0.043 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/trowaSoft/plugin.dll does not exist | |||||
[0.043 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/unless_modules/plugin.dll does not exist | |||||
[0.044 warn src/plugin.cpp:86] Plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Valley/plugin.dll does not exist | |||||
[0.044 info src/settings.cpp:211] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json | |||||
[0.062 info src/window.cpp:579] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/DejaVuSans.ttf | |||||
[0.063 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_146097_cc.svg | |||||
[0.064 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_31859_cc.svg | |||||
[0.065 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343816_cc.svg | |||||
[0.066 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343811_cc.svg | |||||
[0.067 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1084369_cc.svg | |||||
[0.068 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1745061_cc.svg | |||||
[0.069 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1240789_cc.svg | |||||
[0.070 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_305536_cc.svg | |||||
[0.071 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_468341_cc.svg | |||||
[0.071 info src/settings.cpp:211] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json | |||||
[0.085 info src/app/RackWidget.cpp:196] Loading patch from string | |||||
[0.090 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/AudioInterface.svg | |||||
[0.091 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/ScrewSilver.svg | |||||
[0.092 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ301M.svg | |||||
[0.093 info src/window.cpp:579] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/ShareTechMono-Regular.ttf | |||||
[0.098 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/MIDIToCVInterface.svg | |||||
[0.105 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/XCO.svg | |||||
[0.106 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_68px.svg | |||||
[0.106 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_16px.svg | |||||
[0.107 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_0.svg | |||||
[0.108 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_1.svg | |||||
[0.109 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_38px.svg | |||||
[0.110 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_0.svg | |||||
[0.111 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_1.svg | |||||
[0.112 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/port.svg | |||||
[0.117 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCA.svg | |||||
[0.119 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundLargeBlackKnob.svg | |||||
[0.124 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCF.svg | |||||
[0.125 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundHugeBlackKnob.svg | |||||
[0.131 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/ADSR.svg | |||||
[0.131 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-hexscrew.svg | |||||
[0.132 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePot.svg | |||||
[0.133 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePotHandle.svg | |||||
[0.134 info src/window.cpp:634] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-PJ301M.svg | |||||
[18.319 info src/app/RackWidget.cpp:158] Saving patch to string |
@@ -11,7 +11,7 @@ | |||||
"wireOpacity": 50.0, | "wireOpacity": 50.0, | ||||
"wireTension": 0.97, | "wireTension": 0.97, | ||||
"zoom": 1.0, | "zoom": 1.0, | ||||
"refreshRate": 0, | |||||
"refreshRate": 30, | |||||
"vsync": true, | "vsync": true, | ||||
"allowCursorLock": true, | "allowCursorLock": true, | ||||
"sampleRate": 44100.0, | "sampleRate": 44100.0, | ||||