Changeset 2054


Ignore:
Timestamp:
Nov 2, 2012, 12:22:00 AM (7 years ago)
Author:
sam
Message:

math: implement abs() and fmod() for vector types and the half class.

Location:
trunk/src/lol/math
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lol/math/half.h

    r1502 r2054  
    121121static inline half min(half a, half b) { return a < b ? a : b; }
    122122static inline half max(half a, half b) { return a > b ? a : b; }
     123static inline half fmod(half a, half b) { return (half)fmod((float)a, (float)b); }
     124static inline half abs(half a) { return half::makebits(a.bits & 0x7fffu); }
    123125
    124126static inline half clamp(half x, half a, half b)
  • trunk/src/lol/math/vector.h

    r1947 r2054  
    10661066
    10671067/*
    1068  * vec min(vec, vec)     (also max)
    1069  * vec min(vec, scalar)  (also max)
    1070  * vec min(scalar, vec)  (also max)
     1068 * vec min(vec, vec)     (also max, fmod)
     1069 * vec min(vec, scalar)  (also max, fmod)
     1070 * vec min(scalar, vec)  (also max, fmod)
    10711071 */
    10721072#define DECLARE_VECTOR_MINMAX_OP(tname, op, tprefix, type) \
     
    11051105 * vec clamp(vec, vec, scalar)
    11061106 * vec clamp(vec, scalar, vec)
     1107 * vec clamp(vec, scalar, scalar)
    11071108 */
    11081109#define DECLARE_VECTOR_CLAMP_OP(tname, tprefix, type) \
     
    11241125    inline tname<type> clamp(tname<type> const &x, \
    11251126                             tname<type> const &a, type const &b) \
     1127    { \
     1128        return max(min(x, b), a); \
     1129    } \
     1130    \
     1131    tprefix \
     1132    inline tname<type> clamp(tname<type> const &x, \
     1133                             type const &a, type const &b) \
    11261134    { \
    11271135        return max(min(x, b), a); \
     
    12111219    \
    12121220    tprefix \
    1213     inline tname<type> normalize(tname<type> const &val) \
    1214     { \
    1215         type norm = (type)length(val); \
    1216         return norm ? val / norm : val * (type)0; \
     1221    inline tname<type> normalize(tname<type> const &a) \
     1222    { \
     1223        type norm = (type)length(a); \
     1224        return norm ? a / norm : a * (type)0; \
     1225    } \
     1226    \
     1227    tprefix \
     1228    inline tname<type> abs(tname<type> const &a) \
     1229    { \
     1230        using std::abs; \
     1231        tname<type> ret; \
     1232        for (size_t n = 0; n < sizeof(a) / sizeof(type); n++) \
     1233            ret[n] = abs(a[n]); \
     1234        return ret; \
    12171235    }
    12181236
     
    12711289    DECLARE_VECTOR_MINMAX_OP(tname, min, tprefix, type) \
    12721290    DECLARE_VECTOR_MINMAX_OP(tname, max, tprefix, type) \
     1291    DECLARE_VECTOR_MINMAX_OP(tname, fmod, tprefix, type) \
    12731292    DECLARE_VECTOR_CLAMP_OP(tname, tprefix, type)
    12741293
Note: See TracChangeset for help on using the changeset viewer.