From 87cafe3a0556912c1f8e627d84ee3e20dfce8443 Mon Sep 17 00:00:00 2001 From: ESCA111 Date: Fri, 23 Jan 2026 11:58:37 +1300 Subject: [PATCH] start work on filterview not doing fft fuck that --- Source/CrushView.h | 25 ++++++++++++++ Source/FilterView.cpp | 79 +++++++++++++++++++++---------------------- Source/FilterView.h | 52 +++++++++++----------------- Source/OpenGLUtils.h | 26 -------------- 4 files changed, 83 insertions(+), 99 deletions(-) diff --git a/Source/CrushView.h b/Source/CrushView.h index 7bd2fe8..9c9156f 100644 --- a/Source/CrushView.h +++ b/Source/CrushView.h @@ -20,6 +20,31 @@ */ #define CRUSHVIEW_SAMPLECOUNT 200 +#define VERTEXSHADER R"(#version 330 core +in vec2 position; +in vec4 colour; +out vec4 fragcolour; +void main() +{ +gl_Position = vec4(position, 1, 1); +fragcolour = colour; +if(position.x<0){ + fragcolour.a = position.x+1; +} +else{ + fragcolour.a = 1-position.x; +} +} +)" + +#define FRAGSHADER R"(#version 330 core +in vec4 fragcolour; +void main() +{ +gl_FragColor = fragcolour; +} +)" + class CrushView : public juce::Component, public juce::OpenGLRenderer { public: diff --git a/Source/FilterView.cpp b/Source/FilterView.cpp index a6a350c..e358f06 100644 --- a/Source/FilterView.cpp +++ b/Source/FilterView.cpp @@ -32,13 +32,8 @@ FilterView::FilterView() { float startingColour[4] = {128.0f, 255.0f, 255.0f, 255.0f}; - waveform = generateSineWave(CRUSHVIEW_SAMPLECOUNT, 0, startingColour); - distortedWaveform = waveform; - vScale(distortedWaveform, 2, 0.75); - vTransform(distortedWaveform, -1, 0); - for(int i = 0; irelease(); + shaderProgramFilter->release(); + shaderProgramFilterFill->release(); shaderProgramBackground->release(); ctx.detach(); } -void FilterView::distortWaveForm(int samplerate){ - Vertex lastVertex; - int lastMultiplier = 0; - for (int i = 0; i>waveform.size(); i++){ - if(floor((float)i/samplerate)>lastMultiplier){ - lastMultiplier = floor((float)i/samplerate); - lastVertex = waveform[i]; - } - distortedWaveform[i] = lastVertex; - } -} - - void FilterView::paint (juce::Graphics& g) { ctx.triggerRepaint(); @@ -98,9 +81,11 @@ void FilterView::newOpenGLContextCreated(){ ctx.extensions.glGenBuffers(1, &vboBackground); ctx.extensions.glGenBuffers(1, &iboBackground); - ctx.extensions.glGenBuffers(1, &vbo); - ctx.extensions.glGenBuffers(1, &ibo); + ctx.extensions.glGenBuffers(1, &vboFilterFill); + ctx.extensions.glGenBuffers(1, &iboFilterFill); + ctx.extensions.glGenBuffers(1, &vboFilter); + ctx.extensions.glGenBuffers(1, &iboFilter); //BIND BACKGROUND BUFFERS @@ -111,19 +96,19 @@ void FilterView::newOpenGLContextCreated(){ ctx.extensions.glBindBuffer(juce::gl::GL_ELEMENT_ARRAY_BUFFER, iboBackground); ctx.extensions.glBufferData(juce::gl::GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * backgroundIndices.size(), backgroundIndices.data(), juce::gl::GL_STATIC_DRAW); - //BIND FFT BUFFERS + //BIND FILTER FILL BUFFERS - //BIND FILTER BUFFERS - - ctx.extensions.glBindBuffer(juce::gl::GL_ARRAY_BUFFER, vbo); + ctx.extensions.glBindBuffer(juce::gl::GL_ARRAY_BUFFER, vboFilterFill); ctx.extensions.glBufferData(juce::gl::GL_ARRAY_BUFFER, sizeof(Vertex)*filterVertices.size(), filterVertices.data(), juce::gl::GL_STATIC_DRAW); - ctx.extensions.glBindBuffer(juce::gl::GL_ELEMENT_ARRAY_BUFFER, ibo); + ctx.extensions.glBindBuffer(juce::gl::GL_ELEMENT_ARRAY_BUFFER, iboFilterFill); ctx.extensions.glBufferData(juce::gl::GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * filterIndices.size(), filterIndices.data(), juce::gl::GL_STATIC_DRAW); //SHADERS - vertexShader = VERTEXSHADER; - fragmentShader = FRAGSHADER; + vertexShaderFilter = "placeholder"; + fragmentShaderFilter = "placeholder"; + vertexShaderFilterFill = "placeholder"; + fragmentShaderFilterFill = "placeholder"; vertexShaderBackground = VERTEXSHADERBACKGROUND; fragmentShaderBackground = FRAGSHADERBACKGROUND; @@ -134,11 +119,17 @@ void FilterView::newOpenGLContextCreated(){ shaderProgramBackground->link(); shaderProgramBackground->use(); - shaderProgram.reset(new juce::OpenGLShaderProgram(ctx)); - shaderProgram->addVertexShader(vertexShader); - shaderProgram->addFragmentShader(fragmentShader); - shaderProgram->link(); - shaderProgram->use(); + shaderProgramFilterFill.reset(new juce::OpenGLShaderProgram(ctx)); + shaderProgramFilterFill->addVertexShader(vertexShaderFilterFill); + shaderProgramFilterFill->addFragmentShader(fragmentShaderFilterFill); + shaderProgramFilterFill->link(); + shaderProgramFilterFill->use(); + + shaderProgramFilter.reset(new juce::OpenGLShaderProgram(ctx)); + shaderProgramFilter->addVertexShader(vertexShaderFilter); + shaderProgramFilter->addFragmentShader(fragmentShaderFilter); + shaderProgramFilter->link(); + shaderProgramFilter->use(); } void FilterView::renderOpenGL(){ @@ -166,14 +157,22 @@ void FilterView::renderOpenGL(){ juce::gl::glDrawElements(juce::gl::GL_TRIANGLES, backgroundIndices.size(), juce::gl::GL_UNSIGNED_INT, nullptr); bgTexture.unbind(); - //RENDER FFT + //RENDER FILTER FILL + ctx.extensions.glBindBuffer(juce::gl::GL_ARRAY_BUFFER, vboFilterFill); + ctx.extensions.glBindBuffer(juce::gl::GL_ELEMENT_ARRAY_BUFFER, iboFilterFill); + + shaderProgramFilterFill->use(); + ctx.extensions.glVertexAttribPointer(0, 2, juce::gl::GL_FLOAT, juce::gl::GL_FALSE, sizeof(Vertex), nullptr); + ctx.extensions.glEnableVertexAttribArray(2); + ctx.extensions.glVertexAttribPointer(1, 4, juce::gl::GL_FLOAT, juce::gl::GL_FALSE, sizeof(Vertex), (GLvoid*)(sizeof(float)*2)); + ctx.extensions.glEnableVertexAttribArray(3); + juce::gl::glDrawElements(juce::gl::GL_LINE_STRIP, filterBackgroundIndices.size(), juce::gl::GL_UNSIGNED_INT, nullptr); //RENDER FILTER + ctx.extensions.glBindBuffer(juce::gl::GL_ARRAY_BUFFER, vboFilter); + ctx.extensions.glBindBuffer(juce::gl::GL_ELEMENT_ARRAY_BUFFER, iboFilter); - ctx.extensions.glBindBuffer(juce::gl::GL_ARRAY_BUFFER, vbo); - ctx.extensions.glBindBuffer(juce::gl::GL_ELEMENT_ARRAY_BUFFER, ibo); - - shaderProgram->use(); + shaderProgramFilter->use(); ctx.extensions.glVertexAttribPointer(0, 2, juce::gl::GL_FLOAT, juce::gl::GL_FALSE, sizeof(Vertex), nullptr); ctx.extensions.glEnableVertexAttribArray(2); ctx.extensions.glVertexAttribPointer(1, 4, juce::gl::GL_FLOAT, juce::gl::GL_FALSE, sizeof(Vertex), (GLvoid*)(sizeof(float)*2)); diff --git a/Source/FilterView.h b/Source/FilterView.h index 82efa9e..d0c7d4e 100644 --- a/Source/FilterView.h +++ b/Source/FilterView.h @@ -10,33 +10,23 @@ #pragma once -#include - -//============================================================================== -/* -*/ -/* - * ============================================================================== - * - * CrushView.h - * Created: 16 Jan 2026 5:05:38pm - * Author: esca - * - * ============================================================================== - */ - -#pragma once - #include "juce_gui_basics/juce_gui_basics.h" #include "juce_opengl/juce_opengl.h" #include #include "OpenGLUtils.h" #include -//============================================================================== -/* - */ + #define CRUSHVIEW_SAMPLECOUNT 200 +#define VERTEXSHADERFILTERFILL R"(placeholder)" + +#define FRAGSHADERFILTERFILL R"(placeholder)" + +#define VERTEXSHADERFILTER R"(placeholder)" + +#define FRAGSHADERFILTER R"(placeholder)" + + class FilterView : public juce::Component, public juce::OpenGLRenderer { public: @@ -68,9 +58,6 @@ private: std::vector filterBackgroundVertices; std::vector filterBackgroundIndices; - std::vector fftVertices; - std::vector fftIndices; - std::vector backgroundVertices; std::vector backgroundIndices; @@ -79,27 +66,26 @@ private: GLuint vboFilter; GLuint iboFilter; - GLuint vbofft; - GLuint ibofft; + GLuint vboFilterFill; + GLuint iboFilterFill; GLuint vboBackground; GLuint iboBackground; - std::string vertexShader; - std::string fragmentShader; - std::string vertexShaderFill; - std::string fragmentShaderFill; + std::string vertexShaderFilter; + std::string fragmentShaderFilter; + + std::string vertexShaderFilterFill; + std::string fragmentShaderFilterFill; std::string vertexShaderBackground; std::string fragmentShaderBackground; - std::unique_ptr shaderProgram; - std::unique_ptr shaderProgermFilter; + std::unique_ptr shaderProgramFilter; + std::unique_ptr shaderProgramFilterFill; std::unique_ptr shaderProgramBackground; juce::Image background; juce::OpenGLTexture bgTexture; }; - - diff --git a/Source/OpenGLUtils.h b/Source/OpenGLUtils.h index 51f0408..523e5ac 100644 --- a/Source/OpenGLUtils.h +++ b/Source/OpenGLUtils.h @@ -14,32 +14,6 @@ // fragcolour = vec4(colour.xyz, colour.w*pow(10, -(position.x*position.y))); - -#define VERTEXSHADER R"(#version 330 core -in vec2 position; -in vec4 colour; -out vec4 fragcolour; -void main() -{ -gl_Position = vec4(position, 1, 1); -fragcolour = colour; -if(position.x<0){ - fragcolour.a = position.x+1; -} -else{ - fragcolour.a = 1-position.x; -} -} -)" - -#define FRAGSHADER R"(#version 330 core -in vec4 fragcolour; -void main() -{ -gl_FragColor = fragcolour; -} -)" - #define VERTEXSHADERBACKGROUND R"(#version 330 core layout (location = 0) in vec3 aPos; layout (location = 1) in vec3 aColor;