start work on filterview
not doing fft fuck that
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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; 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, 1.0f}});
|
||||
@@ -58,24 +53,12 @@ FilterView::FilterView()
|
||||
FilterView::~FilterView()
|
||||
{
|
||||
bgTexture.release();
|
||||
shaderProgram->release();
|
||||
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));
|
||||
|
||||
@@ -10,33 +10,23 @@
|
||||
|
||||
#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_opengl/juce_opengl.h"
|
||||
#include <JuceHeader.h>
|
||||
#include "OpenGLUtils.h"
|
||||
#include <string>
|
||||
//==============================================================================
|
||||
/*
|
||||
*/
|
||||
|
||||
#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<Vertex> filterBackgroundVertices;
|
||||
std::vector<unsigned int> filterBackgroundIndices;
|
||||
|
||||
std::vector<Vertex> fftVertices;
|
||||
std::vector<unsigned int> fftIndices;
|
||||
|
||||
std::vector<VertexTexture> backgroundVertices;
|
||||
std::vector<unsigned int> 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<juce::OpenGLShaderProgram> shaderProgram;
|
||||
std::unique_ptr<juce::OpenGLShaderProgram> shaderProgermFilter;
|
||||
std::unique_ptr<juce::OpenGLShaderProgram> shaderProgramFilter;
|
||||
std::unique_ptr<juce::OpenGLShaderProgram> shaderProgramFilterFill;
|
||||
std::unique_ptr<juce::OpenGLShaderProgram> shaderProgramBackground;
|
||||
|
||||
juce::Image background;
|
||||
juce::OpenGLTexture bgTexture;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user