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