| @@ -364,7 +364,7 @@ Shader::Shader(char const *vert, char const *frag) | |||||
| glGetActiveAttrib(data->prog_id, i, max_len, &attrib_len, (GLint*)&attrib_size, (GLenum*)&attrib_type, name_buffer); | glGetActiveAttrib(data->prog_id, i, max_len, &attrib_len, (GLint*)&attrib_size, (GLenum*)&attrib_type, name_buffer); | ||||
| String name(name_buffer); | String name(name_buffer); | ||||
| int index = 0; | |||||
| int index = -1; | |||||
| VertexUsage usage = VertexUsage::Max; | VertexUsage usage = VertexUsage::Max; | ||||
| for (int j = 0; j < VertexUsage::Max; ++j) | for (int j = 0; j < VertexUsage::Max; ++j) | ||||
| { | { | ||||
| @@ -377,9 +377,10 @@ Shader::Shader(char const *vert, char const *frag) | |||||
| } | } | ||||
| } | } | ||||
| if (usage == VertexUsage::Max || index == LONG_MIN || index == LONG_MAX) | |||||
| if (usage == VertexUsage::Max || index == -1) | |||||
| { | { | ||||
| Log::Error("unable to parse attribute sementic from name: %s", name_buffer); | |||||
| Log::Error("unable to parse attribute semantic from name: %s", | |||||
| name_buffer); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -390,7 +391,7 @@ Shader::Shader(char const *vert, char const *frag) | |||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||
| if (data->attrib_locations.HasKey(flags)) | if (data->attrib_locations.HasKey(flags)) | ||||
| { | { | ||||
| Log::Error("an error occured while parsing attribute sementics"); | |||||
| Log::Error("an error occured while parsing attribute semantics"); | |||||
| } | } | ||||
| #endif | #endif | ||||
| data->attrib_locations[flags] = location; | data->attrib_locations[flags] = location; | ||||
| @@ -19,7 +19,12 @@ namespace lol | |||||
| class KeyBinding | class KeyBinding | ||||
| { | { | ||||
| public: | public: | ||||
| KeyBinding() : m_device(nullptr), m_current(false), m_previous(false), m_keyindex(-1) {} | |||||
| KeyBinding() | |||||
| : m_device(nullptr), | |||||
| m_keyindex(-1), | |||||
| m_current(false), | |||||
| m_previous(false) | |||||
| {} | |||||
| /** Indicate wheither the key is currently down */ | /** Indicate wheither the key is currently down */ | ||||
| bool IsDown() const { return m_current; } | bool IsDown() const { return m_current; } | ||||
| @@ -52,7 +57,14 @@ protected: | |||||
| class AxisBinding | class AxisBinding | ||||
| { | { | ||||
| public: | public: | ||||
| AxisBinding() : m_device(nullptr), m_current(0.0f), m_previous(0.0f), m_axisindex(-1), m_minkeyindex(-1), m_maxkeyindex(-1) {} | |||||
| AxisBinding() | |||||
| : m_device(nullptr), | |||||
| m_axisindex(-1), | |||||
| m_minkeyindex(-1), | |||||
| m_maxkeyindex(-1), | |||||
| m_current(0.0f), | |||||
| m_previous(0.0f) | |||||
| {} | |||||
| /** Gets the current absolute value of this axis */ | /** Gets the current absolute value of this axis */ | ||||
| float GetValue() const { return m_current; } | float GetValue() const { return m_current; } | ||||
| @@ -69,7 +81,8 @@ public: | |||||
| void ClearBinding(); | void ClearBinding(); | ||||
| /** Indicate wheither a physical device and axis has been bound */ | /** Indicate wheither a physical device and axis has been bound */ | ||||
| bool IsBound() { return m_device && m_axisindex != -1 || m_maxkeyindex != -1; } | |||||
| bool IsBound() { return m_device && | |||||
| (m_axisindex != -1 || m_maxkeyindex != -1); } | |||||
| protected: | protected: | ||||
| void Update() { m_previous = m_current; m_current = IsBound() ? RetrieveCurrentValue() : 0.0f; } | void Update() { m_previous = m_current; m_current = IsBound() ? RetrieveCurrentValue() : 0.0f; } | ||||
| @@ -171,20 +171,27 @@ static inline ldouble ceil(ldouble x) { return std::ceil(x); } | |||||
| static inline T fract(T x) { return x - lol::floor(x); } \ | static inline T fract(T x) { return x - lol::floor(x); } \ | ||||
| static inline T min(T x, T y) { return std::min(x, y); } \ | static inline T min(T x, T y) { return std::min(x, y); } \ | ||||
| static inline T max(T x, T y) { return std::max(x, y); } \ | static inline T max(T x, T y) { return std::max(x, y); } \ | ||||
| static inline T clamp(T x, T y, T z) { return min(max(x, y), z); } \ | |||||
| static inline T clamp(T x, T y, T z) { return min(max(x, y), z); } | |||||
| #define LOL_GENERIC_FUNC_SIGNED(T) \ | |||||
| LOL_GENERIC_FUNC(T) \ | |||||
| static inline T sign(T x) { return (T)(((T)0 < x) - (x < (T)0)); } | static inline T sign(T x) { return (T)(((T)0 < x) - (x < (T)0)); } | ||||
| LOL_GENERIC_FUNC(uint8_t) | |||||
| LOL_GENERIC_FUNC(int8_t) | |||||
| LOL_GENERIC_FUNC(uint16_t) | |||||
| LOL_GENERIC_FUNC(int16_t) | |||||
| LOL_GENERIC_FUNC(uint32_t) | |||||
| LOL_GENERIC_FUNC(int32_t) | |||||
| LOL_GENERIC_FUNC(uint64_t) | |||||
| LOL_GENERIC_FUNC(int64_t) | |||||
| LOL_GENERIC_FUNC(float) | |||||
| LOL_GENERIC_FUNC(double) | |||||
| LOL_GENERIC_FUNC(ldouble) | |||||
| #define LOL_GENERIC_FUNC_UNSIGNED(T) \ | |||||
| LOL_GENERIC_FUNC(T) \ | |||||
| static inline T sign(T x) { return (T)((T)0 < x); } | |||||
| LOL_GENERIC_FUNC_UNSIGNED(uint8_t) | |||||
| LOL_GENERIC_FUNC_SIGNED(int8_t) | |||||
| LOL_GENERIC_FUNC_UNSIGNED(uint16_t) | |||||
| LOL_GENERIC_FUNC_SIGNED(int16_t) | |||||
| LOL_GENERIC_FUNC_UNSIGNED(uint32_t) | |||||
| LOL_GENERIC_FUNC_SIGNED(int32_t) | |||||
| LOL_GENERIC_FUNC_UNSIGNED(uint64_t) | |||||
| LOL_GENERIC_FUNC_SIGNED(int64_t) | |||||
| LOL_GENERIC_FUNC_SIGNED(float) | |||||
| LOL_GENERIC_FUNC_SIGNED(double) | |||||
| LOL_GENERIC_FUNC_SIGNED(ldouble) | |||||
| #undef LOL_GENERIC_FUNC | #undef LOL_GENERIC_FUNC | ||||
| } /* namespace lol */ | } /* namespace lol */ | ||||