@@ -35,11 +35,11 @@ class DebugRecordData | |||||
friend class DebugRecord; | friend class DebugRecord; | ||||
private: | private: | ||||
char const *path; | |||||
ivec2 size; | |||||
int fps; | |||||
String m_path; | |||||
ivec2 m_size; | |||||
int m_fps; | |||||
#if defined USE_PIPI | #if defined USE_PIPI | ||||
pipi_sequence_t *sequence; | |||||
pipi_sequence_t *m_sequence; | |||||
#endif | #endif | ||||
}; | }; | ||||
@@ -47,16 +47,16 @@ private: | |||||
* Public DebugRecord class | * Public DebugRecord class | ||||
*/ | */ | ||||
DebugRecord::DebugRecord(char const *path, float fps) | |||||
: data(new DebugRecordData()) | |||||
DebugRecord::DebugRecord(String const &path, float fps) | |||||
: m_data(new DebugRecordData()) | |||||
{ | { | ||||
Ticker::StartRecording(); | Ticker::StartRecording(); | ||||
data->path = strdup(path); | |||||
data->size = ivec2::zero; | |||||
data->fps = (int)(fps + 0.5f); | |||||
m_data->m_path = path; | |||||
m_data->m_size = ivec2::zero; | |||||
m_data->m_fps = (int)(fps + 0.5f); | |||||
#if defined USE_PIPI | #if defined USE_PIPI | ||||
data->sequence = nullptr; | |||||
m_data->m_sequence = nullptr; | |||||
#endif | #endif | ||||
m_drawgroup = DRAWGROUP_CAPTURE; | m_drawgroup = DRAWGROUP_CAPTURE; | ||||
@@ -73,26 +73,27 @@ void DebugRecord::TickDraw(float seconds) | |||||
ivec2 size = Video::GetSize(); | ivec2 size = Video::GetSize(); | ||||
if (data->size != size) | |||||
if (m_data->m_size != size) | |||||
{ | { | ||||
data->size = size; | |||||
m_data->m_size = size; | |||||
#if defined USE_PIPI | #if defined USE_PIPI | ||||
if (data->sequence) | |||||
pipi_close_sequence(data->sequence); | |||||
if (m_data->m_sequence) | |||||
pipi_close_sequence(m_data->m_sequence); | |||||
data->sequence = pipi_open_sequence(data->path, size.x, size.y, | |||||
1 /* RGB */, data->fps, | |||||
1, 1, 60 * 1024 * 1024); | |||||
m_data->m_sequence = pipi_open_sequence(m_data->m_path, size.x, size.y, | |||||
1 /* RGB */, m_data->m_fps, | |||||
1, 1, 60 * 1024 * 1024); | |||||
#endif | #endif | ||||
} | } | ||||
#if defined USE_PIPI | #if defined USE_PIPI | ||||
if (data->sequence) | |||||
if (m_data->m_sequence) | |||||
{ | { | ||||
uint32_t *buffer = new uint32_t[size.x * size.y]; | uint32_t *buffer = new uint32_t[size.x * size.y]; | ||||
Video::Capture(buffer); | Video::Capture(buffer); | ||||
pipi_feed_sequence(data->sequence, (uint8_t *)buffer, size.x, size.y); | |||||
pipi_feed_sequence(m_data->m_sequence, (uint8_t *)buffer, | |||||
size.x, size.y); | |||||
delete[] buffer; | delete[] buffer; | ||||
} | } | ||||
#endif | #endif | ||||
@@ -102,7 +103,7 @@ DebugRecord::~DebugRecord() | |||||
{ | { | ||||
Ticker::StopRecording(); | Ticker::StopRecording(); | ||||
delete data; | |||||
delete m_data; | |||||
} | } | ||||
} /* namespace lol */ | } /* namespace lol */ | ||||
@@ -26,7 +26,7 @@ class DebugRecordData; | |||||
class DebugRecord : public Entity | class DebugRecord : public Entity | ||||
{ | { | ||||
public: | public: | ||||
DebugRecord(char const *path, float fps); | |||||
DebugRecord(String const &path, float fps); | |||||
virtual ~DebugRecord(); | virtual ~DebugRecord(); | ||||
protected: | protected: | ||||
@@ -34,7 +34,7 @@ protected: | |||||
virtual void TickDraw(float seconds); | virtual void TickDraw(float seconds); | ||||
private: | private: | ||||
DebugRecordData *data; | |||||
DebugRecordData *m_data; | |||||
}; | }; | ||||
} /* namespace lol */ | } /* namespace lol */ | ||||
@@ -584,10 +584,10 @@ vec3 Color::WavelengthToCIExyY(float nm) | |||||
if (i < 0 || i > 830 - 360) | if (i < 0 || i > 830 - 360) | ||||
return vec3::zero; | return vec3::zero; | ||||
float t = nm - i, s = 1.0 - t; | |||||
float x = s * cie_1931_xyz[i * 3 + 0] + t * cie_1931_xyz[i * 3 + 3]; | |||||
float y = s * cie_1931_xyz[i * 3 + 1] + t * cie_1931_xyz[i * 3 + 4]; | |||||
float z = s * cie_1931_xyz[i * 3 + 2] + t * cie_1931_xyz[i * 3 + 5]; | |||||
float t = nm - i; | |||||
float x = lol::lerp(cie_1931_xyz[i * 3 + 0], cie_1931_xyz[i * 3 + 3], t); | |||||
float y = lol::lerp(cie_1931_xyz[i * 3 + 1], cie_1931_xyz[i * 3 + 4], t); | |||||
float z = lol::lerp(cie_1931_xyz[i * 3 + 2], cie_1931_xyz[i * 3 + 5], t); | |||||
float normalize = 1.f / (x + y + z); | float normalize = 1.f / (x + y + z); | ||||
return vec3(x * normalize, y * normalize, 100.0f); | return vec3(x * normalize, y * normalize, 100.0f); | ||||
@@ -133,21 +133,36 @@ static inline uint32_t radians(uint32_t x) { return (uint32_t)radians((double)x | |||||
static inline int64_t radians(int64_t x) { return (int64_t) radians((ldouble)x); } | static inline int64_t radians(int64_t x) { return (int64_t) radians((ldouble)x); } | ||||
static inline uint64_t radians(uint64_t x) { return (uint64_t)radians((ldouble)x); } | static inline uint64_t radians(uint64_t x) { return (uint64_t)radians((ldouble)x); } | ||||
static inline float lerp(float const &a, float const &b, float const &x) | |||||
static inline float mix(float const &a, float const &b, float const &x) | |||||
{ | { | ||||
return a + (b - a) * x; | return a + (b - a) * x; | ||||
} | } | ||||
static inline double lerp(double const &a, double const &b, double const &x) | |||||
static inline double mix(double const &a, double const &b, double const &x) | |||||
{ | { | ||||
return a + (b - a) * x; | return a + (b - a) * x; | ||||
} | } | ||||
static inline ldouble lerp(ldouble const &a, ldouble const &b, ldouble const &x) | |||||
static inline ldouble mix(ldouble const &a, ldouble const &b, ldouble const &x) | |||||
{ | { | ||||
return a + (b - a) * x; | return a + (b - a) * x; | ||||
} | } | ||||
/* Inherited from HLSL */ | |||||
static inline float lerp(float const &a, float const &b, float const &x) | |||||
{ | |||||
return mix(a, b, x); | |||||
} | |||||
static inline double lerp(double const &a, double const &b, double const &x) | |||||
{ | |||||
return mix(a, b, x); | |||||
} | |||||
static inline ldouble lerp(ldouble const &a, ldouble const &b, ldouble const &x) | |||||
{ | |||||
return mix(a, b, x); | |||||
} | |||||
/* These accelerated functions will be merged into the above, one day */ | /* These accelerated functions will be merged into the above, one day */ | ||||
double lol_sin(double); | double lol_sin(double); | ||||
@@ -783,7 +783,8 @@ template<> real gamma(real const &x) | |||||
* precision values in order to attain the desired accuracy. It might | * precision values in order to attain the desired accuracy. It might | ||||
* also be useful to sort the ck values by decreasing absolute value | * also be useful to sort the ck values by decreasing absolute value | ||||
* and do the addition in this order. */ | * and do the addition in this order. */ | ||||
int a = ceilf(logf(2) / logf(2 * F_PI) * real::BIGITS * real::BIGIT_BITS); | |||||
int a = (int)ceilf(logf(2) / logf(2 * F_PI) | |||||
* real::BIGITS * real::BIGIT_BITS); | |||||
real ret = sqrt(real::R_PI() * 2); | real ret = sqrt(real::R_PI() * 2); | ||||
real fact_k_1 = real::R_1(); | real fact_k_1 = real::R_1(); | ||||