Browse Source

fix glsl decodeFloatRGB

Alexander Rose 3 years ago
parent
commit
605432ddd1
2 changed files with 3 additions and 3 deletions
  1. 2 2
      src/mol-gl/shader/chunks/common.glsl.ts
  2. 1 1
      src/mol-util/float-packing.ts

+ 2 - 2
src/mol-gl/shader/chunks/common.glsl.ts

@@ -38,7 +38,7 @@ float encodeFloatLog(const in float value) { return log(value + 1.0) / floatLogF
 float decodeFloatLog(const in float value) { return exp(value * floatLogFactor) - 1.0; }
 
 vec3 encodeFloatRGB(in float value) {
-    value = clamp(value, 0.0, 16777216.0 - 1.0) + 1.0;
+    value = clamp(round(value), 0.0, 16777216.0 - 1.0) + 1.0;
     vec3 c = vec3(0.0);
     c.b = mod(value, 256.0);
     value = floor(value / 256.0);
@@ -48,7 +48,7 @@ vec3 encodeFloatRGB(in float value) {
     return c / 255.0;
 }
 float decodeFloatRGB(const in vec3 rgb) {
-    return (rgb.r * 256.0 * 256.0 * 255.0 + rgb.g * 256.0 * 255.0 + rgb.b * 255.0) - 1.0;
+    return (floor(rgb.r * 255.0 + 0.5) * 256.0 * 256.0 + floor(rgb.g * 255.0 + 0.5) * 256.0 + floor(rgb.b * 255.0 + 0.5)) - 1.0;
 }
 
 vec2 packUnitIntervalToRG(const in float v) {

+ 1 - 1
src/mol-util/float-packing.ts

@@ -20,7 +20,7 @@ export function decodeFloatLog(value: number) { return fasterExp(value * floatLo
 
 /** encode float as rgb triplet into array at offset */
 export function encodeFloatRGBtoArray(value: number, array: NumberArray, offset: number) {
-    value = clamp(value, 0, 16777216 - 1) + 1;
+    value = clamp(Math.round(value), 0, 16777216 - 1) + 1;
     array[offset + 2] = value % 256;
     value = Math.floor(value / 256);
     array[offset + 1] = value % 256;