simd_vec4.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 #pragma once
00039 
00040 // Dependency:
00041 #include "../glm.hpp"
00042 
00043 #if(GLM_ARCH != GLM_ARCH_PURE)
00044 
00045 #if(GLM_ARCH & GLM_ARCH_SSE2)
00046 #       include "../detail/intrinsic_common.hpp"
00047 #       include "../detail/intrinsic_geometric.hpp"
00048 #       include "../detail/intrinsic_integer.hpp"
00049 #else
00050 #       error "GLM: GLM_GTX_simd_vec4 requires compiler support of SSE2 through intrinsics"
00051 #endif
00052 
00053 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
00054 #       pragma message("GLM: GLM_GTX_simd_vec4 extension included")
00055 #endif
00056 
00057 
00058 // Warning silencer for nameless struct/union.
00059 #if (GLM_COMPILER & GLM_COMPILER_VC)
00060 #       pragma warning(push)
00061 #       pragma warning(disable:4201)   // warning C4201: nonstandard extension used : nameless struct/union
00062 #endif
00063 
00064 namespace glm
00065 {
00066         enum comp
00067         {
00068                 X = 0,
00069                 R = 0,
00070                 S = 0,
00071                 Y = 1,
00072                 G = 1,
00073                 T = 1,
00074                 Z = 2,
00075                 B = 2,
00076                 P = 2,
00077                 W = 3,
00078                 A = 3,
00079                 Q = 3
00080         };
00081 
00082 }//namespace glm
00083 
00084 namespace glm{
00085 namespace detail
00086 {
00089         GLM_ALIGNED_STRUCT(16) fvec4SIMD
00090         {
00091                 enum ctor{null};
00092                 typedef __m128 value_type;
00093                 typedef std::size_t size_type;
00094                 static size_type value_size();
00095 
00096                 typedef fvec4SIMD type;
00097                 typedef tvec4<bool, highp> bool_type;
00098 
00099 #ifdef GLM_SIMD_ENABLE_XYZW_UNION
00100                 union
00101                 {
00102                         __m128 Data;
00103                         struct {float x, y, z, w;};
00104                 };
00105 #else
00106                 __m128 Data;
00107 #endif
00108 
00110                 // Implicit basic constructors
00111 
00112                 fvec4SIMD();
00113                 fvec4SIMD(__m128 const & Data);
00114                 fvec4SIMD(fvec4SIMD const & v);
00115 
00117                 // Explicit basic constructors
00118 
00119                 explicit fvec4SIMD(
00120                         ctor);
00121                 explicit fvec4SIMD(
00122                         float const & s);
00123                 explicit fvec4SIMD(
00124                         float const & x, 
00125                         float const & y, 
00126                         float const & z, 
00127                         float const & w);
00128                 explicit fvec4SIMD(
00129                         vec4 const & v);
00130 
00133 
00134                 fvec4SIMD(vec2 const & v, float const & s1, float const & s2);
00135                 fvec4SIMD(float const & s1, vec2 const & v, float const & s2);
00136                 fvec4SIMD(float const & s1, float const & s2, vec2 const & v);
00137                 fvec4SIMD(vec3 const & v, float const & s);
00138                 fvec4SIMD(float const & s, vec3 const & v);
00139                 fvec4SIMD(vec2 const & v1, vec2 const & v2);
00140                 //fvec4SIMD(ivec4SIMD const & v);
00141 
00143                 // Unary arithmetic operators
00144 
00145                 fvec4SIMD& operator= (fvec4SIMD const & v);
00146                 fvec4SIMD& operator+=(fvec4SIMD const & v);
00147                 fvec4SIMD& operator-=(fvec4SIMD const & v);
00148                 fvec4SIMD& operator*=(fvec4SIMD const & v);
00149                 fvec4SIMD& operator/=(fvec4SIMD const & v);
00150 
00151                 fvec4SIMD& operator+=(float const & s);
00152                 fvec4SIMD& operator-=(float const & s);
00153                 fvec4SIMD& operator*=(float const & s);
00154                 fvec4SIMD& operator/=(float const & s);
00155 
00156                 fvec4SIMD& operator++();
00157                 fvec4SIMD& operator--();
00158 
00160                 // Swizzle operators
00161 
00162                 template <comp X, comp Y, comp Z, comp W>
00163                 fvec4SIMD& swizzle();
00164                 template <comp X, comp Y, comp Z, comp W>
00165                 fvec4SIMD swizzle() const;
00166                 template <comp X, comp Y, comp Z>
00167                 fvec4SIMD swizzle() const;
00168                 template <comp X, comp Y>
00169                 fvec4SIMD swizzle() const;
00170                 template <comp X>
00171                 fvec4SIMD swizzle() const;
00172         };
00173 }//namespace detail
00174 
00175         typedef glm::detail::fvec4SIMD simdVec4;
00176 
00179 
00182         vec4 vec4_cast(
00183                 detail::fvec4SIMD const & x);
00184 
00187         detail::fvec4SIMD abs(detail::fvec4SIMD const & x);
00188 
00191         detail::fvec4SIMD sign(detail::fvec4SIMD const & x);
00192 
00195         detail::fvec4SIMD floor(detail::fvec4SIMD const & x);
00196 
00200         detail::fvec4SIMD trunc(detail::fvec4SIMD const & x);
00201 
00209         detail::fvec4SIMD round(detail::fvec4SIMD const & x);
00210 
00216         //detail::fvec4SIMD roundEven(detail::fvec4SIMD const & x);
00217 
00221         detail::fvec4SIMD ceil(detail::fvec4SIMD const & x);
00222 
00226         detail::fvec4SIMD fract(detail::fvec4SIMD const & x);
00227 
00232         detail::fvec4SIMD mod(
00233                 detail::fvec4SIMD const & x, 
00234                 detail::fvec4SIMD const & y);
00235 
00240         detail::fvec4SIMD mod(
00241                 detail::fvec4SIMD const & x, 
00242                 float const & y);
00243 
00249         //detail::fvec4SIMD modf(
00250         //      detail::fvec4SIMD const & x, 
00251         //      detail::fvec4SIMD & i);
00252 
00256         detail::fvec4SIMD min(
00257                 detail::fvec4SIMD const & x, 
00258                 detail::fvec4SIMD const & y);
00259 
00260         detail::fvec4SIMD min(
00261                 detail::fvec4SIMD const & x, 
00262                 float const & y);
00263 
00267         detail::fvec4SIMD max(
00268                 detail::fvec4SIMD const & x, 
00269                 detail::fvec4SIMD const & y);
00270 
00271         detail::fvec4SIMD max(
00272                 detail::fvec4SIMD const & x, 
00273                 float const & y);
00274 
00279         detail::fvec4SIMD clamp(
00280                 detail::fvec4SIMD const & x, 
00281                 detail::fvec4SIMD const & minVal, 
00282                 detail::fvec4SIMD const & maxVal); 
00283 
00284         detail::fvec4SIMD clamp(
00285                 detail::fvec4SIMD const & x, 
00286                 float const & minVal, 
00287                 float const & maxVal); 
00288 
00315         detail::fvec4SIMD mix(
00316                 detail::fvec4SIMD const & x, 
00317                 detail::fvec4SIMD const & y, 
00318                 detail::fvec4SIMD const & a);
00319 
00323         detail::fvec4SIMD step(
00324                 detail::fvec4SIMD const & edge, 
00325                 detail::fvec4SIMD const & x);
00326 
00327         detail::fvec4SIMD step(
00328                 float const & edge, 
00329                 detail::fvec4SIMD const & x);
00330 
00342         detail::fvec4SIMD smoothstep(
00343                 detail::fvec4SIMD const & edge0, 
00344                 detail::fvec4SIMD const & edge1, 
00345                 detail::fvec4SIMD const & x);
00346 
00347         detail::fvec4SIMD smoothstep(
00348                 float const & edge0, 
00349                 float const & edge1, 
00350                 detail::fvec4SIMD const & x);
00351 
00359         //bvec4 isnan(detail::fvec4SIMD const & x);
00360 
00368         //bvec4 isinf(detail::fvec4SIMD const & x);
00369 
00375         //detail::ivec4SIMD floatBitsToInt(detail::fvec4SIMD const & value);
00376 
00384         //detail::fvec4SIMD intBitsToFloat(detail::ivec4SIMD const & value);
00385 
00389         detail::fvec4SIMD fma(
00390                 detail::fvec4SIMD const & a, 
00391                 detail::fvec4SIMD const & b, 
00392                 detail::fvec4SIMD const & c);
00393 
00404         //detail::fvec4SIMD frexp(detail::fvec4SIMD const & x, detail::ivec4SIMD & exp);
00405 
00413         //detail::fvec4SIMD ldexp(detail::fvec4SIMD const & x, detail::ivec4SIMD const & exp);
00414 
00418         float length(
00419                 detail::fvec4SIMD const & x);
00420 
00425         float fastLength(
00426                 detail::fvec4SIMD const & x);
00427 
00432         float niceLength(
00433                 detail::fvec4SIMD const & x);
00434 
00438         detail::fvec4SIMD length4(
00439                 detail::fvec4SIMD const & x);
00440 
00445         detail::fvec4SIMD fastLength4(
00446                 detail::fvec4SIMD const & x);
00447 
00452         detail::fvec4SIMD niceLength4(
00453                 detail::fvec4SIMD const & x);
00454 
00458         float distance(
00459                 detail::fvec4SIMD const & p0,
00460                 detail::fvec4SIMD const & p1);
00461 
00465         detail::fvec4SIMD distance4(
00466                 detail::fvec4SIMD const & p0,
00467                 detail::fvec4SIMD const & p1);
00468 
00472         float simdDot(
00473                 detail::fvec4SIMD const & x,
00474                 detail::fvec4SIMD const & y);
00475 
00479         detail::fvec4SIMD dot4(
00480                 detail::fvec4SIMD const & x,
00481                 detail::fvec4SIMD const & y);
00482 
00486         detail::fvec4SIMD cross(
00487                 detail::fvec4SIMD const & x,
00488                 detail::fvec4SIMD const & y);
00489 
00493         detail::fvec4SIMD normalize(
00494                 detail::fvec4SIMD const & x);
00495 
00500         detail::fvec4SIMD fastNormalize(
00501                 detail::fvec4SIMD const & x);
00502 
00506         detail::fvec4SIMD simdFaceforward(
00507                 detail::fvec4SIMD const & N,
00508                 detail::fvec4SIMD const & I,
00509                 detail::fvec4SIMD const & Nref);
00510 
00515         detail::fvec4SIMD reflect(
00516                 detail::fvec4SIMD const & I,
00517                 detail::fvec4SIMD const & N);
00518 
00524         detail::fvec4SIMD refract(
00525                 detail::fvec4SIMD const & I,
00526                 detail::fvec4SIMD const & N,
00527                 float const & eta);
00528 
00532         detail::fvec4SIMD sqrt(
00533                 detail::fvec4SIMD const & x);
00534 
00539         detail::fvec4SIMD niceSqrt(
00540                 detail::fvec4SIMD const & x);
00541 
00546         detail::fvec4SIMD fastSqrt(
00547                 detail::fvec4SIMD const & x);
00548 
00552         detail::fvec4SIMD inversesqrt(
00553                 detail::fvec4SIMD const & x);
00554 
00559         detail::fvec4SIMD fastInversesqrt(
00560                 detail::fvec4SIMD const & x);
00561 
00563 }//namespace glm
00564 
00565 #include "simd_vec4.inl"
00566 
00567 #if (GLM_COMPILER & GLM_COMPILER_VC)
00568 #       pragma warning(pop)
00569 #endif
00570 
00571 #endif//(GLM_ARCH != GLM_ARCH_PURE)


rtabmap
Author(s): Mathieu Labbe
autogenerated on Sat Jul 23 2016 11:44:17