Browse Source

Merge bfea9d763a into 542b84354d

pull/575/merge
Antoine Villeret GitHub 7 years ago
parent
commit
e348a22764
8 changed files with 79 additions and 22 deletions
  1. +3
    -3
      Makefile
  2. +1
    -1
      compile.mk
  3. +18
    -12
      dep/Makefile
  4. +9
    -1
      include/engine.hpp
  5. +3
    -0
      include/plugin.hpp
  6. +31
    -3
      include/rack.hpp
  7. +9
    -0
      src/app.cpp
  8. +5
    -2
      src/engine.cpp

+ 3
- 3
Makefile View File

@@ -14,7 +14,7 @@ ifeq ($(ARCH), lin)
LDFLAGS += -rdynamic \
-lpthread -lGL -ldl \
$(shell pkg-config --libs gtk+-2.0) \
-Ldep/lib -lGLEW -lglfw -ljansson -lspeexdsp -lcurl -lzip -lrtaudio -lrtmidi -lcrypto -lssl
-Ldep/lib -lGLEW -lglfw -ljansson -lspeexdsp -lcurl -lzip -lrtaudio -lrtmidi -lcrypto -lssl -lossia
TARGET = Rack
endif

@@ -23,7 +23,7 @@ ifeq ($(ARCH), mac)
CXXFLAGS += -DAPPLE -stdlib=libc++
LDFLAGS += -stdlib=libc++ -lpthread -ldl \
-framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo \
-Ldep/lib -lGLEW -lglfw -ljansson -lspeexdsp -lcurl -lzip -lrtaudio -lrtmidi -lcrypto -lssl
-Ldep/lib -lGLEW -lglfw -ljansson -lspeexdsp -lcurl -lzip -lrtaudio -lrtmidi -lcrypto -lssl -lossia
TARGET = Rack
BUNDLE = dist/$(TARGET).app
endif
@@ -34,7 +34,7 @@ ifeq ($(ARCH), win)
-Wl,--export-all-symbols,--out-implib,libRack.a -mwindows \
-lgdi32 -lopengl32 -lcomdlg32 -lole32 \
-Ldep/lib -lglew32 -lglfw3dll -lcurl -lzip -lrtaudio -lrtmidi -lcrypto -lssl \
-Wl,-Bstatic -ljansson -lspeexdsp
-Wl,-Bstatic -ljansson -lspeexdsp -lossia
TARGET = Rack.exe
OBJECTS = Rack.res
endif


+ 1
- 1
compile.mk View File

@@ -11,7 +11,7 @@ FLAGS += -Wall -Wextra -Wno-unused-parameter
ifneq ($(ARCH), mac)
CXXFLAGS += -Wsuggest-override
endif
CXXFLAGS += -std=c++11
CXXFLAGS += -std=c++14


ifeq ($(ARCH), lin)


+ 18
- 12
dep/Makefile View File

@@ -3,20 +3,14 @@ LOCAL = $(shell pwd)
# Arch-specifics
include ../arch.mk

FLAGS += -g -O3 -march=nocona

ifeq ($(ARCH),mac)
FLAGS += -mmacosx-version-min=10.7 -stdlib=libc++
LDFLAGS += -mmacosx-version-min=10.7 -stdlib=libc++
MACOS_FLAGS = -mmacosx-version-min=10.7 -stdlib=libc++
export CFLAGS = $(MACOS_FLAGS)
export CXXFLAGS = $(MACOS_FLAGS)
export CPPFLAGS = $(MACOS_FLAGS)
export LDFLAGS = $(MACOS_FLAGS)
endif

CFLAGS += $(FLAGS)
CXXFLAGS += $(FLAGS)
export CFLAGS
export CXXFLAGS
export LDFLAGS


# Commands
WGET = wget -nc
UNTAR = tar xf
@@ -38,6 +32,7 @@ ifeq ($(ARCH),lin)
rtmidi = lib/librtmidi.so
rtaudio = lib/librtaudio.so
openssl = lib/libssl.so
ossia = lib/libossia.so
endif

ifeq ($(ARCH),mac)
@@ -50,6 +45,7 @@ ifeq ($(ARCH),mac)
rtmidi = lib/librtmidi.dylib
rtaudio = lib/librtaudio.dylib
openssl = lib/libssl.dylib
ossia = lib/libossia.so
endif

ifeq ($(ARCH),win)
@@ -62,6 +58,7 @@ ifeq ($(ARCH),win)
rtmidi = bin/librtmidi-4.dll
rtaudio = bin/librtaudio.dll
openssl = bin/libssl-1_1-x64.dll
ossia = bin/ossia.dll
endif

# Library configuration
@@ -80,7 +77,7 @@ endif

.NOTPARALLEL:

all: $(glew) $(glfw) $(jansson) $(libspeexdsp) $(libcurl) $(libzip) $(rtmidi) $(rtaudio)
all: $(glew) $(glfw) $(jansson) $(libspeexdsp) $(libcurl) $(libzip) $(rtmidi) $(rtaudio) $(ossia)
@echo ""
@echo "#######################################"
@echo "# Built all dependencies successfully #"
@@ -151,5 +148,14 @@ $(rtaudio):
$(MAKE) -C rtaudio/cmakebuild
$(MAKE) -C rtaudio/cmakebuild install

$(ossia):
git clone https://github.com/OSSIA/libossia --depth=1
mkdir -p build-libossia && cd build-libossia && $(CMAKE) \
-DCMAKE_INSTALL_PREFIX="$(LOCAL)" -DOSSIA_PD=OFF \
-DOSSIA_COTIRE=OFF -DOSSIA_PROTOCOL_MIDI=OFF \
-DOSSIA_EDITOR=OFF -DBUILD_TYPE=Release ../libossia && \
$(MAKE) -j4 && \
$(MAKE) install

clean:
git clean -ffdx

+ 9
- 1
include/engine.hpp View File

@@ -3,12 +3,17 @@
#include "util.hpp"
#include <jansson.h>

#include <ossia/network/network.hpp>
#include <ossia/network/oscquery/oscquery_server.hpp>

namespace rack {

extern ossia::net::generic_device& root_dev();

struct Param {
float value = 0.0;
std::string name = "param.1";
ossia::net::parameter_base* ossia_param;
};

struct Light {
@@ -41,7 +46,6 @@ struct Output {
Light plugLights[2];
};


struct Module {
std::vector<Param> params;
std::vector<Input> inputs;
@@ -49,6 +53,8 @@ struct Module {
std::vector<Light> lights;
/** For CPU usage meter */
float cpuTime = 0.0;
ossia::net::node_base* node{};

/** Deprecated, use constructor below this one */
Module() DEPRECATED {}
@@ -58,6 +64,8 @@ struct Module {
inputs.resize(numInputs);
outputs.resize(numOutputs);
lights.resize(numLights);
node = &ossia::net::create_node(rack::root_dev(),"module");
}
virtual ~Module() {}



+ 3
- 0
include/plugin.hpp View File

@@ -3,6 +3,7 @@
#include <list>
#include "tags.hpp"

#include <ossia/network/network.hpp>

namespace rack {

@@ -55,6 +56,8 @@ struct Model {

virtual ~Model() {}
virtual ModuleWidget *createModuleWidget() { return NULL; }
ossia::net::node_base* node;
};

void pluginInit();


+ 31
- 3
include/rack.hpp View File

@@ -8,7 +8,8 @@
#include "gui.hpp"
#include "app.hpp"
#include "components.hpp"

#include <iostream>
#include <sstream>

namespace rack {

@@ -24,6 +25,8 @@ Model *createModel(std::string manufacturer, std::string slug, std::string name,
ModuleWidget *createModuleWidget() override {
ModuleWidget *moduleWidget = new TModuleWidget();
moduleWidget->model = this;
moduleWidget->module->node->set_name(name);
return moduleWidget;
}
};
@@ -43,13 +46,38 @@ Widget *createScrew(Vec pos) {
}

template <class TParamWidget>
ParamWidget *createParam(Vec pos, Module *module, int paramId, float minValue, float maxValue, float defaultValue) {
ParamWidget *createParam(Vec pos, Module *module, int paramId, float minValue, float maxValue, float defaultValue, std::string name = std::string("")) {
ParamWidget *param = new TParamWidget();
param->box.pos = pos;
param->module = module;
param->paramId = paramId;
param->setLimits(minValue, maxValue);
auto& p = module->params[paramId];

if (name == "")
{
std::stringstream ss;
ss << "param." << paramId;
name = ss.str();
}
auto& p_node = ossia::net::create_node(*module->node, name);
p.ossia_param = p_node.create_parameter(ossia::val_type::FLOAT);
p.ossia_param->set_domain(ossia::make_domain(minValue,maxValue));
p.ossia_param->set_bounding(ossia::bounding_mode::CLIP);
p.ossia_param->push_value(defaultValue);
p.ossia_param->set_default_value(defaultValue);
p.ossia_param->add_callback([param] (const ossia::value& v) {
auto& p = param->module->params[param->paramId];
param->value = v.get<float>();
p.value = param->value;
if ( auto fbw = dynamic_cast<FramebufferWidget*>(param))
fbw->dirty = true;
});
param->setLimits(minValue, maxValue);
param->setDefaultValue(defaultValue);
return param;
}



+ 9
- 0
src/app.cpp View File

@@ -1,5 +1,7 @@
#include "app.hpp"

#include <ossia/network/network.hpp>
#include <ossia/network/oscquery/oscquery_server.hpp>

namespace rack {

@@ -28,5 +30,12 @@ void sceneDestroy() {
gScene = NULL;
}

ossia::net::generic_device& root_dev(){
static ossia::net::generic_device dev{
std::make_unique<ossia::oscquery::oscquery_server_protocol>(1234, 5678),
"VCV-Rack"};

return dev;
}

} // namespace rack

+ 5
- 2
src/engine.cpp View File

@@ -11,7 +11,6 @@
#include "engine.hpp"
#include "util.hpp"


namespace rack {

float sampleRate;
@@ -33,7 +32,6 @@ static Module *smoothModule = NULL;
static int smoothParamId;
static float smoothValue;


float Light::getBrightness() {
return sqrtf(fmaxf(0.0, value));
}
@@ -76,11 +74,13 @@ static void engineStep() {
float delta = smoothValue - value;
if (fabsf(delta) < snap) {
smoothModule->params[smoothParamId].value = smoothValue;
smoothModule->params[smoothParamId].ossia_param->push_value(smoothValue);
smoothModule = NULL;
}
else {
value += delta * lambda * sampleTime;
smoothModule->params[smoothParamId].value = value;
smoothModule->params[smoothParamId].ossia_param->push_value(value);
}
}

@@ -240,6 +240,7 @@ void engineRemoveWire(Wire *wire) {

void engineSetParam(Module *module, int paramId, float value) {
module->params[paramId].value = value;
module->params[paramId].ossia_param->push_value(value);
}

void engineSetParamSmooth(Module *module, int paramId, float value) {
@@ -248,10 +249,12 @@ void engineSetParamSmooth(Module *module, int paramId, float value) {
// Since only one param can be smoothed at a time, if another param is currently being smoothed, skip to its final state
if (smoothModule && !(smoothModule == module && smoothParamId == paramId)) {
smoothModule->params[smoothParamId].value = smoothValue;
smoothModule->params[smoothParamId].ossia_param->push_value(smoothValue);
}
smoothModule = module;
smoothParamId = paramId;
smoothValue = value;
module->params[paramId].ossia_param->push_value(smoothValue);
}

void engineSetSampleRate(float newSampleRate) {


Loading…
Cancel
Save