glsl-read-float

WebJar for glsl-read-float

License

License

MIT
GroupId

GroupId

org.webjars.npm
ArtifactId

ArtifactId

glsl-read-float
Last Version

Last Version

1.1.0
Release Date

Release Date

Type

Type

jar
Description

Description

glsl-read-float
WebJar for glsl-read-float
Project URL

Project URL

http://webjars.org
Source Code Management

Source Code Management

https://github.com/mikolalysenko/glsl-read-float

Download glsl-read-float

How to add to project

<!-- https://jarcasting.com/artifacts/org.webjars.npm/glsl-read-float/ -->
<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>glsl-read-float</artifactId>
    <version>1.1.0</version>
</dependency>
// https://jarcasting.com/artifacts/org.webjars.npm/glsl-read-float/
implementation 'org.webjars.npm:glsl-read-float:1.1.0'
// https://jarcasting.com/artifacts/org.webjars.npm/glsl-read-float/
implementation ("org.webjars.npm:glsl-read-float:1.1.0")
'org.webjars.npm:glsl-read-float:jar:1.1.0'
<dependency org="org.webjars.npm" name="glsl-read-float" rev="1.1.0">
  <artifact name="glsl-read-float" type="jar" />
</dependency>
@Grapes(
@Grab(group='org.webjars.npm', module='glsl-read-float', version='1.1.0')
)
libraryDependencies += "org.webjars.npm" % "glsl-read-float" % "1.1.0"
[org.webjars.npm/glsl-read-float "1.1.0"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

There are no modules declared in this project.

glsl-read-float

Workaround for reading floating point values back from the GPU using GLSL.

Example

var triangle     = require('a-big-triangle')
var fit          = require('canvas-fit')
var getContext   = require('gl-context')
var glslify      = require('glslify')
var unpackFloat  = require("glsl-read-float")

var canvas     = document.body.appendChild(document.createElement('canvas'))
var gl         = getContext(canvas, render)

window.addEventListener('resize', fit(canvas), false)

var shader = glslify({
  vert: "\
attribute vec2 position;\
void main() {\
  gl_Position = vec4(position, 0, 1);\
}",
  frag: "\
#pragma glslify: packFloat = require(glsl-read-float)\n\
uniform highp float f;\
void main() {\
  gl_FragColor = packFloat(f);\
}",
  inline: true
})(gl)

function render() {
  var num = Math.random()

  //Draw shader
  shader.bind()
  shader.uniforms.f = num
  triangle(gl)

  //Read back the float
  var buffer = new Uint8Array(4)
  gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, buffer)
  var unpacked = unpackFloat(buffer[0], buffer[1], buffer[2], buffer[3])

  //Log output to console
  console.log("expected:", num, "got:", unpacked)
}

Install

npm install glsl-read-float

API

GLSL

#pragma glslify: packFloat = require(glsl-read-float)

vec4 packed = packFloat(float f)

Packs a floating point number into an 8bit RGBA color vector, which can be written to the display using gl_FragColor, for example.

  • f is a float number

Returns A packed vec4 encoding the value of f

JavaScript

var unpackFloat = require("glsl-read-float")

var f = unpackFloat(x, y, z, w)

Unpacks a packed vec4 into a single floating point value.

  • x is the first component of the packed float
  • y is the second component of the packed float
  • z is the third component of the packed float
  • w is the fourth component of the packed float

Returns A number which is the unpacked value of the floating point input.

Note This module doesn't handle denormals or floats larger than Math.pow(2, 127)

Credits

Originally based on a routine by @ultraist. You can find his blog here: http://ultraist.hatenablog.com/

Newer version rewritten by Mikola Lysenko. MIT License (c) 2014

Versions

Version
1.1.0