StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics
https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.3 KiB
95 lines
2.3 KiB
glsl-read-float
|
|
===============
|
|
Workaround for reading floating point values back from the GPU using GLSL.
|
|
|
|
## Example
|
|
|
|
```javascript
|
|
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
|
|
|
|
```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
|
|
|
|
```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 |