
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
Some typed convenience functions for working directly with shaders and WebGL.
Install with your favorite NodeJS package manager:
$ npm install slgl
$ yarn add slgl
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)
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()
SLGL is MIT licensed.
FAQs
Some typed convenience functions for working directly with shaders and WebGL.
We found that slgl demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

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.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.