| @@ -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(); | ||||