kopia lustrzana https://github.com/jameshball/osci-render
Add focus
rodzic
d1be10bd5a
commit
35aa8ded56
|
@ -106,6 +106,7 @@
|
||||||
brightness : 0.0,
|
brightness : 0.0,
|
||||||
intensity: 0.02,
|
intensity: 0.02,
|
||||||
saturation: 1.0,
|
saturation: 1.0,
|
||||||
|
focus: 0.01,
|
||||||
hue : 125,
|
hue : 125,
|
||||||
invertXY : false,
|
invertXY : false,
|
||||||
grid : true,
|
grid : true,
|
||||||
|
@ -261,19 +262,15 @@
|
||||||
vec2 dir = (aEndPos-aStartPos)*uGain;
|
vec2 dir = (aEndPos-aStartPos)*uGain;
|
||||||
uvl.z = length(dir);
|
uvl.z = length(dir);
|
||||||
|
|
||||||
if (uvl.z > EPS)
|
if (uvl.z > EPS) {
|
||||||
{
|
|
||||||
dir = dir / uvl.z;
|
dir = dir / uvl.z;
|
||||||
vSize = 0.006/pow(uvl.z,0.08);
|
} else {
|
||||||
}
|
// If the segment is too short, just draw a square
|
||||||
else
|
|
||||||
{
|
|
||||||
// If the segment is too short, just draw a square
|
|
||||||
dir = vec2(1.0, 0.0);
|
dir = vec2(1.0, 0.0);
|
||||||
vSize = 0.006/pow(EPS,0.08);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vSize = uSize;
|
vSize = uSize;
|
||||||
|
float intensity = 0.015 * uIntensity / uSize;
|
||||||
vec2 norm = vec2(-dir.y, dir.x);
|
vec2 norm = vec2(-dir.y, dir.x);
|
||||||
|
|
||||||
if (idx >= 2.0) {
|
if (idx >= 2.0) {
|
||||||
|
@ -291,7 +288,7 @@
|
||||||
float side = (mod(idx, 2.0)-0.5)*2.0;
|
float side = (mod(idx, 2.0)-0.5)*2.0;
|
||||||
uvl.y = side * vSize;
|
uvl.y = side * vSize;
|
||||||
|
|
||||||
uvl.w *= uIntensity * mix(1.0-uFadeAmount, 1.0, floor(aIdx / 4.0 + 0.5)/uNEdges);
|
uvl.w *= intensity * mix(1.0-uFadeAmount, 1.0, floor(aIdx / 4.0 + 0.5)/uNEdges);
|
||||||
|
|
||||||
vec4 pos = vec4((current+(tang*dir+norm*side)*vSize)*uInvert,0.0,1.0);
|
vec4 pos = vec4((current+(tang*dir+norm*side)*vSize)*uInvert,0.0,1.0);
|
||||||
gl_Position = pos;
|
gl_Position = pos;
|
||||||
|
|
|
@ -43,7 +43,6 @@ var Filter =
|
||||||
|
|
||||||
generateSmoothedSamples : function (oldSamples, samples, smoothedSamples)
|
generateSmoothedSamples : function (oldSamples, samples, smoothedSamples)
|
||||||
{
|
{
|
||||||
//this.createLanczosKernel();
|
|
||||||
var bufferSize = this.bufferSize;
|
var bufferSize = this.bufferSize;
|
||||||
var allSamples = this.allSamples;
|
var allSamples = this.allSamples;
|
||||||
var nSmoothedSamples = this.nSmoothedSamples;
|
var nSmoothedSamples = this.nSmoothedSamples;
|
||||||
|
@ -57,26 +56,6 @@ var Filter =
|
||||||
allSamples[bufferSize+i] = samples[i];
|
allSamples[bufferSize+i] = samples[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*for (var s= -a+1; s<a; s++)
|
|
||||||
{
|
|
||||||
for (var r=0; r<steps; r++)
|
|
||||||
{
|
|
||||||
if (r==0 && !(s==0)) continue;
|
|
||||||
var kernelPosition = -r+s*steps;
|
|
||||||
if (kernelPosition<0) k = K[-kernelPosition];
|
|
||||||
else k = K[kernelPosition];
|
|
||||||
|
|
||||||
var i = r;
|
|
||||||
var pStart = bufferSize - 2*a + s;
|
|
||||||
var pEnd = pStart + bufferSize;
|
|
||||||
for (var p=pStart; p<pEnd; p++)
|
|
||||||
{
|
|
||||||
smoothedSamples[i] += k * allSamples[p];
|
|
||||||
i += steps;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
var pStart = bufferSize - 2*a;
|
var pStart = bufferSize - 2*a;
|
||||||
var pEnd = pStart + bufferSize;
|
var pEnd = pStart + bufferSize;
|
||||||
var i = 0;
|
var i = 0;
|
||||||
|
@ -424,7 +403,7 @@ var Render =
|
||||||
gl.bindTexture(gl.TEXTURE_2D, this.screenTexture);
|
gl.bindTexture(gl.TEXTURE_2D, this.screenTexture);
|
||||||
gl.uniform1i(program.uScreen, 0);
|
gl.uniform1i(program.uScreen, 0);
|
||||||
|
|
||||||
gl.uniform1f(program.uSize, 0.015);
|
gl.uniform1f(program.uSize, controls.focus);
|
||||||
gl.uniform1f(program.uGain, Math.pow(2.0,controls.mainGain)*450/512);
|
gl.uniform1f(program.uGain, Math.pow(2.0,controls.mainGain)*450/512);
|
||||||
if (controls.invertXY) gl.uniform1f(program.uInvert, -1.0);
|
if (controls.invertXY) gl.uniform1f(program.uInvert, -1.0);
|
||||||
else gl.uniform1f(program.uInvert, 1.0);
|
else gl.uniform1f(program.uInvert, 1.0);
|
||||||
|
@ -680,6 +659,7 @@ function doScriptProcessor(bufferBase64) {
|
||||||
controls.intensity = settings.intensity;
|
controls.intensity = settings.intensity;
|
||||||
controls.persistence = settings.persistence;
|
controls.persistence = settings.persistence;
|
||||||
controls.saturation = settings.saturation;
|
controls.saturation = settings.saturation;
|
||||||
|
controls.focus = settings.focus;
|
||||||
controls.hue = settings.hue;
|
controls.hue = settings.hue;
|
||||||
controls.disableFilter = !settings.upsampling;
|
controls.disableFilter = !settings.upsampling;
|
||||||
let numChannels = settings.numChannels;
|
let numChannels = settings.numChannels;
|
||||||
|
|
|
@ -154,6 +154,7 @@ OscirenderAudioProcessor::OscirenderAudioProcessor()
|
||||||
permanentEffects.push_back(visualiserParameters.persistenceEffect);
|
permanentEffects.push_back(visualiserParameters.persistenceEffect);
|
||||||
permanentEffects.push_back(visualiserParameters.hueEffect);
|
permanentEffects.push_back(visualiserParameters.hueEffect);
|
||||||
permanentEffects.push_back(visualiserParameters.saturationEffect);
|
permanentEffects.push_back(visualiserParameters.saturationEffect);
|
||||||
|
permanentEffects.push_back(visualiserParameters.focusEffect);
|
||||||
|
|
||||||
for (int i = 0; i < 26; i++) {
|
for (int i = 0; i < 26; i++) {
|
||||||
addLuaSlider();
|
addLuaSlider();
|
||||||
|
|
|
@ -61,9 +61,9 @@ SosciPluginEditor::SosciPluginEditor(SosciAudioProcessor& p)
|
||||||
visualiserSettingsWindow.setUsingNativeTitleBar(true);
|
visualiserSettingsWindow.setUsingNativeTitleBar(true);
|
||||||
#endif
|
#endif
|
||||||
visualiserSettings.setLookAndFeel(&getLookAndFeel());
|
visualiserSettings.setLookAndFeel(&getLookAndFeel());
|
||||||
visualiserSettings.setSize(550, 280);
|
visualiserSettings.setSize(550, 340);
|
||||||
visualiserSettingsWindow.setContentNonOwned(&visualiserSettings, true);
|
visualiserSettingsWindow.setContentNonOwned(&visualiserSettings, true);
|
||||||
visualiserSettingsWindow.centreWithSize(550, 280);
|
visualiserSettingsWindow.centreWithSize(550, 340);
|
||||||
|
|
||||||
setSize(750, 750);
|
setSize(750, 750);
|
||||||
setResizable(true, true);
|
setResizable(true, true);
|
||||||
|
|
|
@ -25,6 +25,7 @@ SosciAudioProcessor::SosciAudioProcessor()
|
||||||
allEffects.push_back(parameters.persistenceEffect);
|
allEffects.push_back(parameters.persistenceEffect);
|
||||||
allEffects.push_back(parameters.hueEffect);
|
allEffects.push_back(parameters.hueEffect);
|
||||||
allEffects.push_back(parameters.saturationEffect);
|
allEffects.push_back(parameters.saturationEffect);
|
||||||
|
allEffects.push_back(parameters.focusEffect);
|
||||||
|
|
||||||
for (auto effect : allEffects) {
|
for (auto effect : allEffects) {
|
||||||
for (auto effectParameter : effect->parameters) {
|
for (auto effectParameter : effect->parameters) {
|
||||||
|
|
|
@ -9,6 +9,7 @@ VisualiserSettings::VisualiserSettings(VisualiserParameters& parameters, int num
|
||||||
addAndMakeVisible(persistence);
|
addAndMakeVisible(persistence);
|
||||||
addAndMakeVisible(hue);
|
addAndMakeVisible(hue);
|
||||||
addAndMakeVisible(saturation);
|
addAndMakeVisible(saturation);
|
||||||
|
addAndMakeVisible(focus);
|
||||||
addAndMakeVisible(graticuleToggle);
|
addAndMakeVisible(graticuleToggle);
|
||||||
addAndMakeVisible(smudgeToggle);
|
addAndMakeVisible(smudgeToggle);
|
||||||
addAndMakeVisible(upsamplingToggle);
|
addAndMakeVisible(upsamplingToggle);
|
||||||
|
@ -18,6 +19,7 @@ VisualiserSettings::VisualiserSettings(VisualiserParameters& parameters, int num
|
||||||
persistence.setSliderOnValueChange();
|
persistence.setSliderOnValueChange();
|
||||||
hue.setSliderOnValueChange();
|
hue.setSliderOnValueChange();
|
||||||
saturation.setSliderOnValueChange();
|
saturation.setSliderOnValueChange();
|
||||||
|
focus.setSliderOnValueChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
VisualiserSettings::~VisualiserSettings() {}
|
VisualiserSettings::~VisualiserSettings() {}
|
||||||
|
@ -30,6 +32,7 @@ void VisualiserSettings::resized() {
|
||||||
persistence.setBounds(area.removeFromTop(rowHeight));
|
persistence.setBounds(area.removeFromTop(rowHeight));
|
||||||
hue.setBounds(area.removeFromTop(rowHeight));
|
hue.setBounds(area.removeFromTop(rowHeight));
|
||||||
saturation.setBounds(area.removeFromTop(rowHeight));
|
saturation.setBounds(area.removeFromTop(rowHeight));
|
||||||
|
focus.setBounds(area.removeFromTop(rowHeight));
|
||||||
graticuleToggle.setBounds(area.removeFromTop(rowHeight));
|
graticuleToggle.setBounds(area.removeFromTop(rowHeight));
|
||||||
smudgeToggle.setBounds(area.removeFromTop(rowHeight));
|
smudgeToggle.setBounds(area.removeFromTop(rowHeight));
|
||||||
upsamplingToggle.setBounds(area.removeFromTop(rowHeight));
|
upsamplingToggle.setBounds(area.removeFromTop(rowHeight));
|
||||||
|
@ -42,6 +45,7 @@ juce::var VisualiserSettings::getSettings() {
|
||||||
settings->setProperty("persistence", parameters.persistenceEffect->getActualValue() - 1.33);
|
settings->setProperty("persistence", parameters.persistenceEffect->getActualValue() - 1.33);
|
||||||
settings->setProperty("saturation", parameters.saturationEffect->getActualValue());
|
settings->setProperty("saturation", parameters.saturationEffect->getActualValue());
|
||||||
settings->setProperty("hue", parameters.hueEffect->getActualValue());
|
settings->setProperty("hue", parameters.hueEffect->getActualValue());
|
||||||
|
settings->setProperty("focus", parameters.focusEffect->getActualValue() / 100);
|
||||||
settings->setProperty("graticule", parameters.graticuleEnabled->getBoolValue());
|
settings->setProperty("graticule", parameters.graticuleEnabled->getBoolValue());
|
||||||
settings->setProperty("smudges", parameters.smudgesEnabled->getBoolValue());
|
settings->setProperty("smudges", parameters.smudgesEnabled->getBoolValue());
|
||||||
settings->setProperty("upsampling", parameters.upsamplingEnabled->getBoolValue());
|
settings->setProperty("upsampling", parameters.upsamplingEnabled->getBoolValue());
|
||||||
|
|
|
@ -59,6 +59,14 @@ public:
|
||||||
VERSION_HINT, 1.0, 0.0, 5.0
|
VERSION_HINT, 1.0, 0.0, 5.0
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
std::shared_ptr<Effect> focusEffect = std::make_shared<Effect>(
|
||||||
|
new EffectParameter(
|
||||||
|
"Focus",
|
||||||
|
"Controls how focused the electron beam of the oscilloscope is.",
|
||||||
|
"focus",
|
||||||
|
VERSION_HINT, 1.0, 0.01, 10.0
|
||||||
|
)
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
class VisualiserSettings : public juce::Component {
|
class VisualiserSettings : public juce::Component {
|
||||||
|
@ -78,6 +86,7 @@ private:
|
||||||
EffectComponent persistence{*parameters.persistenceEffect};
|
EffectComponent persistence{*parameters.persistenceEffect};
|
||||||
EffectComponent hue{*parameters.hueEffect};
|
EffectComponent hue{*parameters.hueEffect};
|
||||||
EffectComponent saturation{*parameters.saturationEffect};
|
EffectComponent saturation{*parameters.saturationEffect};
|
||||||
|
EffectComponent focus{*parameters.focusEffect};
|
||||||
|
|
||||||
jux::SwitchButton graticuleToggle{parameters.graticuleEnabled};
|
jux::SwitchButton graticuleToggle{parameters.graticuleEnabled};
|
||||||
jux::SwitchButton smudgeToggle{parameters.smudgesEnabled};
|
jux::SwitchButton smudgeToggle{parameters.smudgesEnabled};
|
||||||
|
|
Ładowanie…
Reference in New Issue