00001
00002
00004
00005
00006
00007
00009
00010
00012
00013 #ifndef glm_gtc_type_ptr
00014 #define glm_gtc_type_ptr
00015
00016
00017 #include "../glm.hpp"
00018 #include <cstring>
00019
00020 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
00021 # pragma message("GLM: GLM_GTC_type_ptr extension included")
00022 #endif
00023
00024 namespace glm{
00025 namespace gtc{
00026 namespace type_ptr
00027 {
00028
00031
00034 template<typename T>
00035 GLM_FUNC_QUALIFIER T const * value_ptr
00036 (
00037 detail::tvec2<T> const & vec
00038 )
00039 {
00040 return &(vec.x);
00041 }
00042
00045 template<typename T>
00046 GLM_FUNC_QUALIFIER T * value_ptr
00047 (
00048 detail::tvec2<T> & vec
00049 )
00050 {
00051 return &(vec.x);
00052 }
00053
00056 template<typename T>
00057 GLM_FUNC_QUALIFIER T const * value_ptr
00058 (
00059 detail::tvec3<T> const & vec
00060 )
00061 {
00062 return &(vec.x);
00063 }
00064
00067 template<typename T>
00068 GLM_FUNC_QUALIFIER T * value_ptr
00069 (
00070 detail::tvec3<T> & vec
00071 )
00072 {
00073 return &(vec.x);
00074 }
00075
00078 template<typename T>
00079 GLM_FUNC_QUALIFIER T const * value_ptr
00080 (
00081 detail::tvec4<T> const & vec
00082 )
00083 {
00084 return &(vec.x);
00085 }
00086
00089 template<typename T>
00090 GLM_FUNC_QUALIFIER T * value_ptr
00091 (
00092 detail::tvec4<T> & vec
00093 )
00094 {
00095 return &(vec.x);
00096 }
00097
00100 template<typename T>
00101 GLM_FUNC_QUALIFIER T const * value_ptr
00102 (
00103 detail::tmat2x2<T> const & mat
00104 )
00105 {
00106 return &(mat[0].x);
00107 }
00108
00111 template<typename T>
00112 GLM_FUNC_QUALIFIER T * value_ptr
00113 (
00114 detail::tmat2x2<T> & mat
00115 )
00116 {
00117 return &(mat[0].x);
00118 }
00119
00122 template<typename T>
00123 GLM_FUNC_QUALIFIER T const * value_ptr
00124 (
00125 detail::tmat3x3<T> const & mat
00126 )
00127 {
00128 return &(mat[0].x);
00129 }
00130
00133 template<typename T>
00134 GLM_FUNC_QUALIFIER T * value_ptr
00135 (
00136 detail::tmat3x3<T> & mat
00137 )
00138 {
00139 return &(mat[0].x);
00140 }
00141
00144 template<typename T>
00145 GLM_FUNC_QUALIFIER T const * value_ptr
00146 (
00147 detail::tmat4x4<T> const & mat
00148 )
00149 {
00150 return &(mat[0].x);
00151 }
00152
00155 template<typename T>
00156 GLM_FUNC_QUALIFIER T * value_ptr
00157 (
00158 detail::tmat4x4<T> & mat
00159 )
00160 {
00161 return &(mat[0].x);
00162 }
00163
00166 template<typename T>
00167 GLM_FUNC_QUALIFIER T const * value_ptr
00168 (
00169 detail::tmat2x3<T> const & mat
00170 )
00171 {
00172 return &(mat[0].x);
00173 }
00174
00177 template<typename T>
00178 GLM_FUNC_QUALIFIER T * value_ptr
00179 (
00180 detail::tmat2x3<T> & mat
00181 )
00182 {
00183 return &(mat[0].x);
00184 }
00185
00188 template<typename T>
00189 GLM_FUNC_QUALIFIER T const * value_ptr
00190 (
00191 detail::tmat3x2<T> const & mat
00192 )
00193 {
00194 return &(mat[0].x);
00195 }
00196
00199 template<typename T>
00200 GLM_FUNC_QUALIFIER T * value_ptr
00201 (
00202 detail::tmat3x2<T> & mat
00203 )
00204 {
00205 return &(mat[0].x);
00206 }
00207
00210 template<typename T>
00211 GLM_FUNC_QUALIFIER T const * value_ptr
00212 (
00213 detail::tmat2x4<T> const & mat
00214 )
00215 {
00216 return &(mat[0].x);
00217 }
00218
00221 template<typename T>
00222 GLM_FUNC_QUALIFIER T * value_ptr
00223 (
00224 detail::tmat2x4<T> & mat
00225 )
00226 {
00227 return &(mat[0].x);
00228 }
00229
00232 template<typename T>
00233 GLM_FUNC_QUALIFIER T const * value_ptr
00234 (
00235 detail::tmat4x2<T> const & mat
00236 )
00237 {
00238 return &(mat[0].x);
00239 }
00240
00243 template<typename T>
00244 GLM_FUNC_QUALIFIER T * value_ptr
00245 (
00246 detail::tmat4x2<T> & mat
00247 )
00248 {
00249 return &(mat[0].x);
00250 }
00251
00254 template<typename T>
00255 GLM_FUNC_QUALIFIER T const * value_ptr
00256 (
00257 detail::tmat3x4<T> const & mat
00258 )
00259 {
00260 return &(mat[0].x);
00261 }
00262
00265 template<typename T>
00266 GLM_FUNC_QUALIFIER T * value_ptr
00267 (
00268 detail::tmat3x4<T> & mat
00269 )
00270 {
00271 return &(mat[0].x);
00272 }
00273
00276 template<typename T>
00277 GLM_FUNC_QUALIFIER T const * value_ptr
00278 (
00279 detail::tmat4x3<T> const & mat
00280 )
00281 {
00282 return &(mat[0].x);
00283 }
00284
00287 template<typename T>
00288 GLM_FUNC_QUALIFIER T * value_ptr(detail::tmat4x3<T> & mat)
00289 {
00290 return &(mat[0].x);
00291 }
00292
00295 template<typename T>
00296 GLM_FUNC_QUALIFIER detail::tvec2<T> make_vec2(T const * const ptr)
00297 {
00298 detail::tvec2<T> Result;
00299 memcpy(value_ptr(Result), ptr, sizeof(detail::tvec2<T>));
00300 return Result;
00301 }
00302
00305 template<typename T>
00306 GLM_FUNC_QUALIFIER detail::tvec3<T> make_vec3(T const * const ptr)
00307 {
00308 detail::tvec3<T> Result;
00309 memcpy(value_ptr(Result), ptr, sizeof(detail::tvec3<T>));
00310 return Result;
00311 }
00312
00315 template<typename T>
00316 GLM_FUNC_QUALIFIER detail::tvec4<T> make_vec4(T const * const ptr)
00317 {
00318 detail::tvec4<T> Result;
00319 memcpy(value_ptr(Result), ptr, sizeof(detail::tvec4<T>));
00320 return Result;
00321 }
00322
00325 template<typename T>
00326 GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2x2(T const * const ptr)
00327 {
00328 detail::tmat2x2<T> Result;
00329 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x2<T>));
00330 return Result;
00331 }
00332
00335 template<typename T>
00336 GLM_FUNC_QUALIFIER detail::tmat2x3<T> make_mat2x3(T const * const ptr)
00337 {
00338 detail::tmat2x3<T> Result;
00339 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x3<T>));
00340 return Result;
00341 }
00342
00345 template<typename T>
00346 GLM_FUNC_QUALIFIER detail::tmat2x4<T> make_mat2x4(T const * const ptr)
00347 {
00348 detail::tmat2x4<T> Result;
00349 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x4<T>));
00350 return Result;
00351 }
00352
00355 template<typename T>
00356 GLM_FUNC_QUALIFIER detail::tmat3x2<T> make_mat3x2(T const * const ptr)
00357 {
00358 detail::tmat3x2<T> Result;
00359 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x2<T>));
00360 return Result;
00361 }
00362
00365 template<typename T>
00366 GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3x3(T const * const ptr)
00367 {
00368 detail::tmat3x3<T> Result;
00369 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x3<T>));
00370 return Result;
00371 }
00372
00375 template<typename T>
00376 GLM_FUNC_QUALIFIER detail::tmat3x4<T> make_mat3x4(T const * const ptr)
00377 {
00378 detail::tmat3x4<T> Result;
00379 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x4<T>));
00380 return Result;
00381 }
00382
00383
00386 template<typename T>
00387 GLM_FUNC_QUALIFIER detail::tmat4x2<T> make_mat4x2(T const * const ptr)
00388 {
00389 detail::tmat4x2<T> Result;
00390 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x2<T>));
00391 return Result;
00392 }
00393
00396 template<typename T>
00397 GLM_FUNC_QUALIFIER detail::tmat4x3<T> make_mat4x3(T const * const ptr)
00398 {
00399 detail::tmat4x3<T> Result;
00400 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x3<T>));
00401 return Result;
00402 }
00403
00406 template<typename T>
00407 GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4x4(T const * const ptr)
00408 {
00409 detail::tmat4x4<T> Result;
00410 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x4<T>));
00411 return Result;
00412 }
00413
00416 template<typename T>
00417 GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2(T const * const ptr)
00418 {
00419 return make_mat2x2(ptr);
00420 }
00421
00424 template<typename T>
00425 GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3(T const * const ptr)
00426 {
00427 return make_mat3x3(ptr);
00428 }
00429
00432 template<typename T>
00433 GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4(T const * const ptr)
00434 {
00435 return make_mat4x4(ptr);
00436 }
00437
00439
00440 }
00441 }
00442 }
00443
00444 #include "type_ptr.inl"
00445
00446 namespace glm{using namespace gtc::type_ptr;}
00447
00448 #endif//glm_gtx_type_ptr
00449