HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
src
TTauri
Foundation
R32G32B32SFloat.hpp
1
// Copyright 2020 Pokitec
2
// All rights reserved.
3
4
#pragma once
5
6
#include "TTauri/Foundation/vec.hpp"
7
#include <immintrin.h>
8
#include <emmintrin.h>
9
#include <algorithm>
10
11
namespace
tt {
12
13
class
R32G32B32SFloat
{
14
// Red, Green, Blue, Alpha in binary32 (native endian).
15
std::array<float,3>
v;
16
17
public
:
18
tt_force_inline
R32G32B32SFloat
() =
default
;
19
tt_force_inline
R32G32B32SFloat
(
R32G32B32SFloat
const
&rhs)
noexcept
=
default
;
20
tt_force_inline
R32G32B32SFloat
(
R32G32B32SFloat
&&rhs)
noexcept
=
default
;
21
tt_force_inline
R32G32B32SFloat
&operator=(
R32G32B32SFloat
const
&rhs)
noexcept
=
default
;
22
tt_force_inline
R32G32B32SFloat
&operator=(
R32G32B32SFloat
&&rhs)
noexcept
=
default
;
23
24
tt_force_inline
R32G32B32SFloat
(
vec
const
&rhs)
noexcept
{
25
alignas
(16)
std::array<float,4>
tmp;
26
_mm_storeu_ps(tmp.data(), rhs);
27
std::memcpy
(v.
data
(), tmp.data(),
sizeof
(v));
28
}
29
30
tt_force_inline
R32G32B32SFloat
&operator=(
vec
const
&rhs)
noexcept
{
31
alignas
(16)
std::array<float,4>
tmp;
32
_mm_storeu_ps(tmp.data(), rhs);
33
std::memcpy
(v.
data
(), tmp.data(),
sizeof
(v));
34
return
*
this
;
35
}
36
37
tt_force_inline
operator
vec
()
const
noexcept
{
38
alignas
(16)
std::array<float,4>
tmp;
39
std::memcpy
(tmp.data(), v.
data
(),
sizeof
(v));
40
tmp[3] = 0.0;
41
return
_mm_loadu_ps(tmp.data());
42
}
43
44
[[nodiscard]] tt_force_inline
friend
bool
operator==(
R32G32B32SFloat
const
&lhs,
R32G32B32SFloat
const
&rhs)
noexcept
{
45
return
lhs.v == rhs.v;
46
}
47
[[nodiscard]] tt_force_inline
friend
bool
operator!=(
R32G32B32SFloat
const
&lhs,
R32G32B32SFloat
const
&rhs)
noexcept
{
48
return
!(lhs == rhs);
49
}
50
};
51
52
}
tt::R32G32B32SFloat
Definition
R32G32B32SFloat.hpp:13
tt::vec
A 4D vector.
Definition
vec.hpp:37
std::array
std::array::data
T data(T... args)
std::memcpy
T memcpy(T... args)
Generated on Mon Apr 22 2024 12:53:56 for HikoGUI by
1.10.0