mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-02-17 20:52:36 +01:00
shaderlib: Fixed pack/unpack float to rgba.
This commit is contained in:
committed by
Branimir Karadžić
parent
56eb016280
commit
3d08ee19fc
@@ -336,8 +336,11 @@ vec3 adjustHue(vec3 _rgb, float _hue)
|
|||||||
|
|
||||||
vec4 packFloatToRgba(float _value)
|
vec4 packFloatToRgba(float _value)
|
||||||
{
|
{
|
||||||
const vec4 shift = vec4(256 * 256 * 256, 256 * 256, 256, 1.0);
|
// Reference(s):
|
||||||
const vec4 mask = vec4(0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0);
|
// - Encoding floats to RGBA - the final?
|
||||||
|
// https://web.archive.org/web/20250914131649/https://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/
|
||||||
|
const vec4 shift = vec4(255 * 255 * 255, 255 * 255, 255, 1.0);
|
||||||
|
const vec4 mask = vec4(0, 1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0);
|
||||||
vec4 comp = fract(_value * shift);
|
vec4 comp = fract(_value * shift);
|
||||||
comp -= comp.xxyz * mask;
|
comp -= comp.xxyz * mask;
|
||||||
return comp;
|
return comp;
|
||||||
@@ -345,14 +348,14 @@ vec4 packFloatToRgba(float _value)
|
|||||||
|
|
||||||
float unpackRgbaToFloat(vec4 _rgba)
|
float unpackRgbaToFloat(vec4 _rgba)
|
||||||
{
|
{
|
||||||
const vec4 shift = vec4(1.0 / (256.0 * 256.0 * 256.0), 1.0 / (256.0 * 256.0), 1.0 / 256.0, 1.0);
|
const vec4 shift = vec4(1.0 / (255.0 * 255.0 * 255.0), 1.0 / (255.0 * 255.0), 1.0 / 255.0, 1.0);
|
||||||
return dot(_rgba, shift);
|
return dot(_rgba, shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 packHalfFloat(float _value)
|
vec2 packHalfFloat(float _value)
|
||||||
{
|
{
|
||||||
const vec2 shift = vec2(256, 1.0);
|
const vec2 shift = vec2(255, 1.0);
|
||||||
const vec2 mask = vec2(0, 1.0 / 256.0);
|
const vec2 mask = vec2(0, 1.0 / 255.0);
|
||||||
vec2 comp = fract(_value * shift);
|
vec2 comp = fract(_value * shift);
|
||||||
comp -= comp.xx * mask;
|
comp -= comp.xx * mask;
|
||||||
return comp;
|
return comp;
|
||||||
@@ -360,7 +363,7 @@ vec2 packHalfFloat(float _value)
|
|||||||
|
|
||||||
float unpackHalfFloat(vec2 _rg)
|
float unpackHalfFloat(vec2 _rg)
|
||||||
{
|
{
|
||||||
const vec2 shift = vec2(1.0 / 256.0, 1.0);
|
const vec2 shift = vec2(1.0 / 255.0, 1.0);
|
||||||
return dot(_rg, shift);
|
return dot(_rg, shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user