UNPKG

ami-cjs.js

Version:

<p align="center"> <img src="https://cloud.githubusercontent.com/assets/214063/23213764/78ade038-f90c-11e6-8208-4fcade5f3832.png" width="60%"> </p>

158 lines (130 loc) 10.4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _shaders = require('../shaders.base'); var _shaders2 = _interopRequireDefault(_shaders); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var Unpack = function (_ShadersBase) { _inherits(Unpack, _ShadersBase); function Unpack() { _classCallCheck(this, Unpack); var _this = _possibleConstructorReturn(this, (Unpack.__proto__ || Object.getPrototypeOf(Unpack)).call(this)); _this.name = 'unpack'; // default properties names _this._packedData = 'packedData'; _this._offset = 'offset'; _this._unpackedData = 'unpackedData'; _this._base._uniforms = { uNumberOfChannels: { value: 1 }, uBitsAllocated: { value: 16 }, uPixelType: { value: 0 } }; return _this; } _createClass(Unpack, [{ key: 'api', value: function api() { var baseFragment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._base; var packedData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._packedData; var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this._offset; var unpackedData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this._unpackedData; this._base = baseFragment; return this.compute(packedData, offset, unpackedData); } }, { key: 'compute', value: function compute(packedData, offset, unpackedData) { this.computeDefinition(); this._base._functions[this._name] = this._definition; return this._name + '(' + packedData + ', ' + offset + ', ' + unpackedData + ');'; } }, { key: 'computeDefinition', value: function computeDefinition() { // fun stuff var content = ''; if (this._base._uniforms.uNumberOfChannels.value === 1) { switch (this._base._uniforms.uBitsAllocated.value) { case 1: case 8: content = this.upack8(); break; case 16: content = this.upack16(); break; case 32: content = this.upack32(); break; default: content = this.upackDefault(); break; } } else { content = this.upackIdentity(); } this._definition = '\nvoid ' + this._name + '(in vec4 packedData, in int offset, out vec4 unpackedData){\n\n' + content + '\n\n} \n '; } }, { key: 'upack8', value: function upack8() { this._base._functions['uInt8'] = this.uInt8(); return '\nuInt8(\n packedData.r,\n unpackedData.x);\n '; } }, { key: 'upack16', value: function upack16() { this._base._functions['uInt16'] = this.uInt16(); return '\nuInt16(\n packedData.r * float( 1 - offset) + packedData.b * float(offset),\n packedData.g * float( 1 - offset) + packedData.a * float(offset),\n unpackedData.x);\n '; } }, { key: 'upack32', value: function upack32() { if (this._base._uniforms.uPixelType.value === 0) { this._base._functions['uInt32'] = this.uInt32(); return '\nuInt32(\n packedData.r,\n packedData.g,\n packedData.b,\n packedData.a,\n unpackedData.x);\n '; } else { this._base._functions['uFloat32'] = this.uFloat32(); return '\nuFloat32(\n packedData.r,\n packedData.g,\n packedData.b,\n packedData.a,\n unpackedData.x);\n '; } } }, { key: 'upackIdentity', value: function upackIdentity() { return '\n\nunpackedData = packedData;\n\n '; } }, { key: 'uInt8', value: function uInt8() { return '\nvoid uInt8(in float r, out float value){\n value = r * 256.;\n}\n '; } }, { key: 'uInt16', value: function uInt16() { return '\nvoid uInt16(in float r, in float a, out float value){\n value = r * 256. + a * 65536.;\n}\n '; } }, { key: 'uInt32', value: function uInt32() { return '\nvoid uInt32(in float r, in float g, in float b, in float a, out float value){\n value = r * 256. + g * 65536. + b * 16777216. + a * 4294967296.;\n}\n '; } }, { key: 'uFloat32', value: function uFloat32() { return '\nvoid uFloat32(in float r, in float g, in float b, in float a, out float value){\n\n // create arrays containing bits for rgba values\n // value between 0 and 255\n value = r * 255.;\n int bytemeR[8];\n bytemeR[0] = int(floor(value / 128.));\n value -= float(bytemeR[0] * 128);\n bytemeR[1] = int(floor(value / 64.));\n value -= float(bytemeR[1] * 64);\n bytemeR[2] = int(floor(value / 32.));\n value -= float(bytemeR[2] * 32);\n bytemeR[3] = int(floor(value / 16.));\n value -= float(bytemeR[3] * 16);\n bytemeR[4] = int(floor(value / 8.));\n value -= float(bytemeR[4] * 8);\n bytemeR[5] = int(floor(value / 4.));\n value -= float(bytemeR[5] * 4);\n bytemeR[6] = int(floor(value / 2.));\n value -= float(bytemeR[6] * 2);\n bytemeR[7] = int(floor(value));\n\n value = g * 255.;\n int bytemeG[8];\n bytemeG[0] = int(floor(value / 128.));\n value -= float(bytemeG[0] * 128);\n bytemeG[1] = int(floor(value / 64.));\n value -= float(bytemeG[1] * 64);\n bytemeG[2] = int(floor(value / 32.));\n value -= float(bytemeG[2] * 32);\n bytemeG[3] = int(floor(value / 16.));\n value -= float(bytemeG[3] * 16);\n bytemeG[4] = int(floor(value / 8.));\n value -= float(bytemeG[4] * 8);\n bytemeG[5] = int(floor(value / 4.));\n value -= float(bytemeG[5] * 4);\n bytemeG[6] = int(floor(value / 2.));\n value -= float(bytemeG[6] * 2);\n bytemeG[7] = int(floor(value));\n\n value = b * 255.;\n int bytemeB[8];\n bytemeB[0] = int(floor(value / 128.));\n value -= float(bytemeB[0] * 128);\n bytemeB[1] = int(floor(value / 64.));\n value -= float(bytemeB[1] * 64);\n bytemeB[2] = int(floor(value / 32.));\n value -= float(bytemeB[2] * 32);\n bytemeB[3] = int(floor(value / 16.));\n value -= float(bytemeB[3] * 16);\n bytemeB[4] = int(floor(value / 8.));\n value -= float(bytemeB[4] * 8);\n bytemeB[5] = int(floor(value / 4.));\n value -= float(bytemeB[5] * 4);\n bytemeB[6] = int(floor(value / 2.));\n value -= float(bytemeB[6] * 2);\n bytemeB[7] = int(floor(value));\n\n value = a * 255.;\n int bytemeA[8];\n bytemeA[0] = int(floor(value / 128.));\n value -= float(bytemeA[0] * 128);\n bytemeA[1] = int(floor(value / 64.));\n value -= float(bytemeA[1] * 64);\n bytemeA[2] = int(floor(value / 32.));\n value -= float(bytemeA[2] * 32);\n bytemeA[3] = int(floor(value / 16.));\n value -= float(bytemeA[3] * 16);\n bytemeA[4] = int(floor(value / 8.));\n value -= float(bytemeA[4] * 8);\n bytemeA[5] = int(floor(value / 4.));\n value -= float(bytemeA[5] * 4);\n bytemeA[6] = int(floor(value / 2.));\n value -= float(bytemeA[6] * 2);\n bytemeA[7] = int(floor(value));\n\n // compute float32 value from bit arrays\n\n // sign\n int issigned = 1 - 2 * bytemeR[0];\n // issigned = int(pow(-1., float(bytemeR[0])));\n\n // exponent\n int exponent = 0;\n\n exponent += bytemeR[1] * int(pow(2., 7.));\n exponent += bytemeR[2] * int(pow(2., 6.));\n exponent += bytemeR[3] * int(pow(2., 5.));\n exponent += bytemeR[4] * int(pow(2., 4.));\n exponent += bytemeR[5] * int(pow(2., 3.));\n exponent += bytemeR[6] * int(pow(2., 2.));\n exponent += bytemeR[7] * int(pow(2., 1.));\n\n exponent += bytemeG[0];\n\n\n // fraction\n float fraction = 0.;\n\n fraction = float(bytemeG[1]) * pow(2., -1.);\n fraction += float(bytemeG[2]) * pow(2., -2.);\n fraction += float(bytemeG[3]) * pow(2., -3.);\n fraction += float(bytemeG[4]) * pow(2., -4.);\n fraction += float(bytemeG[5]) * pow(2., -5.);\n fraction += float(bytemeG[6]) * pow(2., -6.);\n fraction += float(bytemeG[7]) * pow(2., -7.);\n\n fraction += float(bytemeB[0]) * pow(2., -8.);\n fraction += float(bytemeB[1]) * pow(2., -9.);\n fraction += float(bytemeB[2]) * pow(2., -10.);\n fraction += float(bytemeB[3]) * pow(2., -11.);\n fraction += float(bytemeB[4]) * pow(2., -12.);\n fraction += float(bytemeB[5]) * pow(2., -13.);\n fraction += float(bytemeB[6]) * pow(2., -14.);\n fraction += float(bytemeB[7]) * pow(2., -15.);\n\n fraction += float(bytemeA[0]) * pow(2., -16.);\n fraction += float(bytemeA[1]) * pow(2., -17.);\n fraction += float(bytemeA[2]) * pow(2., -18.);\n fraction += float(bytemeA[3]) * pow(2., -19.);\n fraction += float(bytemeA[4]) * pow(2., -20.);\n fraction += float(bytemeA[5]) * pow(2., -21.);\n fraction += float(bytemeA[6]) * pow(2., -22.);\n fraction += float(bytemeA[7]) * pow(2., -23.);\n\n value = float(issigned) * pow( 2., float(exponent - 127)) * (1. + fraction);\n}\n '; } }]); return Unpack; }(_shaders2.default); exports.default = new Unpack(); module.exports = exports['default'];