type_ptr.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 
00039 
00040 
00041 
00042 
00043 
00044 
00045 
00046 
00047 
00048 
00049 
00050 
00051 
00052 
00053 
00054 
00055 
00056 
00057 
00058 
00059 #ifndef GLM_GTC_type_ptr
00060 #define GLM_GTC_type_ptr GLM_VERSION
00061 
00062 // Dependency:
00063 #include "../glm.hpp"
00064 #include "../gtc/half_float.hpp"
00065 #include "../gtc/quaternion.hpp"
00066 #include <cstring>
00067 
00068 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
00069 #       pragma message("GLM: GLM_GTC_type_ptr extension included")
00070 #endif
00071 
00072 namespace glm
00073 { 
00076 
00079         template<typename T>
00080         GLM_FUNC_QUALIFIER T const * value_ptr
00081         (
00082                 detail::tvec2<T> const & vec
00083         )
00084         {
00085                 return &(vec.x);
00086         }
00087 
00090         template<typename T>
00091         GLM_FUNC_QUALIFIER T * value_ptr
00092         (
00093                 detail::tvec2<T> & vec
00094         )
00095         {
00096                 return &(vec.x);
00097         }
00098 
00101         template<typename T>
00102         GLM_FUNC_QUALIFIER T const * value_ptr
00103         (
00104                 detail::tvec3<T> const & vec
00105         )
00106         {
00107                 return &(vec.x);
00108         }
00109 
00112         template<typename T>
00113         GLM_FUNC_QUALIFIER T * value_ptr
00114         (
00115                 detail::tvec3<T> & vec
00116         )
00117         {
00118                 return &(vec.x);
00119         }
00120                 
00123         template<typename T>
00124         GLM_FUNC_QUALIFIER T const * value_ptr
00125         (       
00126                 detail::tvec4<T> const & vec
00127         )
00128         {
00129                 return &(vec.x);
00130         }
00131 
00134         template<typename T>
00135         GLM_FUNC_QUALIFIER T * value_ptr
00136         (       
00137                 detail::tvec4<T> & vec
00138         )
00139         {
00140                 return &(vec.x);
00141         }
00142 
00145         template<typename T>
00146         GLM_FUNC_QUALIFIER T const * value_ptr
00147         (
00148                 detail::tmat2x2<T> const & mat
00149         )
00150         {
00151                 return &(mat[0].x);
00152         }
00153 
00156         template<typename T>
00157         GLM_FUNC_QUALIFIER T * value_ptr
00158         (
00159                 detail::tmat2x2<T> & mat
00160         )
00161         {
00162                 return &(mat[0].x);
00163         }
00164                 
00167         template<typename T>
00168         GLM_FUNC_QUALIFIER T const * value_ptr
00169         (
00170                 detail::tmat3x3<T> const & mat
00171         )
00172         {
00173                 return &(mat[0].x);
00174         }
00175 
00178         template<typename T>
00179         GLM_FUNC_QUALIFIER T * value_ptr
00180         (
00181                 detail::tmat3x3<T> & mat
00182         )
00183         {
00184                 return &(mat[0].x);
00185         }
00186                 
00189         template<typename T>
00190         GLM_FUNC_QUALIFIER T const * value_ptr
00191         (
00192                 detail::tmat4x4<T> const & mat
00193         )
00194         {
00195                 return &(mat[0].x);
00196         }
00197 
00200         template<typename T>
00201         GLM_FUNC_QUALIFIER T * value_ptr
00202         (
00203                 detail::tmat4x4<T> & mat
00204         )
00205         {
00206                 return &(mat[0].x);
00207         }
00208 
00211         template<typename T>
00212         GLM_FUNC_QUALIFIER T const * value_ptr
00213         (
00214                 detail::tmat2x3<T> const & mat
00215         )
00216         {
00217                 return &(mat[0].x);
00218         }
00219 
00222         template<typename T>
00223         GLM_FUNC_QUALIFIER T * value_ptr
00224         (
00225                 detail::tmat2x3<T> & mat
00226         )
00227         {
00228                 return &(mat[0].x);
00229         }
00230                 
00233         template<typename T>
00234         GLM_FUNC_QUALIFIER T const * value_ptr
00235         (
00236                 detail::tmat3x2<T> const & mat
00237         )
00238         {
00239                 return &(mat[0].x);
00240         }
00241 
00244         template<typename T>
00245         GLM_FUNC_QUALIFIER T * value_ptr
00246         (
00247                 detail::tmat3x2<T> & mat
00248         )
00249         {
00250                 return &(mat[0].x);
00251         }
00252                 
00255         template<typename T>
00256         GLM_FUNC_QUALIFIER T const * value_ptr
00257         (
00258                 detail::tmat2x4<T> const & mat
00259         )
00260         {
00261                 return &(mat[0].x);
00262         }
00263 
00266         template<typename T>
00267         GLM_FUNC_QUALIFIER T * value_ptr
00268         (
00269                 detail::tmat2x4<T> & mat
00270         )
00271         {
00272                 return &(mat[0].x);
00273         }
00274                 
00277         template<typename T>
00278         GLM_FUNC_QUALIFIER T const * value_ptr
00279         (
00280                 detail::tmat4x2<T> const & mat
00281         )
00282         {
00283                 return &(mat[0].x);
00284         }
00285 
00288         template<typename T>
00289         GLM_FUNC_QUALIFIER T * value_ptr
00290         (       
00291                 detail::tmat4x2<T> & mat
00292         )
00293         {
00294                 return &(mat[0].x);
00295         }
00296                 
00299         template<typename T>
00300         GLM_FUNC_QUALIFIER T const * value_ptr
00301         (
00302                 detail::tmat3x4<T> const & mat
00303         )
00304         {
00305                 return &(mat[0].x);
00306         }
00307 
00310         template<typename T>
00311         GLM_FUNC_QUALIFIER T * value_ptr
00312         (
00313                 detail::tmat3x4<T> & mat
00314         )
00315         {
00316                 return &(mat[0].x);
00317         }
00318                 
00321         template<typename T>
00322         GLM_FUNC_QUALIFIER T const * value_ptr
00323         (
00324                 detail::tmat4x3<T> const & mat
00325         )
00326         {
00327                 return &(mat[0].x);
00328         }
00329     
00332         template<typename T>
00333         GLM_FUNC_QUALIFIER T const * value_ptr
00334         (
00335         detail::tquat<T> const & q
00336     )
00337         {
00338                 return &(q[0]);
00339         }
00340     
00343         template<typename T>
00344         GLM_FUNC_QUALIFIER T * value_ptr(detail::tmat4x3<T> & mat)
00345         {
00346                 return &(mat[0].x);
00347         }
00348 
00351         template<typename T>
00352         GLM_FUNC_QUALIFIER detail::tvec2<T> make_vec2(T const * const ptr)
00353         {
00354                 detail::tvec2<T> Result;
00355                 memcpy(value_ptr(Result), ptr, sizeof(detail::tvec2<T>));
00356                 return Result;
00357         }
00358 
00361         template<typename T>
00362         GLM_FUNC_QUALIFIER detail::tvec3<T> make_vec3(T const * const ptr)
00363         {
00364                 detail::tvec3<T> Result;
00365                 memcpy(value_ptr(Result), ptr, sizeof(detail::tvec3<T>));
00366                 return Result;
00367         }
00368 
00371         template<typename T>
00372         GLM_FUNC_QUALIFIER detail::tvec4<T> make_vec4(T const * const ptr)
00373         {
00374                 detail::tvec4<T> Result;
00375                 memcpy(value_ptr(Result), ptr, sizeof(detail::tvec4<T>));
00376                 return Result;
00377         }
00378 
00381         template<typename T>
00382         GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2x2(T const * const ptr)
00383         {
00384                 detail::tmat2x2<T> Result;
00385                 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x2<T>));
00386                 return Result;
00387         }
00388         
00391         template<typename T>
00392         GLM_FUNC_QUALIFIER detail::tmat2x3<T> make_mat2x3(T const * const ptr)
00393         {
00394                 detail::tmat2x3<T> Result;
00395                 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x3<T>));
00396                 return Result;
00397         }
00398         
00401         template<typename T>
00402         GLM_FUNC_QUALIFIER detail::tmat2x4<T> make_mat2x4(T const * const ptr)
00403         {
00404                 detail::tmat2x4<T> Result;
00405                 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat2x4<T>));
00406                 return Result;
00407         }
00408         
00411         template<typename T>
00412         GLM_FUNC_QUALIFIER detail::tmat3x2<T> make_mat3x2(T const * const ptr)
00413         {
00414                 detail::tmat3x2<T> Result;
00415                 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x2<T>));
00416                 return Result;
00417         }
00418         
00421         template<typename T>
00422         GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3x3(T const * const ptr)
00423         {
00424                 detail::tmat3x3<T> Result;
00425                 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x3<T>));
00426                 return Result;
00427         }
00428 
00431         template<typename T>
00432         GLM_FUNC_QUALIFIER detail::tmat3x4<T> make_mat3x4(T const * const ptr)
00433         {
00434                 detail::tmat3x4<T> Result;
00435                 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat3x4<T>));
00436                 return Result;
00437         }
00438         
00441         template<typename T>
00442         GLM_FUNC_QUALIFIER detail::tmat4x2<T> make_mat4x2(T const * const ptr)
00443         {
00444                 detail::tmat4x2<T> Result;
00445                 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x2<T>));
00446                 return Result;
00447         }
00448         
00451         template<typename T>
00452         GLM_FUNC_QUALIFIER detail::tmat4x3<T> make_mat4x3(T const * const ptr)
00453         {
00454                 detail::tmat4x3<T> Result;
00455                 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x3<T>));
00456                 return Result;
00457         }
00458         
00461         template<typename T>
00462         GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4x4(T const * const ptr)
00463         {
00464                 detail::tmat4x4<T> Result;
00465                 memcpy(value_ptr(Result), ptr, sizeof(detail::tmat4x4<T>));
00466                 return Result;
00467         }
00468         
00471         template<typename T>
00472         GLM_FUNC_QUALIFIER detail::tmat2x2<T> make_mat2(T const * const ptr)
00473         {
00474                 return make_mat2x2(ptr);
00475         }
00476         
00479         template<typename T>
00480         GLM_FUNC_QUALIFIER detail::tmat3x3<T> make_mat3(T const * const ptr)
00481         {
00482                 return make_mat3x3(ptr);
00483         }
00484                 
00487         template<typename T>
00488         GLM_FUNC_QUALIFIER detail::tmat4x4<T> make_mat4(T const * const ptr)
00489         {
00490                 return make_mat4x4(ptr);
00491         }
00492  
00495         template<typename T>
00496         GLM_FUNC_QUALIFIER detail::tquat<T> make_quat(T const * const ptr)
00497         {
00498                 detail::tquat<T> Result;
00499                 memcpy(value_ptr(Result), ptr, sizeof(detail::tquat<T>));
00500                 return Result;
00501         }
00502     
00504 }//namespace glm
00505 
00506 #include "type_ptr.inl"
00507 
00508 #endif//GLM_GTC_type_ptr
00509