New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

slgl

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

slgl

Some typed convenience functions for working directly with shaders and WebGL.

latest
npmnpm
Version
0.0.5
Version published
Maintainers
1
Created
Source

SLGL - TypeScript WebGL Utilities

Some typed convenience functions for working directly with shaders and WebGL.

Installation

Install with your favorite NodeJS package manager:

$ npm install slgl

$ yarn add slgl

Usage

Simple Fragment Shaders

Get started with fragment shaders with only a canvas and the fragment source:

import { glsl, createFragmentShaderProgram } from 'slgl'

const fragment_source = glsl`#version 300 es

precision highp float;
uniform vec2 resolution;
out vec4 color;

void main() {
	vec2 uv = gl_FragCoord.xy/resolution;
	color = vec4(uv.x, uv.y, 0.0, 1.0);
}`

const canvas = document.getElementById('canvas')
const { render } = createFragmentShaderCanvas(canvas, fragment_source)
render() // Call render any time you want to re-draw

Use resize observer to re-draw when the canvas size is changed:

const canvas_observer = new ResizeObserver(() => render())
canvas_observer.observe(canvas)

Animated Shaders

Use the LoopEngine class to drive animated shaders:

import { LoopEngine } from 'slgl'

const fragment_source = glsl`#version 300 es

precision highp float;
uniform vec2 resolution;
uniform float time;
out vec4 color;

void main() {
	vec2 uv = gl_FragCoord.xy/resolution;
	color = vec4(
		(sin(uv.x + time) + 1.0) / 2.0,
		(sin(uv.y + time + 5.0) + 1.0) / 2.0,
		0.0,
		1.0
	);
}`

// Get canvas element and device pixel ratio
const canvas = document.getElementById('canvas')
const devicePixelRatio = window.devicePixelRatio || 1

// Create the fragment shader program
const { program, createUniform, setResolution, draw } = createFragmentShaderProgram(gl, fragment_source)

// Create variables for program
let time = 0
const setTime = createUniform('1f', 'time')

// Update shader uniform for `resolution` any time the canvas resizes
const canvas_observer = new ResizeObserver(() => {
	const canvas_rect = canvas.getBoundingClientRect()
	const width = canvas.width = canvas_rect.width * devicePixelRatio
	const height = canvas.height = canvas_rect.height * devicePixelRatio
	setResolution([width, height])
})

// Create the loop engine
const engine = new LoopEngine()

// Create the program to animate the shader
engine.linkProgram({
	init() {
		time = 0 // Reset time each init
		canvas_observer.observe(canvas) // Start observing the canvas
	},
	destroy() {
		canvas_observer.unobserve(canvas) // Clean up observer
	},
	update(dt) {
		time += dt // Advance our time variable by the time delta passed by `LoopEngine`

		setTime(time) // Update the time uniform within the shader
	},
	render() {
		draw()
	}
})

// Start the engine
engine.init()

License

SLGL is MIT licensed.

Keywords

webgl

FAQs

Package last updated on 12 Jun 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts