- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List

# swizzle.hpp

Go to the documentation of this file.

    00001
    00002
    00003
    00004
    00005
    00006
    00007
    00008
    00009
    00010
    00011
    00012
    00013
    00014
    00015
    00016
    00017
    00018
    00019
    00020
    00021
    00022
    00023
    00024
    00025
    00026
    00027
    00028
    00029
    00030
    00031
    00032
    00033
    00034
    00035
    00036
    00037
    00038 #ifndef GLM_GTC_swizzle
    00039 #define GLM_GTC_swizzle GLM_VERSION
    00040
    00041 // Dependency:
    00042 #include "../glm.hpp"
    00043 #include "../gtc/type_precision.hpp"
    00044
    00045 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    00046 #       pragma message("GLM: GLM_GTC_swizzle extension included")
    00047 #endif
    00048
    00049 namespace glm
    00050 {
    00053
    00054         template <typename T, template <typename> class vecType>
    00055         T const & swizzle(
    00056                 vecType<T> const & v,
    00057                 comp x);
    00058
    00059         template <typename T, template <typename> class vecType>
    00060         detail::tvec2<T> const & swizzle(
    00061                 vecType<T> const & v,
    00062                 comp x, comp y);
    00063
    00064         template <typename T, template <typename> class vecType>
    00065         detail::tvec3<T> const & swizzle(
    00066                 vecType<T> const & v,
    00067                 comp x, comp y, comp z);
    00068
    00069         template <typename T, template <typename> class vecType>
    00070         detail::tvec4<T> const & swizzle(
    00071                 vecType<T> const & v,
    00072                 comp x, comp y, comp z, comp w);
    00073
    00074         template <typename T, template <typename> class vecType>
    00075         T & swizzle(
    00076                 vecType<T> & v,
    00077                 comp x);
    00078
    00079         template <typename T, template <typename> class vecType>
    00080         detail::tref2<T> swizzle(
    00081                 vecType<T> & v,
    00082                 comp x, comp y);
    00083
    00084         template <typename T, template <typename> class vecType>
    00085         detail::tref3<T> swizzle(
    00086                 vecType<T> & v,
    00087                 comp x, comp y, comp z);
    00088
    00089         template <typename T, template <typename> class vecType>
    00090         detail::tref4<T> swizzle(
    00091                 vecType<T> & v,
    00092                 comp x, comp y, comp z, comp w);
    00093
    00094 #       define static_swizzle1_const(TYPE, SIZE)                                                        \
    00095                 template <comp x>                                                                               \
    00096                 GLM_FUNC_QUALIFIER TYPE swizzle(detail::tvec##SIZE<TYPE> const & v)     \
    00097                 {return v[x];}
    00098
    00099 #       define static_swizzle1_ref(TYPE, SIZE)                                                                  \
    00100                 template <comp x>                                                                                                       \
    00101                 GLM_FUNC_QUALIFIER TYPE& swizzle(detail::tvec##SIZE<TYPE> & v)          \
    00102                 {return v[x];}
    00103
    00104         static_swizzle1_ref(detail::float16, 2)
    00105         static_swizzle1_ref(detail::float16, 3)
    00106         static_swizzle1_ref(detail::float16, 4)
    00107         static_swizzle1_ref(detail::float32, 2)
    00108         static_swizzle1_ref(detail::float32, 3)
    00109         static_swizzle1_ref(detail::float32, 4)
    00110         static_swizzle1_ref(detail::float64, 2)
    00111         static_swizzle1_ref(detail::float64, 3)
    00112         static_swizzle1_ref(detail::float64, 4)
    00113
    00114         static_swizzle1_ref(detail::int8,  2)
    00115         static_swizzle1_ref(detail::int8,  3)
    00116         static_swizzle1_ref(detail::int8,  4)
    00117         static_swizzle1_ref(detail::int16, 2)
    00118         static_swizzle1_ref(detail::int16, 3)
    00119         static_swizzle1_ref(detail::int16, 4)
    00120         static_swizzle1_ref(detail::int32, 2)
    00121         static_swizzle1_ref(detail::int32, 3)
    00122         static_swizzle1_ref(detail::int32, 4)
    00123         static_swizzle1_ref(detail::int64, 2)
    00124         static_swizzle1_ref(detail::int64, 3)
    00125         static_swizzle1_ref(detail::int64, 4)
    00126
    00127         static_swizzle1_ref(detail::uint8,  2)
    00128         static_swizzle1_ref(detail::uint8,  3)
    00129         static_swizzle1_ref(detail::uint8,  4)
    00130         static_swizzle1_ref(detail::uint16, 2)
    00131         static_swizzle1_ref(detail::uint16, 3)
    00132         static_swizzle1_ref(detail::uint16, 4)
    00133         static_swizzle1_ref(detail::uint32, 2)
    00134         static_swizzle1_ref(detail::uint32, 3)
    00135         static_swizzle1_ref(detail::uint32, 4)
    00136         static_swizzle1_ref(detail::uint64, 2)
    00137         static_swizzle1_ref(detail::uint64, 3)
    00138         static_swizzle1_ref(detail::uint64, 4)
    00139 /*
    00140 #       define static_swizzle2_const(TYPE) \
    00141                 template <comp x, comp y> \
    00142                 GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
    00143                 {return TYPE(v[x], v[y]);}
    00144
    00145 #       define static_swizzle3_const(TYPE) \
    00146                 template <comp x, comp y, comp z> \
    00147                 GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
    00148                 {return TYPE(v[x], v[y], v[z]);}
    00149
    00150 #       define static_swizzle4_const(TYPE) \
    00151                 template <comp x, comp y, comp z, comp w> \
    00152                 GLM_FUNC_QUALIFIER TYPE swizzle(TYPE const & v) \
    00153                 {return TYPE(v[x], v[y], v[z], v[w]);}
    00154 */
    00155
    00156 #       define static_swizzle2_const(TYPE, SIZE)                                                                        \
    00157                 template <comp x, comp y>                                                                                               \
    00158                 GLM_FUNC_QUALIFIER detail::tvec2<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v)      \
    00159                 {return detail::tvec2<TYPE>(v[x], v[y]);}
    00160
    00161 #       define static_swizzle3_const(TYPE, SIZE)                                                                        \
    00162                 template <comp x, comp y, comp z>                                                                               \
    00163                 GLM_FUNC_QUALIFIER detail::tvec3<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v)      \
    00164                 {return detail::tvec3<TYPE>(v[x], v[y], v[z]);}
    00165
    00166 #       define static_swizzle4_const(TYPE, SIZE)                                                                        \
    00167                 template <comp x, comp y, comp z, comp w>                                                               \
    00168                 GLM_FUNC_QUALIFIER detail::tvec4<TYPE> swizzle(detail::tvec##SIZE<TYPE> const & v)      \
    00169                 {return detail::tvec4<TYPE>(v[x], v[y], v[z], v[w]);}
    00170
    00171
    00172         static_swizzle2_const(glm::f16, 2)
    00173         static_swizzle2_const(glm::f16, 3)
    00174         static_swizzle2_const(glm::f16, 4)
    00175         static_swizzle2_const(glm::f32, 2)
    00176         static_swizzle2_const(glm::f32, 3)
    00177         static_swizzle2_const(glm::f32, 4)
    00178         static_swizzle2_const(glm::f64, 2)
    00179         static_swizzle2_const(glm::f64, 3)
    00180         static_swizzle2_const(glm::f64, 4)
    00181
    00182         static_swizzle2_const(glm::i8, 2)
    00183         static_swizzle2_const(glm::i8, 3)
    00184         static_swizzle2_const(glm::i8, 4)
    00185         static_swizzle2_const(glm::i16, 2)
    00186         static_swizzle2_const(glm::i16, 3)
    00187         static_swizzle2_const(glm::i16, 4)
    00188         static_swizzle2_const(glm::i32, 2)
    00189         static_swizzle2_const(glm::i32, 3)
    00190         static_swizzle2_const(glm::i32, 4)
    00191         static_swizzle2_const(glm::i64, 2)
    00192         static_swizzle2_const(glm::i64, 3)
    00193         static_swizzle2_const(glm::i64, 4)
    00194
    00195         static_swizzle2_const(glm::u8, 2)
    00196         static_swizzle2_const(glm::u8, 3)
    00197         static_swizzle2_const(glm::u8, 4)
    00198         static_swizzle2_const(glm::u16, 2)
    00199         static_swizzle2_const(glm::u16, 3)
    00200         static_swizzle2_const(glm::u16, 4)
    00201         static_swizzle2_const(glm::u32, 2)
    00202         static_swizzle2_const(glm::u32, 3)
    00203         static_swizzle2_const(glm::u32, 4)
    00204         static_swizzle2_const(glm::u64, 2)
    00205         static_swizzle2_const(glm::u64, 3)
    00206         static_swizzle2_const(glm::u64, 4)
    00207
    00208         static_swizzle3_const(glm::f16, 2)
    00209         static_swizzle3_const(glm::f16, 3)
    00210         static_swizzle3_const(glm::f16, 4)
    00211         static_swizzle3_const(glm::f32, 2)
    00212         static_swizzle3_const(glm::f32, 3)
    00213         static_swizzle3_const(glm::f32, 4)
    00214         static_swizzle3_const(glm::f64, 2)
    00215         static_swizzle3_const(glm::f64, 3)
    00216         static_swizzle3_const(glm::f64, 4)
    00217
    00218         static_swizzle3_const(glm::i8, 2)
    00219         static_swizzle3_const(glm::i8, 3)
    00220         static_swizzle3_const(glm::i8, 4)
    00221         static_swizzle3_const(glm::i16, 2)
    00222         static_swizzle3_const(glm::i16, 3)
    00223         static_swizzle3_const(glm::i16, 4)
    00224         static_swizzle3_const(glm::i32, 2)
    00225         static_swizzle3_const(glm::i32, 3)
    00226         static_swizzle3_const(glm::i32, 4)
    00227         static_swizzle3_const(glm::i64, 2)
    00228         static_swizzle3_const(glm::i64, 3)
    00229         static_swizzle3_const(glm::i64, 4)
    00230
    00231         static_swizzle3_const(glm::u8, 2)
    00232         static_swizzle3_const(glm::u8, 3)
    00233         static_swizzle3_const(glm::u8, 4)
    00234         static_swizzle3_const(glm::u16, 2)
    00235         static_swizzle3_const(glm::u16, 3)
    00236         static_swizzle3_const(glm::u16, 4)
    00237         static_swizzle3_const(glm::u32, 2)
    00238         static_swizzle3_const(glm::u32, 3)
    00239         static_swizzle3_const(glm::u32, 4)
    00240         static_swizzle3_const(glm::u64, 2)
    00241         static_swizzle3_const(glm::u64, 3)
    00242         static_swizzle3_const(glm::u64, 4)
    00243
    00244         static_swizzle4_const(glm::f16, 2)
    00245         static_swizzle4_const(glm::f16, 3)
    00246         static_swizzle4_const(glm::f16, 4)
    00247         static_swizzle4_const(glm::f32, 2)
    00248         static_swizzle4_const(glm::f32, 3)
    00249         static_swizzle4_const(glm::f32, 4)
    00250         static_swizzle4_const(glm::f64, 2)
    00251         static_swizzle4_const(glm::f64, 3)
    00252         static_swizzle4_const(glm::f64, 4)
    00253
    00254         static_swizzle4_const(glm::i8, 2)
    00255         static_swizzle4_const(glm::i8, 3)
    00256         static_swizzle4_const(glm::i8, 4)
    00257         static_swizzle4_const(glm::i16, 2)
    00258         static_swizzle4_const(glm::i16, 3)
    00259         static_swizzle4_const(glm::i16, 4)
    00260         static_swizzle4_const(glm::i32, 2)
    00261         static_swizzle4_const(glm::i32, 3)
    00262         static_swizzle4_const(glm::i32, 4)
    00263         static_swizzle4_const(glm::i64, 2)
    00264         static_swizzle4_const(glm::i64, 3)
    00265         static_swizzle4_const(glm::i64, 4)
    00266
    00267         static_swizzle4_const(glm::u8, 2)
    00268         static_swizzle4_const(glm::u8, 3)
    00269         static_swizzle4_const(glm::u8, 4)
    00270         static_swizzle4_const(glm::u16, 2)
    00271         static_swizzle4_const(glm::u16, 3)
    00272         static_swizzle4_const(glm::u16, 4)
    00273         static_swizzle4_const(glm::u32, 2)
    00274         static_swizzle4_const(glm::u32, 3)
    00275         static_swizzle4_const(glm::u32, 4)
    00276         static_swizzle4_const(glm::u64, 2)
    00277         static_swizzle4_const(glm::u64, 3)
    00278         static_swizzle4_const(glm::u64, 4)
    00279
    00280 #       define static_swizzle2_ref(TYPE, SIZE) \
    00281                 template <glm::comp x, glm::comp y> \
    00282                 GLM_FUNC_QUALIFIER glm::detail::tref2<TYPE> swizzle(detail::tvec##SIZE<TYPE> & v) \
    00283                 {return glm::detail::tref2<TYPE>(v[x], v[y]);}
    00284
    00285 #       define static_swizzle3_ref(TYPE, SIZE) \
    00286                 template <glm::comp x, glm::comp y, glm::comp z> \
    00287                 GLM_FUNC_QUALIFIER glm::detail::tref3<TYPE> swizzle(detail::tvec##SIZE<TYPE> & v) \
    00288                 {return glm::detail::tref3<TYPE>(v[x], v[y], v[z]);}
    00289
    00290 #       define static_swizzle4_ref(TYPE, SIZE) \
    00291                 template <glm::comp x, glm::comp y, glm::comp z, glm::comp w> \
    00292                 GLM_FUNC_QUALIFIER glm::detail::tref4<TYPE> swizzle(detail::tvec##SIZE<TYPE> & v) \
    00293                 {return glm::detail::tref4<TYPE>(v[x], v[y], v[z], v[w]);}
    00294
    00295         static_swizzle2_ref(glm::f16, 2)
    00296         static_swizzle2_ref(glm::f16, 3)
    00297         static_swizzle2_ref(glm::f16, 4)
    00298         static_swizzle2_ref(glm::f32, 2)
    00299         static_swizzle2_ref(glm::f32, 3)
    00300         static_swizzle2_ref(glm::f32, 4)
    00301         static_swizzle2_ref(glm::f64, 2)
    00302         static_swizzle2_ref(glm::f64, 3)
    00303         static_swizzle2_ref(glm::f64, 4)
    00304
    00305         static_swizzle2_ref(glm::i8, 2)
    00306         static_swizzle2_ref(glm::i8, 3)
    00307         static_swizzle2_ref(glm::i8, 4)
    00308         static_swizzle2_ref(glm::i16, 2)
    00309         static_swizzle2_ref(glm::i16, 3)
    00310         static_swizzle2_ref(glm::i16, 4)
    00311         static_swizzle2_ref(glm::i32, 2)
    00312         static_swizzle2_ref(glm::i32, 3)
    00313         static_swizzle2_ref(glm::i32, 4)
    00314         static_swizzle2_ref(glm::i64, 2)
    00315         static_swizzle2_ref(glm::i64, 3)
    00316         static_swizzle2_ref(glm::i64, 4)
    00317
    00318         static_swizzle2_ref(glm::u8, 2)
    00319         static_swizzle2_ref(glm::u8, 3)
    00320         static_swizzle2_ref(glm::u8, 4)
    00321         static_swizzle2_ref(glm::u16, 2)
    00322         static_swizzle2_ref(glm::u16, 3)
    00323         static_swizzle2_ref(glm::u16, 4)
    00324         static_swizzle2_ref(glm::u32, 2)
    00325         static_swizzle2_ref(glm::u32, 3)
    00326         static_swizzle2_ref(glm::u32, 4)
    00327         static_swizzle2_ref(glm::u64, 2)
    00328         static_swizzle2_ref(glm::u64, 3)
    00329         static_swizzle2_ref(glm::u64, 4)
    00330
    00331         static_swizzle3_ref(glm::f16, 3)
    00332         static_swizzle3_ref(glm::f16, 4)
    00333         static_swizzle3_ref(glm::f32, 3)
    00334         static_swizzle3_ref(glm::f32, 4)
    00335         static_swizzle3_ref(glm::f64, 3)
    00336         static_swizzle3_ref(glm::f64, 4)
    00337
    00338         static_swizzle3_ref(glm::i8, 3)
    00339         static_swizzle3_ref(glm::i8, 4)
    00340         static_swizzle3_ref(glm::i16, 3)
    00341         static_swizzle3_ref(glm::i16, 4)
    00342         static_swizzle3_ref(glm::i32, 3)
    00343         static_swizzle3_ref(glm::i32, 4)
    00344         static_swizzle3_ref(glm::i64, 3)
    00345         static_swizzle3_ref(glm::i64, 4)
    00346
    00347         static_swizzle3_ref(glm::u8, 3)
    00348         static_swizzle3_ref(glm::u8, 4)
    00349         static_swizzle3_ref(glm::u16, 3)
    00350         static_swizzle3_ref(glm::u16, 4)
    00351         static_swizzle3_ref(glm::u32, 3)
    00352         static_swizzle3_ref(glm::u32, 4)
    00353         static_swizzle3_ref(glm::u64, 3)
    00354         static_swizzle3_ref(glm::u64, 4)
    00355
    00356         static_swizzle4_ref(glm::f16, 4)
    00357         static_swizzle4_ref(glm::f32, 4)
    00358         static_swizzle4_ref(glm::f64, 4)
    00359
    00360         static_swizzle4_ref(glm::i8, 4)
    00361         static_swizzle4_ref(glm::i16, 4)
    00362         static_swizzle4_ref(glm::i32, 4)
    00363         static_swizzle4_ref(glm::i64, 4)
    00364
    00365         static_swizzle4_ref(glm::u8, 4)
    00366         static_swizzle4_ref(glm::u16, 4)
    00367         static_swizzle4_ref(glm::u32, 4)
    00368         static_swizzle4_ref(glm::u64, 4)
    00369
    00371 }//namespace glm
    00372
    00373 #include "swizzle.inl"
    00374
    00375 #endif//GLM_GTC_swizzle