80 lines
1.8 KiB
C
80 lines
1.8 KiB
C
|
// This code is in the public domain -- castano@gmail.com
|
||
|
|
||
|
#pragma once
|
||
|
#ifndef NV_MATH_PACKEDFLOAT_H
|
||
|
#define NV_MATH_PACKEDFLOAT_H
|
||
|
|
||
|
#include "nvmath.h"
|
||
|
#include "Vector.h"
|
||
|
|
||
|
namespace nv
|
||
|
{
|
||
|
|
||
|
union FloatRGB9E5 {
|
||
|
uint32 v;
|
||
|
struct {
|
||
|
#if NV_BIG_ENDIAN
|
||
|
uint32 e : 5;
|
||
|
uint32 zm : 9;
|
||
|
uint32 ym : 9;
|
||
|
uint32 xm : 9;
|
||
|
#else
|
||
|
uint32 xm : 9;
|
||
|
uint32 ym : 9;
|
||
|
uint32 zm : 9;
|
||
|
uint32 e : 5;
|
||
|
#endif
|
||
|
};
|
||
|
};
|
||
|
|
||
|
union FloatR11G11B10 {
|
||
|
uint32 v;
|
||
|
struct {
|
||
|
#if NV_BIG_ENDIAN
|
||
|
uint32 ze : 5;
|
||
|
uint32 zm : 5;
|
||
|
uint32 ye : 5;
|
||
|
uint32 ym : 6;
|
||
|
uint32 xe : 5;
|
||
|
uint32 xm : 6;
|
||
|
#else
|
||
|
uint32 xm : 6;
|
||
|
uint32 xe : 5;
|
||
|
uint32 ym : 6;
|
||
|
uint32 ye : 5;
|
||
|
uint32 zm : 5;
|
||
|
uint32 ze : 5;
|
||
|
#endif
|
||
|
};
|
||
|
};
|
||
|
|
||
|
union FloatRGBE8 {
|
||
|
uint32 v;
|
||
|
struct {
|
||
|
#if NV_LITTLE_ENDIAN
|
||
|
uint8 r, g, b, e;
|
||
|
#else
|
||
|
uint8 e: 8;
|
||
|
uint8 b: 8;
|
||
|
uint8 g: 8;
|
||
|
uint8 r: 8;
|
||
|
#endif
|
||
|
};
|
||
|
};
|
||
|
|
||
|
NVMATH_API Vector3 rgb9e5_to_vector3(FloatRGB9E5 v);
|
||
|
NVMATH_API FloatRGB9E5 vector3_to_rgb9e5(const Vector3 & v);
|
||
|
|
||
|
NVMATH_API float float11_to_float32(uint v);
|
||
|
NVMATH_API float float10_to_float32(uint v);
|
||
|
|
||
|
NVMATH_API Vector3 r11g11b10_to_vector3(FloatR11G11B10 v);
|
||
|
NVMATH_API FloatR11G11B10 vector3_to_r11g11b10(const Vector3 & v);
|
||
|
|
||
|
NVMATH_API Vector3 rgbe8_to_vector3(FloatRGBE8 v);
|
||
|
NVMATH_API FloatRGBE8 vector3_to_rgbe8(const Vector3 & v);
|
||
|
|
||
|
} // nv
|
||
|
|
||
|
#endif // NV_MATH_PACKEDFLOAT_H
|