kopia lustrzana https://github.com/jameshball/osci-render
Fix smoothing effect on sosci, fix noise on windows, make noise multi-coloured
rodzic
9e3659105a
commit
80250944d4
Plik binarny nie jest wyświetlany.
Przed Szerokość: | Wysokość: | Rozmiar: 1.1 KiB Po Szerokość: | Wysokość: | Rozmiar: 21 KiB |
Plik binarny nie jest wyświetlany.
Przed Szerokość: | Wysokość: | Rozmiar: 8.9 KiB Po Szerokość: | Wysokość: | Rozmiar: 84 KiB |
|
@ -47,7 +47,7 @@ void SosciAudioProcessor::processBlock(juce::AudioBuffer<float>& buffer, juce::M
|
|||
point = { x, y, brightness };
|
||||
}
|
||||
|
||||
for (auto& effect : effects) {
|
||||
for (auto& effect : permanentEffects) {
|
||||
point = effect->apply(sample, point);
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ uniform sampler2D uTexture5; //screen glow
|
|||
uniform float uExposure;
|
||||
uniform float uSaturation;
|
||||
uniform float uNoise;
|
||||
uniform float uTime;
|
||||
uniform float uRandom;
|
||||
uniform float uGlow;
|
||||
uniform float uAmbient;
|
||||
uniform float uFishEye;
|
||||
|
@ -26,8 +26,16 @@ vec3 desaturate(vec3 color, float factor) {
|
|||
return vec3(mix(color, gray, factor));
|
||||
}
|
||||
|
||||
float noise(in vec2 uv, in float time) {
|
||||
return (fract(sin(dot(uv, vec2(12.9898,78.233)*2.0 + time)) * 43758.5453)) - 0.5;
|
||||
float noise(vec2 texCoord, float time) {
|
||||
// Combine texture coordinate and time to create a unique seed
|
||||
float seed = dot(texCoord, vec2(12.9898, 78.233)) + time;
|
||||
|
||||
// Use fract and sin to generate a pseudo-random value
|
||||
return fract(sin(seed) * 43758.5453) - 0.5;
|
||||
}
|
||||
|
||||
vec4 max4(vec4 a, vec4 b) {
|
||||
return vec4(max(a.r, b.r), max(a.g, b.g), max(a.b, b.b), max(a.a, b.a));
|
||||
}
|
||||
|
||||
void main() {
|
||||
|
@ -49,7 +57,7 @@ void main() {
|
|||
if (uRealScreen > 0.5) {
|
||||
vec4 reflection = texture2D(uTexture4, vTexCoord);
|
||||
vec4 screenGlow = texture2D(uTexture5, vTexCoord);
|
||||
scatter += screenGlow * reflection * max(1.0 - uAmbient, 0.0);
|
||||
scatter += max4(screenGlow * reflection * max(1.0 - uAmbient, 0.0), vec4(0.0));
|
||||
}
|
||||
|
||||
float light = line.r + uGlow * 1.5 * screen.g * screen.g * tightGlow.r;
|
||||
|
@ -62,7 +70,10 @@ void main() {
|
|||
gl_FragColor.rgb += ambient * screen.rgb;
|
||||
}
|
||||
gl_FragColor.rgb = desaturate(gl_FragColor.rgb, 1.0 - uSaturation);
|
||||
gl_FragColor.rgb += uNoise * noise(gl_FragCoord.xy, uTime);
|
||||
float noiseR = noise(gl_FragCoord.xy * 0.01, uRandom * 100.0);
|
||||
float noiseG = noise(gl_FragCoord.xy * 0.005, uRandom * 50.0);
|
||||
float noiseB = noise(gl_FragCoord.xy * 0.07, uRandom * 80.0);
|
||||
gl_FragColor.rgb += uNoise * vec3(noiseR, noiseG, noiseB);
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1005,18 +1005,6 @@ void VisualiserComponent::drawCRT() {
|
|||
setShader(glowShader.get());
|
||||
setOffsetAndScale(glowShader.get());
|
||||
drawTexture({blur3Texture});
|
||||
|
||||
// blur the glow texture to blend it nicely. blur3Texture and blur1Texture are reserved, so we can't use them
|
||||
// horizontal 512x512
|
||||
activateTargetTexture(blur2Texture);
|
||||
setShader(wideBlurShader.get());
|
||||
wideBlurShader->setUniform("uOffset", 1.0f / 512.0f, 0.0f);
|
||||
drawTexture({glowTexture});
|
||||
|
||||
// vertical 512x512
|
||||
activateTargetTexture(glowTexture);
|
||||
wideBlurShader->setUniform("uOffset", 0.0f, 1.0f / 512.0f);
|
||||
drawTexture({blur2Texture});
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1025,7 +1013,7 @@ void VisualiserComponent::drawCRT() {
|
|||
outputShader->setUniform("uExposure", 0.25f);
|
||||
outputShader->setUniform("uSaturation", (float) settings.getSaturation());
|
||||
outputShader->setUniform("uNoise", (float) settings.getNoise());
|
||||
outputShader->setUniform("uTime", time);
|
||||
outputShader->setUniform("uRandom", juce::Random::getSystemRandom().nextFloat());
|
||||
outputShader->setUniform("uGlow", (float) settings.getGlow());
|
||||
outputShader->setUniform("uAmbient", (float) settings.getAmbient());
|
||||
setOffsetAndScale(outputShader.get());
|
||||
|
@ -1198,8 +1186,6 @@ void VisualiserComponent::paint(juce::Graphics& g) {
|
|||
}
|
||||
|
||||
void VisualiserComponent::renderScope(const std::vector<float>& xPoints, const std::vector<float>& yPoints, const std::vector<float>& zPoints) {
|
||||
time += 0.01f;
|
||||
|
||||
if (screenType != settings.getScreenType()) {
|
||||
screenType = settings.getScreenType();
|
||||
#if SOSCI_FEATURES
|
||||
|
|
|
@ -157,8 +157,6 @@ private:
|
|||
|
||||
juce::OpenGLContext openGLContext;
|
||||
|
||||
float time = 0;
|
||||
|
||||
juce::Rectangle<int> buttonRow;
|
||||
juce::Rectangle<int> viewportArea;
|
||||
|
||||
|
|
|
@ -147,6 +147,10 @@
|
|||
file="Source/visualiser/BlurFragmentShader.glsl"/>
|
||||
<FILE id="Fimn0E" name="BlurVertexShader.glsl" compile="0" resource="0"
|
||||
file="Source/visualiser/BlurVertexShader.glsl"/>
|
||||
<FILE id="ahlSbF" name="GlowFragmentShader.glsl" compile="0" resource="0"
|
||||
file="Source/visualiser/GlowFragmentShader.glsl"/>
|
||||
<FILE id="yKcFST" name="GlowVertexShader.glsl" compile="0" resource="0"
|
||||
file="Source/visualiser/GlowVertexShader.glsl"/>
|
||||
<FILE id="R6Yr8V" name="LineFragmentShader.glsl" compile="0" resource="0"
|
||||
file="Source/visualiser/LineFragmentShader.glsl"/>
|
||||
<FILE id="aK7kZN" name="LineVertexShader.glsl" compile="0" resource="0"
|
||||
|
|
Ładowanie…
Reference in New Issue