43 value_type x, y, z, w;
47 value_type r, g, b, a;
51 value_type s, t, p, q;
59 value{v.x, v.y, v.z, v.w} {}
62 constexpr t_vec4(value_type in_x, value_type in_y, value_type in_z, value_type in_w) :
63 value{in_x, in_y, in_z, in_w} {}
65 constexpr explicit t_vec4(
const VkClearColorValue& v) :
66 value{
static_cast<value_type
>(v.float32[0]),
static_cast<value_type
>(v.float32[1]),
static_cast<value_type
>(v.float32[2]),
static_cast<value_type
>(v.float32[3])} {}
70 value{
static_cast<T
>(v.x),
static_cast<T
>(v.y),
static_cast<T
>(v.z),
static_cast<T
>(v.w)} {}
73 constexpr t_vec4(
const t_vec2<R>& v, value_type in_z, value_type in_w) :
74 value{
static_cast<T
>(v.x),
static_cast<T
>(v.y), in_z, in_w} {}
78 value{
static_cast<T
>(v.x),
static_cast<T
>(v.y),
static_cast<T
>(v.z), in_w} {}
80 constexpr std::size_t size()
const {
return 4; }
82 value_type& operator[](std::size_t i) {
return value[i]; }
83 value_type operator[](std::size_t i)
const {
return value[i]; }
88 value[0] =
static_cast<value_type
>(rhs[0]);
89 value[1] =
static_cast<value_type
>(rhs[1]);
90 value[2] =
static_cast<value_type
>(rhs[2]);
91 value[3] =
static_cast<value_type
>(rhs[3]);
95 t_vec4& operator=(
const VkClearColorValue& v)
97 value[0] =
static_cast<value_type
>(v.float32[0]);
98 value[1] =
static_cast<value_type
>(v.float32[1]);
99 value[2] =
static_cast<value_type
>(v.float32[2]);
100 value[3] =
static_cast<value_type
>(v.float32[3]);
104 T* data() {
return value; }
105 const T* data()
const {
return value; }
107 void set(value_type in_x, value_type in_y, value_type in_z, value_type in_w)
117 value[0] += rhs.value[0];
118 value[1] += rhs.value[1];
119 value[2] += rhs.value[2];
120 value[3] += rhs.value[3];
126 value[0] -= rhs.value[0];
127 value[1] -= rhs.value[1];
128 value[2] -= rhs.value[2];
129 value[3] -= rhs.value[3];
133 inline t_vec4& operator*=(value_type rhs)
144 value[0] *= rhs.value[0];
145 value[1] *= rhs.value[1];
146 value[2] *= rhs.value[2];
147 value[3] *= rhs.value[3];
151 inline t_vec4& operator/=(value_type rhs)
153 if constexpr (std::is_floating_point_v<value_type>)
155 value_type inv =
static_cast<value_type
>(1.0) / rhs;
171 operator VkClearColorValue()
const noexcept {
return VkClearColorValue{{r, g, b, a}}; }
173 explicit operator bool()
const noexcept {
return value[0] != 0.0 || value[1] != 0.0 || value[2] != 0.0 || value[3] != 0.0; }
221 return t_vec4<T>(lhs[0] - rhs[0], lhs[1] - rhs[1], lhs[2] - rhs[2], lhs[3] - rhs[3]);
227 return t_vec4<T>(-v[0], -v[1], -v[2], -v[3]);
233 return t_vec4<T>(lhs[0] + rhs[0], lhs[1] + rhs[1], lhs[2] + rhs[2], lhs[3] + rhs[3]);
239 return t_vec4<T>(lhs[0] * rhs, lhs[1] * rhs, lhs[2] * rhs, lhs[3] * rhs);
245 return t_vec4<T>(lhs[0] * rhs[0], lhs[1] * rhs[1], lhs[2] * rhs[2], lhs[3] * rhs[3]);
254 return t_vec4<T>(lhs[0] * inv, lhs[1] * inv, lhs[2] * inv, lhs[3] * inv);
258 return t_vec4<T>(lhs[0] / rhs, lhs[1] / rhs, lhs[2] / rhs, lhs[3] / rhs);