2 #include "../quantization/bounded_range.h"
3 #include "../quantization/half_precision.h"
4 #include "../quantization/smallest_three.h"
5 #include "../utility/assert.h"
6 #include "../utility/meta.h"
7 #include "../utility/parameter.h"
9 #include "../stream/serialize_traits.h"
21 template<
typename Stream>
27 BS_ASSERT(stream.serialize_bits(int_value, 16));
32 template<
typename Stream>
38 BS_ASSERT(stream.serialize_bits(int_value, 16));
52 template<
typename Stream>
56 uint32_t int_value = range.quantize(value);
58 BS_ASSERT(stream.serialize_bits(int_value, range.get_bits_required()));
63 template<
typename Stream>
69 BS_ASSERT(stream.serialize_bits(int_value, range.get_bits_required()));
71 value = range.dequantize(int_value);
80 template<
typename Q,
size_t BitsPerElement>
83 template<
typename Stream>
89 BS_ASSERT(stream.serialize_bits(quantized_quat.
m, 2));
90 BS_ASSERT(stream.serialize_bits(quantized_quat.
a, BitsPerElement));
91 BS_ASSERT(stream.serialize_bits(quantized_quat.
b, BitsPerElement));
92 BS_ASSERT(stream.serialize_bits(quantized_quat.
c, BitsPerElement));
97 template<
typename Stream>
103 BS_ASSERT(stream.serialize_bits(quantized_quat.
m, 2));
104 BS_ASSERT(stream.serialize_bits(quantized_quat.
a, BitsPerElement));
105 BS_ASSERT(stream.serialize_bits(quantized_quat.
b, BitsPerElement));
106 BS_ASSERT(stream.serialize_bits(quantized_quat.
c, BitsPerElement));
#define BS_ASSERT(x)
Definition: assert.h:15
Class for quantizing single-precision floats into a range and precision.
Definition: bounded_range.h:33
Class for quantizing single-precision floats into half-precision.
Definition: half_precision.h:34
static float dequantize(uint16_t value) noexcept
Definition: half_precision.h:82
static uint16_t quantize(float value) noexcept
Definition: half_precision.h:36
Definition: parameter.h:64
Class for quantizing a user-specified quaternion into fewer bits using the smallest-three algorithm.
Definition: smallest_three.h:56
static T dequantize(const quantized_quaternion &data) noexcept
Definition: smallest_three.h:132
static quantized_quaternion quantize(const T &quaternion) noexcept
Definition: smallest_three.h:62
std::enable_if_t< T::writing, R > is_writing_t
Definition: meta.h:25
std::enable_if_t< T::reading, R > is_reading_t
Definition: meta.h:28
Definition: bounded_range.h:28
std::conditional_t<(sizeof(T)<=16 &&std::is_trivially_copy_constructible_v< T >), std::add_const_t< T >, std::add_lvalue_reference_t< std::add_const_t< T > >> in
Passes by const or const reference depending on size.
Definition: parameter.h:94
A quantized representation of a quaternion.
Definition: smallest_three.h:34
uint32_t c
Definition: smallest_three.h:38
uint32_t m
Definition: smallest_three.h:35
uint32_t b
Definition: smallest_three.h:37
uint32_t a
Definition: smallest_three.h:36
static utility::is_reading_t< Stream > serialize(Stream &stream, in< bounded_range > range, out< float > value) noexcept
Definition: quantization_traits.h:65
static utility::is_writing_t< Stream > serialize(Stream &stream, in< bounded_range > range, in< float > value) noexcept
Definition: quantization_traits.h:54
static utility::is_reading_t< Stream > serialize(Stream &stream, out< float > value) noexcept
Definition: quantization_traits.h:34
static utility::is_writing_t< Stream > serialize(Stream &stream, in< float > value) noexcept
Definition: quantization_traits.h:23
static utility::is_reading_t< Stream > serialize(Stream &stream, out< Q > value) noexcept
Definition: quantization_traits.h:99
static utility::is_writing_t< Stream > serialize(Stream &stream, in< Q > value) noexcept
Definition: quantization_traits.h:85
A class for specializing trait serialization functions.
Definition: serialize_traits.h:11