Removed TIMEPOS requirement;

Removed rendundant parameter changes;
Rescaled parameters (now 0.0 to 1.0);
Removed double float conversion warnings;
Refactored tablet data copy;
This commit is contained in:
yaw-man 2022-08-13 12:02:47 -03:00
parent e3c74ff15d
commit e16fda511d
4 changed files with 51 additions and 47 deletions

View File

@ -9,7 +9,6 @@
#define DISTRHO_PLUGIN_IS_RT_SAFE 1 #define DISTRHO_PLUGIN_IS_RT_SAFE 1
#define DISTRHO_PLUGIN_NUM_INPUTS 0 #define DISTRHO_PLUGIN_NUM_INPUTS 0
#define DISTRHO_PLUGIN_NUM_OUTPUTS 2 #define DISTRHO_PLUGIN_NUM_OUTPUTS 2
#define DISTRHO_PLUGIN_WANT_TIMEPOS 1
#define DISTRHO_UI_USE_NANOVG 1 #define DISTRHO_UI_USE_NANOVG 1
// only checking if supported, not actually used // only checking if supported, not actually used

View File

@ -29,40 +29,32 @@ protected:
parameter.hints = kParameterIsAutomable; parameter.hints = kParameterIsAutomable;
parameter.ranges.def = 0.0f; parameter.ranges.def = 0.0f;
parameter.ranges.min = 0.0f; parameter.ranges.min = 0.0f;
parameter.ranges.max = 16777216.0f; parameter.ranges.max = 1.0f;
switch (index) switch (index)
{ {
case kParameterTabletX: case kParameterTabletX:
parameter.name = "x"; parameter.name = "x";
parameter.symbol = "x"; parameter.symbol = "x";
parameter.ranges.min = 0.0f;
parameter.ranges.max = 999.0f;
break; break;
case kParameterTabletY: case kParameterTabletY:
parameter.name = "y"; parameter.name = "y";
parameter.symbol = "y"; parameter.symbol = "y";
parameter.ranges.min = 0.0f;
parameter.ranges.max = 999.0f;
break; break;
case kParameterTabletZ: case kParameterTabletZ:
parameter.name = "z"; parameter.name = "z";
parameter.symbol = "z"; parameter.symbol = "z";
parameter.ranges.min = 0.0f;
parameter.ranges.max = 999.0f;
break; break;
case kParameterTabletPressure: case kParameterTabletPressure:
parameter.name = "p"; parameter.name = "p";
parameter.symbol = "p"; parameter.symbol = "p";
parameter.ranges.min = 0.0f;
parameter.ranges.max = 999.0f;
break; break;
case kParameterTime: case kParameterTime:
parameter.name = "t"; parameter.name = "t";
parameter.symbol = "t"; parameter.symbol = "t";
parameter.ranges.min = 0.0f; parameter.ranges.min = 0.0f;
parameter.ranges.max = 999.0f; parameter.ranges.max = 30.0f;
parameter.hints |= kParameterIsOutput; parameter.hints = kParameterIsOutput;
break; break;
} }
} }
@ -83,14 +75,14 @@ protected:
fParameters[idx] = val; fParameters[idx] = val;
switch (idx) { switch (idx) {
case kParameterTabletX: case kParameterTabletX:
period = 0.02f * (0.001f * val) * sampleRate; period = 0.02f * val * static_cast<float>(sampleRate);
break; break;
case kParameterTabletY: case kParameterTabletY:
break; break;
case kParameterTabletZ: case kParameterTabletZ:
break; break;
case kParameterTabletPressure: case kParameterTabletPressure:
volume = 0.001f * val; volume = val;
break; break;
} }
} }
@ -109,9 +101,8 @@ protected:
} }
} }
// Force UI to repaint via parameter change callback. parity = !parity;
const TimePosition& timePos(getTimePosition()); fParameters[kParameterTime] += parity ? 1 : -1;
fParameters[kParameterTime] = timePos.bbt.tick;
} }
private: private:
@ -119,7 +110,8 @@ private:
float period = 0.f; float period = 0.f;
float counter = 0.f; float counter = 0.f;
float volume = 0.f; float volume = 0.f;
float sampleRate; double sampleRate;
bool parity = false;
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(TabPlugin) DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(TabPlugin)
}; };

View File

@ -26,17 +26,19 @@ public:
UnloadWintab(); UnloadWintab();
} }
void NewPacket() { bool NewPacket() {
//Serial number of newest packet. //Serial number of newest packet.
UINT oldest, newest; UINT oldest, newest;
//This function returns false when it fails. //This function returns false when it fails
//which may happen with a full or empty queue.
if (!gpWTQueuePacketsEx(hctx, &oldest, &newest)) { if (!gpWTQueuePacketsEx(hctx, &oldest, &newest)) {
//Queue full, flush it all. //Queue may be full, flush it all just in case.
gpWTPacketsGet(hctx, gpWTQueueSizeGet(hctx), nullptr); gpWTPacketsGet(hctx, gpWTQueueSizeGet(hctx), nullptr);
return false;
} }
//Store newest packet in pkt, flush older packets. //Store newest packet in pkt, flush older packets.
gpWTPacket(hctx, newest, &pkt); return gpWTPacket(hctx, newest, &pkt);
} }
bool wintabAvailable = false; bool wintabAvailable = false;
@ -74,21 +76,21 @@ private:
ctx.lcInExtX = TabletX.axMax; ctx.lcInExtX = TabletX.axMax;
ctx.lcOutOrgX = TabletX.axMin; ctx.lcOutOrgX = TabletX.axMin;
ctx.lcOutExtX = TabletX.axMax; ctx.lcOutExtX = TabletX.axMax;
extX = TabletX.axMax; extX = static_cast<float>(TabletX.axMax);
ctx.lcInOrgY = TabletY.axMin; ctx.lcInOrgY = TabletY.axMin;
ctx.lcInExtY = TabletY.axMax; ctx.lcInExtY = TabletY.axMax;
ctx.lcOutOrgY = TabletY.axMin; ctx.lcOutOrgY = TabletY.axMin;
ctx.lcOutExtY = TabletY.axMax; ctx.lcOutExtY = TabletY.axMax;
extY = TabletY.axMax; extY = static_cast<float>(TabletY.axMax);
ctx.lcInOrgZ = TabletZ.axMin; ctx.lcInOrgZ = TabletZ.axMin;
ctx.lcInExtZ = TabletZ.axMax; ctx.lcInExtZ = TabletZ.axMax;
ctx.lcOutOrgZ = TabletZ.axMin; ctx.lcOutOrgZ = TabletZ.axMin;
ctx.lcOutExtZ = TabletZ.axMax; ctx.lcOutExtZ = TabletZ.axMax;
extZ = TabletZ.axMax; extZ = static_cast<float>(TabletZ.axMax);
extP = TabletPressure.axMax; extP = static_cast<float>(TabletPressure.axMax);
hctx = gpWTOpenA(hwnd, &ctx, FALSE); hctx = gpWTOpenA(hwnd, &ctx, FALSE);

View File

@ -31,6 +31,34 @@ public:
protected: protected:
void getTabletData()
{
//Lire donnés de la tablet
tab.NewPacket();
float x = static_cast<float>(tab.pkt.pkX) / tab.extX;
float y = static_cast<float>(tab.pkt.pkY) / tab.extY;
float z = static_cast<float>(tab.pkt.pkZ) / tab.extZ;
float p = static_cast<float>(tab.pkt.pkNormalPressure) / tab.extP;
if (x != fParameters[kParameterTabletX]) {
setParameterValue(kParameterTabletX, x);
fParameters[kParameterTabletX] = x;
}
if (y != fParameters[kParameterTabletY]) {
setParameterValue(kParameterTabletY, y);
fParameters[kParameterTabletY] = y;
}
if (z != fParameters[kParameterTabletZ]) {
setParameterValue(kParameterTabletZ, z);
fParameters[kParameterTabletZ] = z;
}
if (p != fParameters[kParameterTabletPressure]) {
setParameterValue(kParameterTabletPressure, p);
fParameters[kParameterTabletPressure] = p;
}
}
void parameterChanged(uint32_t index, float value) override void parameterChanged(uint32_t index, float value) override
{ {
@ -39,23 +67,7 @@ protected:
return; return;
} }
//Lire donnés de la tablet getTabletData();
tab.NewPacket();
float x = 1000.0f * static_cast<float>(tab.pkt.pkX) / tab.extX;
float y = 1000.0f * static_cast<float>(tab.pkt.pkY) / tab.extY;
float z = 1000.0f * static_cast<float>(tab.pkt.pkZ) / tab.extZ;
float p = 1000.0f * static_cast<float>(tab.pkt.pkNormalPressure) / tab.extP;
fParameters[kParameterTabletX] = x;
fParameters[kParameterTabletY] = y;
fParameters[kParameterTabletZ] = z;
fParameters[kParameterTabletPressure] = p;
setParameterValue(kParameterTabletX, x);
setParameterValue(kParameterTabletY, y);
setParameterValue(kParameterTabletZ, z);
setParameterValue(kParameterTabletPressure, p);
repaint(); repaint();
} }
@ -113,10 +125,9 @@ protected:
void drawCircle(float x, float y, float z, float p) { void drawCircle(float x, float y, float z, float p) {
static constexpr float circleRadius = 25.f; static constexpr float circleRadius = 25.f;
x *= getWidth() * 0.001f; x *= getWidth();
y = (1000.f - y) * getHeight() * 0.001f; y = (1.f - y) * getHeight();
z = 1.f - z * 0.001f; z = 1.f - z;
p *= 0.001f;
beginPath(); beginPath();
strokeColor(1.f, 1.f, 1.f, 0.5f); strokeColor(1.f, 1.f, 1.f, 0.5f);