devuiGuideDemosAPIGitHub

Shaders

A shader's uniforms as controls, from its source:

import { shader } from '@haxiomic/devui/shader';
import fragment from './fluid.frag?raw';

const s = shader(gui, fragment, { name: 'Fluid' });
const material = new THREE.ShaderMaterial({ fragmentShader: fragment, uniforms: s.uniforms }); // three
s.apply(gl, program);                    // raw WebGL: before drawing, with the program in use
s.write(device, uniformBuffer);          // WebGPU: packed by WGSL's layout rules (or s.pack())
import.meta.hot?.accept('./fluid.frag?raw', (m) => s.update(m!.default)); // hot reload
uniform float uRoughness; // @range 0 1 @default 0.4
// @color @default #ff8800
uniform vec3 uLightColor;
uniform int uMode;        // @options add multiply screen
uniform vec2 uOffset;     // @view pad @range -1 1