Files
crushFX/Source/CrushView.h
ESCA111 87cafe3a05 start work on filterview
not doing fft fuck that
2026-01-23 11:58:37 +13:00

96 lines
2.1 KiB
C++

/*
==============================================================================
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 <JuceHeader.h>
#include "OpenGLUtils.h"
#include <string>
//==============================================================================
/*
*/
#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:
CrushView();
~CrushView() override;
void newOpenGLContextCreated() override;
void renderOpenGL() override;
void openGLContextClosing() override;
void paint (juce::Graphics&) override;
void resized() override;
void distortWaveForm(int sampleRate);
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CrushView)
juce::OpenGLContext ctx;
juce::OpenGLPixelFormat antialiasing;
std::vector<Vertex> waveform;
std::vector<Vertex> distortedWaveform;
std::vector<unsigned int> indices;
std::vector<VertexTexture> backgroundVertices;
std::vector<unsigned int> backgroundIndices;
juce::ComponentListener listener;
GLuint vbo;
GLuint ibo;
GLuint vboBackground;
GLuint iboBackground;
std::string vertexShader;
std::string fragmentShader;
std::string vertexShaderBackground;
std::string fragmentShaderBackground;
std::unique_ptr<juce::OpenGLShaderProgram> shaderProgram;
std::unique_ptr<juce::OpenGLShaderProgram> shaderProgramBackground;
juce::Image background;
juce::OpenGLTexture bgTexture;
};