start work on filterview

not doing fft fuck that
This commit is contained in:
2026-01-23 11:58:37 +13:00
parent eb511a1f79
commit 87cafe3a05
4 changed files with 83 additions and 99 deletions

View File

@@ -20,6 +20,31 @@
*/ */
#define CRUSHVIEW_SAMPLECOUNT 200 #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 class CrushView : public juce::Component, public juce::OpenGLRenderer
{ {
public: public:

View File

@@ -32,13 +32,8 @@
FilterView::FilterView() FilterView::FilterView()
{ {
float startingColour[4] = {128.0f, 255.0f, 255.0f, 255.0f}; 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; i<CRUSHVIEW_SAMPLECOUNT; i++){
indices.push_back(i);
}
backgroundVertices.push_back(VertexTexture{{-1, -1}, {255.0f, 255.0f, 255.0f, 255.0f}, {0.0f, 0.0f}}); backgroundVertices.push_back(VertexTexture{{-1, -1}, {255.0f, 255.0f, 255.0f, 255.0f}, {0.0f, 0.0f}});
backgroundVertices.push_back(VertexTexture{{-1, 1}, {255.0f, 255.0f, 255.0f, 255.0f}, {0.0f, 1.0f}}); backgroundVertices.push_back(VertexTexture{{-1, 1}, {255.0f, 255.0f, 255.0f, 255.0f}, {0.0f, 1.0f}});
@@ -58,24 +53,12 @@ FilterView::FilterView()
FilterView::~FilterView() FilterView::~FilterView()
{ {
bgTexture.release(); bgTexture.release();
shaderProgram->release(); shaderProgramFilter->release();
shaderProgramFilterFill->release();
shaderProgramBackground->release(); shaderProgramBackground->release();
ctx.detach(); 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) void FilterView::paint (juce::Graphics& g)
{ {
ctx.triggerRepaint(); ctx.triggerRepaint();
@@ -98,9 +81,11 @@ void FilterView::newOpenGLContextCreated(){
ctx.extensions.glGenBuffers(1, &vboBackground); ctx.extensions.glGenBuffers(1, &vboBackground);
ctx.extensions.glGenBuffers(1, &iboBackground); ctx.extensions.glGenBuffers(1, &iboBackground);
ctx.extensions.glGenBuffers(1, &vbo); ctx.extensions.glGenBuffers(1, &vboFilterFill);
ctx.extensions.glGenBuffers(1, &ibo); ctx.extensions.glGenBuffers(1, &iboFilterFill);
ctx.extensions.glGenBuffers(1, &vboFilter);
ctx.extensions.glGenBuffers(1, &iboFilter);
//BIND BACKGROUND BUFFERS //BIND BACKGROUND BUFFERS
@@ -111,19 +96,19 @@ void FilterView::newOpenGLContextCreated(){
ctx.extensions.glBindBuffer(juce::gl::GL_ELEMENT_ARRAY_BUFFER, iboBackground); 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); 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, vboFilterFill);
ctx.extensions.glBindBuffer(juce::gl::GL_ARRAY_BUFFER, vbo);
ctx.extensions.glBufferData(juce::gl::GL_ARRAY_BUFFER, sizeof(Vertex)*filterVertices.size(), filterVertices.data(), juce::gl::GL_STATIC_DRAW); 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); ctx.extensions.glBufferData(juce::gl::GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * filterIndices.size(), filterIndices.data(), juce::gl::GL_STATIC_DRAW);
//SHADERS //SHADERS
vertexShader = VERTEXSHADER; vertexShaderFilter = "placeholder";
fragmentShader = FRAGSHADER; fragmentShaderFilter = "placeholder";
vertexShaderFilterFill = "placeholder";
fragmentShaderFilterFill = "placeholder";
vertexShaderBackground = VERTEXSHADERBACKGROUND; vertexShaderBackground = VERTEXSHADERBACKGROUND;
fragmentShaderBackground = FRAGSHADERBACKGROUND; fragmentShaderBackground = FRAGSHADERBACKGROUND;
@@ -134,11 +119,17 @@ void FilterView::newOpenGLContextCreated(){
shaderProgramBackground->link(); shaderProgramBackground->link();
shaderProgramBackground->use(); shaderProgramBackground->use();
shaderProgram.reset(new juce::OpenGLShaderProgram(ctx)); shaderProgramFilterFill.reset(new juce::OpenGLShaderProgram(ctx));
shaderProgram->addVertexShader(vertexShader); shaderProgramFilterFill->addVertexShader(vertexShaderFilterFill);
shaderProgram->addFragmentShader(fragmentShader); shaderProgramFilterFill->addFragmentShader(fragmentShaderFilterFill);
shaderProgram->link(); shaderProgramFilterFill->link();
shaderProgram->use(); shaderProgramFilterFill->use();
shaderProgramFilter.reset(new juce::OpenGLShaderProgram(ctx));
shaderProgramFilter->addVertexShader(vertexShaderFilter);
shaderProgramFilter->addFragmentShader(fragmentShaderFilter);
shaderProgramFilter->link();
shaderProgramFilter->use();
} }
void FilterView::renderOpenGL(){ 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); juce::gl::glDrawElements(juce::gl::GL_TRIANGLES, backgroundIndices.size(), juce::gl::GL_UNSIGNED_INT, nullptr);
bgTexture.unbind(); 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 //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); shaderProgramFilter->use();
ctx.extensions.glBindBuffer(juce::gl::GL_ELEMENT_ARRAY_BUFFER, ibo);
shaderProgram->use();
ctx.extensions.glVertexAttribPointer(0, 2, juce::gl::GL_FLOAT, juce::gl::GL_FALSE, sizeof(Vertex), nullptr); ctx.extensions.glVertexAttribPointer(0, 2, juce::gl::GL_FLOAT, juce::gl::GL_FALSE, sizeof(Vertex), nullptr);
ctx.extensions.glEnableVertexAttribArray(2); 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.glVertexAttribPointer(1, 4, juce::gl::GL_FLOAT, juce::gl::GL_FALSE, sizeof(Vertex), (GLvoid*)(sizeof(float)*2));

View File

@@ -10,33 +10,23 @@
#pragma once #pragma once
#include <JuceHeader.h>
//==============================================================================
/*
*/
/*
* ==============================================================================
*
* CrushView.h
* Created: 16 Jan 2026 5:05:38pm
* Author: esca
*
* ==============================================================================
*/
#pragma once
#include "juce_gui_basics/juce_gui_basics.h" #include "juce_gui_basics/juce_gui_basics.h"
#include "juce_opengl/juce_opengl.h" #include "juce_opengl/juce_opengl.h"
#include <JuceHeader.h> #include <JuceHeader.h>
#include "OpenGLUtils.h" #include "OpenGLUtils.h"
#include <string> #include <string>
//==============================================================================
/*
*/
#define CRUSHVIEW_SAMPLECOUNT 200 #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 class FilterView : public juce::Component, public juce::OpenGLRenderer
{ {
public: public:
@@ -68,9 +58,6 @@ private:
std::vector<Vertex> filterBackgroundVertices; std::vector<Vertex> filterBackgroundVertices;
std::vector<unsigned int> filterBackgroundIndices; std::vector<unsigned int> filterBackgroundIndices;
std::vector<Vertex> fftVertices;
std::vector<unsigned int> fftIndices;
std::vector<VertexTexture> backgroundVertices; std::vector<VertexTexture> backgroundVertices;
std::vector<unsigned int> backgroundIndices; std::vector<unsigned int> backgroundIndices;
@@ -79,27 +66,26 @@ private:
GLuint vboFilter; GLuint vboFilter;
GLuint iboFilter; GLuint iboFilter;
GLuint vbofft; GLuint vboFilterFill;
GLuint ibofft; GLuint iboFilterFill;
GLuint vboBackground; GLuint vboBackground;
GLuint iboBackground; GLuint iboBackground;
std::string vertexShader; std::string vertexShaderFilter;
std::string fragmentShader; std::string fragmentShaderFilter;
std::string vertexShaderFill;
std::string fragmentShaderFill; std::string vertexShaderFilterFill;
std::string fragmentShaderFilterFill;
std::string vertexShaderBackground; std::string vertexShaderBackground;
std::string fragmentShaderBackground; std::string fragmentShaderBackground;
std::unique_ptr<juce::OpenGLShaderProgram> shaderProgram; std::unique_ptr<juce::OpenGLShaderProgram> shaderProgramFilter;
std::unique_ptr<juce::OpenGLShaderProgram> shaderProgermFilter; std::unique_ptr<juce::OpenGLShaderProgram> shaderProgramFilterFill;
std::unique_ptr<juce::OpenGLShaderProgram> shaderProgramBackground; std::unique_ptr<juce::OpenGLShaderProgram> shaderProgramBackground;
juce::Image background; juce::Image background;
juce::OpenGLTexture bgTexture; juce::OpenGLTexture bgTexture;
}; };

View File

@@ -14,32 +14,6 @@
// fragcolour = vec4(colour.xyz, colour.w*pow(10, -(position.x*position.y))); // 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 #define VERTEXSHADERBACKGROUND R"(#version 330 core
layout (location = 0) in vec3 aPos; layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor; layout (location = 1) in vec3 aColor;