JSPM

  • Created
  • Published
  • Downloads 6
  • Score
    100M100P100Q49438F
  • License MIT

execute shader programs

Package Exports

  • gpu-compute

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (gpu-compute) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

gpu-compute

execute shader programs

Build Status Coverage Status Dependency Status

Warning

THIS LIBRARY IS EXPERIMENTAL!!!

NodeJS support is a work in progress

Installation

npm install gpu-compute

Example

import * as gpgpu from "gpu-compute";

var textureWidth = 128;

// Each texel is packed with two 16bit ints.
// This program continuously increments those values using floored coordinates.
var source = `
precision mediump float;
precision mediump int;
precision mediump sampler2D;

uniform sampler2D u_gpuData;
const float TEXTURE_WIDTH = ${textureWidth}.0;

float vec2ToInt16(vec2 v) { return clamp(floor(floor(v.r * 255.0) * 256.0) + floor(v.g * 255.0) - 32767.0, -32767.0, 32768.0); }
vec2 int16ToVec2(float f) { f = clamp(f, -32767.0, 32768.0) + 32767.0; return vec2(floor(f / 256.0), f - floor(f / 256.0) * 256.0) / 255.0; }

void main() {
  vec4 texel = texture2D(u_gpuData, gl_FragCoord.xy / TEXTURE_WIDTH);
  float x = mod(vec2ToInt16(texel.rg) + floor(gl_FragCoord.x), TEXTURE_WIDTH);
  float y = mod(vec2ToInt16(texel.ba) + floor(gl_FragCoord.y), TEXTURE_WIDTH);
  gl_FragColor = vec4(int16ToVec2(x), int16ToVec2(y));
}`

// initialize primatives
var target = new gpgpu.RenderTarget(textureWidth);
var shader = new gpgpu.ComputeShader(source);

// push random data into texture
var allSevensArray = new Uint8Array(textureWidth * textureWidth * 4).fill(7);
target.pushTextureData(allSevensArray);

// loop program using previous output as input
for (var i = 0; i < 4; i++) {
  target.compute(shader, { u_gpuData: target });
  console.log(target.readPixels());
}