A graphics library to enable the real-time rendering of 2D signed distance fields on the web. http://schmelczer.dev/sdf-2d/
Find a file
2020-10-12 14:21:43 +02:00
docs Add documentation 2020-10-04 10:48:44 +02:00
media Improve uniform loading 2020-09-28 17:39:07 +02:00
src Tidy up object count handling 2020-10-12 14:21:43 +02:00
.eslintignore Add files 2020-09-15 10:08:16 +02:00
.eslintrc.json Add files 2020-09-15 10:08:16 +02:00
.gitignore Remove clutter 2020-09-16 14:21:28 +02:00
.npmignore Add more options 2020-09-17 17:51:45 +02:00
.prettierrc Add files 2020-09-15 10:08:16 +02:00
custom.d.ts Start adding documentation 2020-09-28 12:13:07 +02:00
documentation-readme.md Publish package with updated documentation and rotated rectangle 2020-09-28 18:22:07 +02:00
package.json Add textures 2020-10-04 10:48:26 +02:00
README.md Finish documentation 2020-09-28 16:26:55 +02:00
tsconfig.json Help subclassing 2020-09-27 17:34:17 +02:00
typedoc.json Improve uniform loading 2020-09-28 17:39:07 +02:00
webpack.config.js Fix lights 2020-09-20 20:08:19 +02:00

SDF-2D logo SDF-2D library

A graphics library to enable the real-time rendering of 2D signed distance fields on web.

screenshot taken on a PC

Features

  • Works with both WebGL and WebGL2

    The former is mostly required for supporting iPhones.

  • Performant even on low-end mobile devices

    Try it out yourself!

  • Has a number of built-in shapes and lights
  • Easily extensible with new shapes
  • Antialiasing is implemented
  • Has built-in quality autoscaling
  • Requires no boilerplate code
    • Automatic detection of WebGL and its extensions is provided
    • Parallel, non-blocking shader compiling
    • Context lost is handled with automatic restoration
    • Can be used without thinking of the GPU (although for stunning results it, should be kept in mind)

screenshots

Three separate screenshots taken on a mobile device

Install

npm install sdf-2d --save-dev

Use

import { compile, Circle, CircleLight } from 'sdf-2d';

const main = async () => {
  const canvas = document.querySelector('canvas');
  const renderer = await compile(canvas, [Circle.descriptor, CircleLight.descriptor]);

  renderer.addDrawable(new Circle([200, 200], 50));
  renderer.addDrawable(new CircleLight([500, 300], [1, 0.5, 0], 0.5));

  renderer.renderDrawables();
};

main();

Examples

For further examples, please visit the following repositories:

Documentation

For more technical details, please consult the documentation available in the repository and at schmelczerandras.github.io/sdf-2d/.