Skip to content

Instantly share code, notes, and snippets.

@KrabCode
Created March 20, 2023 12:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KrabCode/f447829f34195211ee9f5b0913e6984f to your computer and use it in GitHub Desktop.
Save KrabCode/f447829f34195211ee9f5b0913e6984f to your computer and use it in GitHub Desktop.
Arbitrary number of uniforms for shaders using the LazyGui library
uniform sampler2D texture;
uniform vec2 resolution;
uniform float time;
uniform vec4 colorA;
uniform vec4 colorB;
uniform float mixerLow;
uniform float mixerHigh;
void main(){
vec2 uv = (gl_FragCoord.xy-.5*resolution) / resolution.y;
vec3 col = mix(colorA.rgb, colorB.rgb, smoothstep(mixerLow, mixerHigh, uv.y));
gl_FragColor = vec4(col, 1.);
}
package examples_intellij;
import lazy.LazyGui;
import lazy.ShaderReloader;
import processing.core.PApplet;
import processing.core.PGraphics;
import processing.opengl.PShader;
public class ShaderTest extends PApplet {
LazyGui gui;
PGraphics pg;
public static void main(String[] args) {
PApplet.main(java.lang.invoke.MethodHandles.lookup().lookupClass());
}
@Override
public void settings() {
size(800, 800, P2D);
}
@Override
public void setup() {
gui = new LazyGui(this);
pg = createGraphics(width, height, P2D);
colorMode(HSB,1,1,1,1);
}
@Override
public void draw() {
pg.beginDraw();
drawShader();
pg.endDraw();
image(pg, 0, 0);
}
private void drawShader() {
gui.pushFolder("shader uniforms");
String shaderPath = gui.text("shader path", "C:\\Projects\\LazyGui\\data\\shaders\\examples\\testShader.glsl");
PShader shader = ShaderReloader.getShader(shaderPath);
shader.set("time", radians(frameCount));
setUniforms(shader, UNIFORM_TYPE.INTEGER);
setUniforms(shader, UNIFORM_TYPE.FLOAT);
setUniforms(shader, UNIFORM_TYPE.VECTOR);
setUniforms(shader, UNIFORM_TYPE.COLOR);
setUniforms(shader, UNIFORM_TYPE.SAMPLER);
ShaderReloader.filter(shaderPath, pg);
gui.popFolder();
}
enum UNIFORM_TYPE{
INTEGER,
FLOAT,
VECTOR,
COLOR,
SAMPLER
}
private void setUniforms(PShader shader, UNIFORM_TYPE type) {
gui.pushFolder(type.name().toLowerCase() + "s");
int maxSliderCount = 20;
boolean addNew = gui.button("add new");
int sliderCount = gui.sliderInt("count");
if(addNew){
gui.sliderSet("count", sliderCount + 1);
}
for (int i = 0; i < maxSliderCount; i++) {
gui.pushFolder(type.name().toLowerCase() + " " + i);
if(i < sliderCount){
gui.showCurrentFolder();
}else{
gui.hideCurrentFolder();
gui.popFolder();
continue;
}
String name = gui.text("name");
switch(type){
case INTEGER:
shader.set(name, gui.sliderInt("value"));
break;
case FLOAT:
shader.set(name, gui.slider("value"));
break;
case VECTOR:
shader.set(name, gui.plotXYZ("value"));
break;
case COLOR:
int hex = gui.colorPicker("value").hex;
shader.set(name, red(hex), green(hex), blue(hex), alpha(hex));
break;
case SAMPLER:
shader.set(name, gui.gradient("value"));
break;
}
gui.popFolder();
}
gui.popFolder();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment