simd_vec4.hpp Source File

- Main Page
- Modules
- Namespaces
- Classes
- Files

- File List

# simd_vec4.hpp

    00001
    00002 // OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
    00004 // Created : 2009-05-07
    00005 // Updated : 2009-05-07
    00006 // Licence : This source is under MIT License
    00007 // File    : glm/gtx/simd_vec4.hpp
    00009 // Dependency:
    00010 // - GLM core
    00011 // - intrinsic
    00013
    00014 #ifndef glm_gtx_simd_vec4
    00015 #define glm_gtx_simd_vec4
    00016
    00017 // Dependency:
    00018 #include "../glm.hpp"
    00019
    00020 #if(GLM_ARCH & GLM_ARCH_SSE2)
    00021 #       include "../core/intrinsic_common.hpp"
    00022 #       include "../core/intrinsic_geometric.hpp"
    00023 #else
    00024 #       error "GLM: GLM_GTX_simd_vec4 requires compiler support of SSE2 through intrinsics"
    00025 #endif
    00026
    00027 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    00028 #       pragma message("GLM: GLM_GTX_simd_vec4 extension included")
    00029 #endif
    00030
    00031 namespace glm
    00032 {
    00033         namespace detail
    00034         {
    00037                 GLM_ALIGNED_STRUCT(4) fvec4SIMD
    00038                 {
    00039                         enum ctor{null};
    00040                         typedef __m128 value_type;
    00041                         typedef std::size_t size_type;
    00042                         static size_type value_size();
    00043
    00044                         typedef fvec4SIMD type;
    00045                         typedef tvec4<bool> bool_type;
    00046
    00047                         __m128 Data;
    00048
    00050                         // Implicit basic constructors
    00051
    00052                         fvec4SIMD();
    00053                         fvec4SIMD(__m128 const & Data);
    00054                         fvec4SIMD(fvec4SIMD const & v);
    00055
    00057                         // Explicit basic constructors
    00058
    00059                         explicit fvec4SIMD(
    00060                                 ctor);
    00061                         explicit fvec4SIMD(
    00062                                 float const & s);
    00063                         explicit fvec4SIMD(
    00064                                 float const & x,
    00065                                 float const & y,
    00066                                 float const & z,
    00067                                 float const & w);
    00068                         explicit fvec4SIMD(
    00069                                 tvec4<float> const & v);
    00070
    00073
    00074                         fvec4SIMD(vec2 const & v, float const & s1, float const & s2);
    00075                         fvec4SIMD(float const & s1, vec2 const & v, float const & s2);
    00076                         fvec4SIMD(float const & s1, float const & s2, vec2 const & v);
    00077                         fvec4SIMD(vec3 const & v, float const & s);
    00078                         fvec4SIMD(float const & s, vec3 const & v);
    00079                         fvec4SIMD(vec2 const & v1, vec2 const & v2);
    00080                         //fvec4SIMD(ivec4SIMD const & v);
    00081
    00083                         // Unary arithmetic operators
    00084
    00085                         fvec4SIMD& operator= (fvec4SIMD const & v);
    00086                         fvec4SIMD& operator+=(fvec4SIMD const & v);
    00087                         fvec4SIMD& operator-=(fvec4SIMD const & v);
    00088                         fvec4SIMD& operator*=(fvec4SIMD const & v);
    00089                         fvec4SIMD& operator/=(fvec4SIMD const & v);
    00090
    00091                         fvec4SIMD& operator+=(float const & s);
    00092                         fvec4SIMD& operator-=(float const & s);
    00093                         fvec4SIMD& operator*=(float const & s);
    00094                         fvec4SIMD& operator/=(float const & s);
    00095
    00096                         fvec4SIMD& operator++();
    00097                         fvec4SIMD& operator--();
    00098
    00100                         // Swizzle operators
    00101
    00102                         template <comp X, comp Y, comp Z, comp W>
    00103                         fvec4SIMD& swizzle();
    00104                         template <comp X, comp Y, comp Z, comp W>
    00105                         fvec4SIMD swizzle() const;
    00106                         template <comp X, comp Y, comp Z>
    00107                         fvec4SIMD swizzle() const;
    00108                         template <comp X, comp Y>
    00109                         fvec4SIMD swizzle() const;
    00110                         template <comp X>
    00111                         fvec4SIMD swizzle() const;
    00112                 };
    00113
    00114         }//namespace detail
    00115
    00116         namespace gtx{
    00118         namespace simd_vec4
    00119         {
    00120                 typedef detail::fvec4SIMD simdVec4;
    00121
    00124
    00127                 detail::tvec4<float> vec4_cast(
    00128                         detail::fvec4SIMD const & x);
    00129
    00132                 detail::fvec4SIMD abs(detail::fvec4SIMD const & x);
    00133
    00136                 detail::fvec4SIMD sign(detail::fvec4SIMD const & x);
    00137
    00140                 detail::fvec4SIMD floor(detail::fvec4SIMD const & x);
    00141
    00145                 detail::fvec4SIMD trunc(detail::fvec4SIMD const & x);
    00146
    00153                 detail::fvec4SIMD round(detail::fvec4SIMD const & x);
    00154
    00159                 //detail::fvec4SIMD roundEven(detail::fvec4SIMD const & x);
    00160
    00164                 detail::fvec4SIMD ceil(detail::fvec4SIMD const & x);
    00165
    00168                 detail::fvec4SIMD fract(detail::fvec4SIMD const & x);
    00169
    00173                 detail::fvec4SIMD mod(
    00174                         detail::fvec4SIMD const & x,
    00175                         detail::fvec4SIMD const & y);
    00176
    00180                 detail::fvec4SIMD mod(
    00181                         detail::fvec4SIMD const & x,
    00182                         float const & y);
    00183
    00189                 //detail::fvec4SIMD modf(
    00190                 //      detail::fvec4SIMD const & x,
    00191                 //      detail::fvec4SIMD & i);
    00192
    00195                 detail::fvec4SIMD min(
    00196                         detail::fvec4SIMD const & x,
    00197                         detail::fvec4SIMD const & y);
    00198
    00199                 detail::fvec4SIMD min(
    00200                         detail::fvec4SIMD const & x,
    00201                         float const & y);
    00202
    00205                 detail::fvec4SIMD max(
    00206                         detail::fvec4SIMD const & x,
    00207                         detail::fvec4SIMD const & y);
    00208
    00209                 detail::fvec4SIMD max(
    00210                         detail::fvec4SIMD const & x,
    00211                         float const & y);
    00212
    00216                 detail::fvec4SIMD clamp(
    00217                         detail::fvec4SIMD const & x,
    00218                         detail::fvec4SIMD const & minVal,
    00219                         detail::fvec4SIMD const & maxVal);
    00220
    00221                 detail::fvec4SIMD clamp(
    00222                         detail::fvec4SIMD const & x,
    00223                         float const & minVal,
    00224                         float const & maxVal);
    00225
    00249                 // \todo Test when 'a' is a boolean.
    00251                 detail::fvec4SIMD mix(
    00252                         detail::fvec4SIMD const & x,
    00253                         detail::fvec4SIMD const & y,
    00254                         detail::fvec4SIMD const & a);
    00255
    00258                 detail::fvec4SIMD step(
    00259                         detail::fvec4SIMD const & edge,
    00260                         detail::fvec4SIMD const & x);
    00261
    00262                 detail::fvec4SIMD step(
    00263                         float const & edge,
    00264                         detail::fvec4SIMD const & x);
    00265
    00276                 detail::fvec4SIMD smoothstep(
    00277                         detail::fvec4SIMD const & edge0,
    00278                         detail::fvec4SIMD const & edge1,
    00279                         detail::fvec4SIMD const & x);
    00280
    00281                 detail::fvec4SIMD smoothstep(
    00282                         float const & edge0,
    00283                         float const & edge1,
    00284                         detail::fvec4SIMD const & x);
    00285
    00292                 //bvec4 isnan(detail::fvec4SIMD const & x);
    00293
    00300                 //bvec4 isinf(detail::fvec4SIMD const & x);
    00301
    00306                 //detail::ivec4SIMD floatBitsToInt(detail::fvec4SIMD const & value);
    00307
    00314                 //detail::fvec4SIMD intBitsToFloat(detail::ivec4SIMD const & value);
    00315
    00318                 detail::fvec4SIMD fma(
    00319                         detail::fvec4SIMD const & a,
    00320                         detail::fvec4SIMD const & b,
    00321                         detail::fvec4SIMD const & c);
    00322
    00332                 //detail::fvec4SIMD frexp(detail::fvec4SIMD const & x, detail::ivec4SIMD & exp);
    00333
    00340                 //detail::fvec4SIMD ldexp(detail::fvec4SIMD const & x, detail::ivec4SIMD const & exp);
    00341
    00344                 float length(
    00345                         detail::fvec4SIMD const & x);
    00346
    00350                 float fastLength(
    00351                         detail::fvec4SIMD const & x);
    00352
    00356                 float niceLength(
    00357                         detail::fvec4SIMD const & x);
    00358
    00361                 detail::fvec4SIMD length4(
    00362                         detail::fvec4SIMD const & x);
    00363
    00367                 detail::fvec4SIMD fastLength4(
    00368                         detail::fvec4SIMD const & x);
    00369
    00373                 detail::fvec4SIMD niceLength4(
    00374                         detail::fvec4SIMD const & x);
    00375
    00378                 float distance(
    00379                         detail::fvec4SIMD const & p0,
    00380                         detail::fvec4SIMD const & p1);
    00381
    00384                 detail::fvec4SIMD distance4(
    00385                         detail::fvec4SIMD const & p0,
    00386                         detail::fvec4SIMD const & p1);
    00387
    00390                 float simdDot(
    00391                         detail::fvec4SIMD const & x,
    00392                         detail::fvec4SIMD const & y);
    00393
    00396                 detail::fvec4SIMD dot4(
    00397                         detail::fvec4SIMD const & x,
    00398                         detail::fvec4SIMD const & y);
    00399
    00402                 detail::fvec4SIMD cross(
    00403                         detail::fvec4SIMD const & x,
    00404                         detail::fvec4SIMD const & y);
    00405
    00408                 detail::fvec4SIMD normalize(
    00409                         detail::fvec4SIMD const & x);
    00410
    00414                 detail::fvec4SIMD fastNormalize(
    00415                         detail::fvec4SIMD const & x);
    00416
    00419                 detail::fvec4SIMD simdFaceforward(
    00420                         detail::fvec4SIMD const & N,
    00421                         detail::fvec4SIMD const & I,
    00422                         detail::fvec4SIMD const & Nref);
    00423
    00427                 detail::fvec4SIMD reflect(
    00428                         detail::fvec4SIMD const & I,
    00429                         detail::fvec4SIMD const & N);
    00430
    00435                 detail::fvec4SIMD refract(
    00436                         detail::fvec4SIMD const & I,
    00437                         detail::fvec4SIMD const & N,
    00438                         float const & eta);
    00439
    00442                 detail::fvec4SIMD sqrt(
    00443                         detail::fvec4SIMD const & x);
    00444
    00448                 detail::fvec4SIMD niceSqrt(
    00449                         detail::fvec4SIMD const & x);
    00450
    00454                 detail::fvec4SIMD fastSqrt(
    00455                         detail::fvec4SIMD const & x);
    00456
    00459                 detail::fvec4SIMD inversesqrt(
    00460                         detail::fvec4SIMD const & x);
    00461
    00465                 detail::fvec4SIMD fastInversesqrt(
    00466                         detail::fvec4SIMD const & x);
    00467
    00469         }//namespace simd_vec4
    00470         }//namespace gtx
    00471 }//namespace glm
    00472
    00473 #include "simd_vec4.inl"
    00474
    00475 namespace glm{using namespace gtx::simd_vec4;}
    00476
    00477 #endif//glm_gtx_simd_vec4