p2p/stingray_sdk/plugin_foundation/math.inl
Lucas Schwiderski 2c9ce46dd2
chore: Rework project structure
There likely won't be much need for multiple separate crates.
2023-05-26 23:42:01 +02:00

120 lines
2 KiB
C++

#include "assert.h"
namespace stingray_plugin_foundation {
__forceinline bool math::is_pow2(unsigned x)
{
return (x & (x - 1)) == 0;
}
__forceinline float math::square_root(float f)
{
return sqrtf(f);
}
__forceinline float math::degrees_to_radians(float f)
{
return f / 180.0f * pi;
}
__forceinline float math::radians_to_degrees(float f)
{
return 180.0f * f / pi;
}
template <class T> __forceinline T math::max(T a, T b)
{
return a > b ? a : b;
}
template <class T> __forceinline T math::max3(T a, T b, T c)
{
return max(a, max(b,c));
}
template <class T> __forceinline T math::min(T a, T b)
{
return a < b ? a : b;
}
template <class T> __forceinline T math::min3(T a, T b, T c)
{
return min(a, min(b,c));
}
template <class T> __forceinline T math::clamp(T x, T min, T max)
{
if(x>max)
return max;
else if(x<min)
return min;
else
return x;
}
template <class T> __forceinline T math::abs(T x)
{
if (x > 0)
return x;
else
return -x;
}
template <class T> __forceinline T math::sign(T x)
{
if (x > 0)
return T(1);
else if (x == 0)
return T(0);
else
return T(-1);
}
__forceinline unsigned math::branchless_max(unsigned a, unsigned b)
{
return a - ((a-b) & (a-b)>>31);
}
__forceinline unsigned math::branchless_min(unsigned a, unsigned b)
{
return b + ((a-b) & (a-b)>>31);
}
__forceinline unsigned math::div_ceil(unsigned a, unsigned b) {
return (a+b-1)/b;
}
__forceinline unsigned math::div_round(unsigned a, unsigned b) {
return (a+b/2)/b;
}
__forceinline float lerp(float a, float b, float p)
{
return a * (1-p) + b * p;
}
inline void Crossfade::update(float dt)
{
if (_fade_in_t < FLT_MAX) {
_fade_in += (1 - _fade_in) * dt / _fade_in_t;
_fade_in_t -= dt;
if (_fade_in_t <= 0) {
_fade_in_t = FLT_MAX;
_fade_in = 1;
}
}
if (_fade_out_t < FLT_MAX) {
_fade_out += (1 - _fade_out) * dt / _fade_out_t;
_fade_out_t -= dt;
if (_fade_out_t <= 0) {
_fade_out_t = FLT_MAX;
_fade_out = 1;
}
}
XENSURE(blend() >= 0.0f);
}
}