UNPKG

molstar

Version:

A comprehensive macromolecular library.

49 lines (46 loc) 1.92 kB
"use strict"; /** * Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.float_to_rgba = void 0; exports.float_to_rgba = ` // floatToRgba adapted from https://github.com/equinor/glsl-float-to-rgba // MIT License, Copyright (c) 2020 Equinor float shiftRight (float v, float amt) { v = floor(v) + 0.5; return floor(v / exp2(amt)); } float shiftLeft (float v, float amt) { return floor(v * exp2(amt) + 0.5); } float maskLast (float v, float bits) { return mod(v, shiftLeft(1.0, bits)); } float extractBits (float num, float from, float to) { from = floor(from + 0.5); to = floor(to + 0.5); return maskLast(shiftRight(num, from), to - from); } vec4 floatToRgba(float texelFloat, bool littleEndian) { if (texelFloat == 0.0) return vec4(0.0, 0.0, 0.0, 0.0); float sign = texelFloat > 0.0 ? 0.0 : 1.0; texelFloat = abs(texelFloat); float exponent = floor(log2(texelFloat)); float biased_exponent = exponent + 127.0; float fraction = ((texelFloat / exp2(exponent)) - 1.0) * 8388608.0; float t = biased_exponent / 2.0; float last_bit_of_biased_exponent = fract(t) * 2.0; float remaining_bits_of_biased_exponent = floor(t); float byte4 = extractBits(fraction, 0.0, 8.0) / 255.0; float byte3 = extractBits(fraction, 8.0, 16.0) / 255.0; float byte2 = (last_bit_of_biased_exponent * 128.0 + extractBits(fraction, 16.0, 23.0)) / 255.0; float byte1 = (sign * 128.0 + remaining_bits_of_biased_exponent) / 255.0; return ( littleEndian ? vec4(byte4, byte3, byte2, byte1) : vec4(byte1, byte2, byte3, byte4) ); } `;