1.0.3 • Published 2 years ago

overshader v1.0.3

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

Overshader

Overshader is a simple library for building beatiful animations using WebGL Shaders. This package built with TypeScript so you can explore all available options right in your IDE.

Shaders Gallery Demo

Highlights

  • Responsive out of the box
  • No external dependencies
  • Fully typed
  • Small size (gzip ~ 3 KB)
  • Few lines of code - and your shader is rendering in a browser
  • Load textures by url
  • Builtin uniforms for time, resolution and textures
  • Explore shaders demos at Demo Shaders
  • Convenient and fast standalone development via Vite

Install

yarn add overshader

Verify it is working

Just provide CSS selector for canvas container

import { runWebglProgram } from 'overshader';

runWebglProgram({
    canvasContainer: '.responsive-canvas-container',
});

And you should see the default shader rendered inside specified container:

Default Shader Demo

Run your own shader

import { runWebglProgram } from 'overshader';

runWebglProgram({
    canvasContainer: '.responsive-canvas-container',
    // provide source as raw string
    fragmentShader: `precision highp float;
uniform vec2 u_resolution;
...`,
    // OR load source via URL
    fragmentShaderURL: 'path/to/fragment.glsl',
    // specify textures to use
    textures: ['/assets/textures/texture-font.png', '/assets/textures/texture-noise.png'],
    // control opacity and other WebGLContextAttributes
    contextAttributes: {
      alpha: true,
      premultipliedAlpha: false,
    },
    // randmoize time so every run looks different
    initialTimeShift: Math.random() * 1e3 * 1,
    // add event listeners to have u_mouse coordinates
    listenForMouse: true,
    // by default, devicePixelRatio = window.devicePixelRatio
    devicePixelRatio: 1,
    // react to first render
    onFirstRender(controls) {
        // e.g. update uniform
        controls.setUniform1f('u_value', 1.2323);
        // ...
    },
});

Builtin uniforms

UniformTypeMeaning
u_resolutionvec2Resolution of canvas in pixels
u_timefloatTime elapsed since start
u_mousevec2Coordinates of mouse
utexture${index}sampler2DTexture by index from textures array
utexture_resolution${index}vec2Texture resolution in pixels

Local development

git clone https://github.com/overshom/overshader.git

cd overshader

yarn

yarn dev