@@ -204,22 +204,57 @@ float decode8(vec4 texel, int index) {
204
204
return 0.0;
205
205
}
206
206
207
- vec4 encode32 (float f) {
207
+ vec4 oldEncode32 (float f) {
208
208
float F = abs(f);
209
- float sign = f < 0.0 ? 1.0 : 0.0 ;
210
- float exponent = floor(log2(F ));
211
- float mantissa = (exp2( -exponent) * F) ;
209
+ float sign = step( 0.0, -f) ;
210
+ float exponent = floor(log2(f ));
211
+ float mantissa = f * pow(2.0, -exponent) - 1.0 ;
212
212
// exponent += floor(log2(mantissa));
213
+ exponent = exponent + 127.0;
213
214
vec4 texel = vec4(F * exp2(23.0-exponent)) * SCALE_FACTOR_INV;
214
215
texel.rg = integerMod(texel.rg, 256.0);
215
216
texel.b = integerMod(texel.b, 128.0);
216
217
texel.a = exponent*0.5 + 63.5;
217
- texel.ba += vec2(integerMod(exponent+127.0 , 2.0), sign) * 128.0;
218
+ texel.ba += vec2(integerMod(exponent, 2.0), sign) * 128.0;
218
219
texel = floor(texel);
219
220
texel *= 0.003921569; // 1/255
220
221
__ENCODE32_ENDIANNESS__;
221
222
return texel;
222
223
}
224
+
225
+ // Borrowed from exellect info here: http://www.vizitsolutions.com/portfolio/webgl/gpgpu/speedBumps.html
226
+ // http://www.vizitsolutions.com/portfolio/webgl/gpgpu/js/ToUnsignedBytes.js
227
+ vec4 encode32(float value) {
228
+ if (value == 0.0) return vec4(0, 0, 0, 0);
229
+
230
+ float exponent;
231
+ float mantissa;
232
+ vec4 result;
233
+ float sgn;
234
+
235
+ sgn = step(0.0, -value);
236
+ value = abs(value);
237
+
238
+ exponent = floor(log2(value));
239
+
240
+ mantissa = value*pow(2.0, -exponent)-1.0;
241
+ exponent = exponent+127.0;
242
+ result = vec4(0,0,0,0);
243
+
244
+ result.a = floor(exponent/2.0);
245
+ exponent = exponent - result.a*2.0;
246
+ result.a = result.a + 128.0*sgn;
247
+
248
+ result.b = floor(mantissa * 128.0);
249
+ mantissa = mantissa - result.b / 128.0;
250
+ result.b = result.b + exponent*128.0;
251
+
252
+ result.g = floor(mantissa*32768.0);
253
+ mantissa = mantissa - result.g/32768.0;
254
+
255
+ result.r = floor(mantissa*8388608.0);
256
+ return result/255.0;
257
+ }
223
258
// Dragons end here
224
259
225
260
int index;
0 commit comments