32 lines
1.0 KiB
GLSL
32 lines
1.0 KiB
GLSL
/**
|
|
* Unpack unsigned integers of 1-4 bytes. in WebGL 1, there is no uint type,
|
|
* so the return value is an int.
|
|
* <p>
|
|
* There are also precision limitations in WebGL 1. highp int is still limited
|
|
* to 24 bits. Above the value of 2^24 = 16777216, precision loss may occur.
|
|
* </p>
|
|
*
|
|
* @param {float|vec2|vec3|vec4} packed The packed value. For vectors, the components are listed in little-endian order.
|
|
*
|
|
* @return {int} The unpacked value.
|
|
*/
|
|
int czm_unpackUint(float packedValue) {
|
|
float rounded = czm_round(packedValue * 255.0);
|
|
return int(rounded);
|
|
}
|
|
|
|
int czm_unpackUint(vec2 packedValue) {
|
|
vec2 rounded = czm_round(packedValue * 255.0);
|
|
return int(dot(rounded, vec2(1.0, 256.0)));
|
|
}
|
|
|
|
int czm_unpackUint(vec3 packedValue) {
|
|
vec3 rounded = czm_round(packedValue * 255.0);
|
|
return int(dot(rounded, vec3(1.0, 256.0, 65536.0)));
|
|
}
|
|
|
|
int czm_unpackUint(vec4 packedValue) {
|
|
vec4 rounded = czm_round(packedValue * 255.0);
|
|
return int(dot(rounded, vec4(1.0, 256.0, 65536.0, 16777216.0)));
|
|
}
|