/* ============================================================================== 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 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 waveform; std::vector distortedWaveform; std::vector indices; std::vector backgroundVertices; std::vector 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 shaderProgram; std::unique_ptr shaderProgramBackground; juce::Image background; juce::OpenGLTexture bgTexture; };