⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 macros.h

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 H
📖 第 1 页 / 共 2 页
字号:
#define SUB_3V( DST, SRCA, SRCB )        \do {                                     \      (DST)[0] = (SRCA)[0] - (SRCB)[0];  \      (DST)[1] = (SRCA)[1] - (SRCB)[1];  \      (DST)[2] = (SRCA)[2] - (SRCB)[2];  \} while (0)/** Addition */#define ADD_3V( DST, SRCA, SRCB )       \do {                                    \      (DST)[0] = (SRCA)[0] + (SRCB)[0]; \      (DST)[1] = (SRCA)[1] + (SRCB)[1]; \      (DST)[2] = (SRCA)[2] + (SRCB)[2]; \} while (0)/** In-place scalar multiplication */#define SCALE_3V( DST, SRCA, SRCB )     \do {                                    \      (DST)[0] = (SRCA)[0] * (SRCB)[0]; \      (DST)[1] = (SRCA)[1] * (SRCB)[1]; \      (DST)[2] = (SRCA)[2] * (SRCB)[2]; \} while (0)/** In-place element-wise multiplication */#define SELF_SCALE_3V( DST, SRC )   \do {                                \      (DST)[0] *= (SRC)[0];         \      (DST)[1] *= (SRC)[1];         \      (DST)[2] *= (SRC)[2];         \} while (0)/** In-place addition */#define ACC_3V( DST, SRC )          \do {                                \      (DST)[0] += (SRC)[0];         \      (DST)[1] += (SRC)[1];         \      (DST)[2] += (SRC)[2];         \} while (0)/** Element-wise multiplication and addition */#define ACC_SCALE_3V( DST, SRCA, SRCB )     \do {                                        \      (DST)[0] += (SRCA)[0] * (SRCB)[0];    \      (DST)[1] += (SRCA)[1] * (SRCB)[1];    \      (DST)[2] += (SRCA)[2] * (SRCB)[2];    \} while (0)/** Scalar multiplication */#define SCALE_SCALAR_3V( DST, S, SRCB ) \do {                                    \      (DST)[0] = S * (SRCB)[0];         \      (DST)[1] = S * (SRCB)[1];         \      (DST)[2] = S * (SRCB)[2];         \} while (0)/** In-place scalar multiplication and addition */#define ACC_SCALE_SCALAR_3V( DST, S, SRCB ) \do {                                        \      (DST)[0] += S * (SRCB)[0];            \      (DST)[1] += S * (SRCB)[1];            \      (DST)[2] += S * (SRCB)[2];            \} while (0)/** In-place scalar multiplication */#define SELF_SCALE_SCALAR_3V( DST, S ) \do {                                   \      (DST)[0] *= S;                   \      (DST)[1] *= S;                   \      (DST)[2] *= S;                   \} while (0)/** In-place scalar addition */#define ACC_SCALAR_3V( DST, S )     \do {                                \      (DST)[0] += S;                \      (DST)[1] += S;                \      (DST)[2] += S;                \} while (0)/** Assignment */#define ASSIGN_3V( V, V0, V1, V2 )  \do {                                \    V[0] = V0;                      \    V[1] = V1;                      \    V[2] = V2;                      \} while(0)/*@}*//**********************************************************************//** \name 2-element vector operations*//*@{*//** Zero */#define ZERO_2V( DST )  (DST)[0] = (DST)[1] = 0/** Copy a 2-element vector */#define COPY_2V( DST, SRC )         \do {                        \   (DST)[0] = (SRC)[0];             \   (DST)[1] = (SRC)[1];             \} while (0)/** Copy a 2-element vector with cast */#define COPY_2V_CAST( DST, SRC, CAST )      \do {                        \   (DST)[0] = (CAST)(SRC)[0];           \   (DST)[1] = (CAST)(SRC)[1];           \} while (0)/** Copy a 2-element float vector */#define COPY_2FV( DST, SRC )            \do {                        \   const GLfloat *_tmp = (SRC);         \   (DST)[0] = _tmp[0];              \   (DST)[1] = _tmp[1];              \} while (0)/** Subtraction */#define SUB_2V( DST, SRCA, SRCB )       \do {                        \      (DST)[0] = (SRCA)[0] - (SRCB)[0];     \      (DST)[1] = (SRCA)[1] - (SRCB)[1];     \} while (0)/** Addition */#define ADD_2V( DST, SRCA, SRCB )       \do {                        \      (DST)[0] = (SRCA)[0] + (SRCB)[0];     \      (DST)[1] = (SRCA)[1] + (SRCB)[1];     \} while (0)/** In-place scalar multiplication */#define SCALE_2V( DST, SRCA, SRCB )     \do {                        \      (DST)[0] = (SRCA)[0] * (SRCB)[0];     \      (DST)[1] = (SRCA)[1] * (SRCB)[1];     \} while (0)/** In-place addition */#define ACC_2V( DST, SRC )          \do {                        \      (DST)[0] += (SRC)[0];         \      (DST)[1] += (SRC)[1];         \} while (0)/** Element-wise multiplication and addition */#define ACC_SCALE_2V( DST, SRCA, SRCB )     \do {                        \      (DST)[0] += (SRCA)[0] * (SRCB)[0];    \      (DST)[1] += (SRCA)[1] * (SRCB)[1];    \} while (0)/** Scalar multiplication */#define SCALE_SCALAR_2V( DST, S, SRCB )     \do {                        \      (DST)[0] = S * (SRCB)[0];         \      (DST)[1] = S * (SRCB)[1];         \} while (0)/** In-place scalar multiplication and addition */#define ACC_SCALE_SCALAR_2V( DST, S, SRCB ) \do {                        \      (DST)[0] += S * (SRCB)[0];        \      (DST)[1] += S * (SRCB)[1];        \} while (0)/** In-place scalar multiplication */#define SELF_SCALE_SCALAR_2V( DST, S )      \do {                        \      (DST)[0] *= S;                \      (DST)[1] *= S;                \} while (0)/** In-place scalar addition */#define ACC_SCALAR_2V( DST, S )         \do {                        \      (DST)[0] += S;                \      (DST)[1] += S;                \} while (0)/** Assign scalers to short vectors */#define ASSIGN_2V( V, V0, V1 )	\do {				\    V[0] = V0;			\    V[1] = V1;			\} while(0)/*@}*//** \name Linear interpolation macros *//*@{*//** * Linear interpolation * * \note \p OUT argument is evaluated twice! * \note Be wary of using *coord++ as an argument to any of these macros! */#define LINTERP(T, OUT, IN) ((OUT) + (T) * ((IN) - (OUT)))/* Can do better with integer math */#define INTERP_UB( t, dstub, outub, inub )  \do {                        \   GLfloat inf = UBYTE_TO_FLOAT( inub );    \   GLfloat outf = UBYTE_TO_FLOAT( outub );  \   GLfloat dstf = LINTERP( t, outf, inf );  \   UNCLAMPED_FLOAT_TO_UBYTE( dstub, dstf ); \} while (0)#define INTERP_CHAN( t, dstc, outc, inc )   \do {                        \   GLfloat inf = CHAN_TO_FLOAT( inc );      \   GLfloat outf = CHAN_TO_FLOAT( outc );    \   GLfloat dstf = LINTERP( t, outf, inf );  \   UNCLAMPED_FLOAT_TO_CHAN( dstc, dstf );   \} while (0)#define INTERP_UI( t, dstui, outui, inui )  \   dstui = (GLuint) (GLint) LINTERP( (t), (GLfloat) (outui), (GLfloat) (inui) )#define INTERP_F( t, dstf, outf, inf )      \   dstf = LINTERP( t, outf, inf )#define INTERP_4F( t, dst, out, in )        \do {                        \   dst[0] = LINTERP( (t), (out)[0], (in)[0] );  \   dst[1] = LINTERP( (t), (out)[1], (in)[1] );  \   dst[2] = LINTERP( (t), (out)[2], (in)[2] );  \   dst[3] = LINTERP( (t), (out)[3], (in)[3] );  \} while (0)#define INTERP_3F( t, dst, out, in )        \do {                        \   dst[0] = LINTERP( (t), (out)[0], (in)[0] );  \   dst[1] = LINTERP( (t), (out)[1], (in)[1] );  \   dst[2] = LINTERP( (t), (out)[2], (in)[2] );  \} while (0)#define INTERP_4CHAN( t, dst, out, in )         \do {                            \   INTERP_CHAN( (t), (dst)[0], (out)[0], (in)[0] ); \   INTERP_CHAN( (t), (dst)[1], (out)[1], (in)[1] ); \   INTERP_CHAN( (t), (dst)[2], (out)[2], (in)[2] ); \   INTERP_CHAN( (t), (dst)[3], (out)[3], (in)[3] ); \} while (0)#define INTERP_3CHAN( t, dst, out, in )         \do {                            \   INTERP_CHAN( (t), (dst)[0], (out)[0], (in)[0] ); \   INTERP_CHAN( (t), (dst)[1], (out)[1], (in)[1] ); \   INTERP_CHAN( (t), (dst)[2], (out)[2], (in)[2] ); \} while (0)#define INTERP_SZ( t, vec, to, out, in, sz )                \do {                                    \   switch (sz) {                            \   case 4: vec[to][3] = LINTERP( (t), (vec)[out][3], (vec)[in][3] );    \   case 3: vec[to][2] = LINTERP( (t), (vec)[out][2], (vec)[in][2] );    \   case 2: vec[to][1] = LINTERP( (t), (vec)[out][1], (vec)[in][1] );    \   case 1: vec[to][0] = LINTERP( (t), (vec)[out][0], (vec)[in][0] );    \   }                                    \} while(0)/*@}*//** Clamp X to [MIN,MAX] */#define CLAMP( X, MIN, MAX )  ( (X)<(MIN) ? (MIN) : ((X)>(MAX) ? (MAX) : (X)) )/** Assign X to CLAMP(X, MIN, MAX) */#define CLAMP_SELF(x, mn, mx)  \   ( (x)<(mn) ? ((x) = (mn)) : ((x)>(mx) ? ((x)=(mx)) : (x)) )/** Minimum of two values: */#define MIN2( A, B )   ( (A)<(B) ? (A) : (B) )/** Maximum of two values: */#define MAX2( A, B )   ( (A)>(B) ? (A) : (B) )/** Dot product of two 2-element vectors */#define DOT2( a, b )  ( (a)[0]*(b)[0] + (a)[1]*(b)[1] )/** Dot product of two 3-element vectors */#define DOT3( a, b )  ( (a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2] )/** Dot product of two 4-element vectors */#define DOT4( a, b )  ( (a)[0]*(b)[0] + (a)[1]*(b)[1] + \            (a)[2]*(b)[2] + (a)[3]*(b)[3] )/** Dot product of two 4-element vectors */#define DOT4V(v,a,b,c,d) (v[0]*(a) + v[1]*(b) + v[2]*(c) + v[3]*(d))/** Cross product of two 3-element vectors */#define CROSS3(n, u, v)             \do {                        \   (n)[0] = (u)[1]*(v)[2] - (u)[2]*(v)[1];  \   (n)[1] = (u)[2]*(v)[0] - (u)[0]*(v)[2];  \   (n)[2] = (u)[0]*(v)[1] - (u)[1]*(v)[0];  \} while (0)/* Normalize a 3-element vector to unit length. */#define NORMALIZE_3FV( V )          \do {                        \   GLfloat len = (GLfloat) LEN_SQUARED_3FV(V);  \   if (len) {                   \      len = INV_SQRTF(len);         \      (V)[0] = (GLfloat) ((V)[0] * len);    \      (V)[1] = (GLfloat) ((V)[1] * len);    \      (V)[2] = (GLfloat) ((V)[2] * len);    \   }                        \} while(0)#define LEN_3FV( V ) (SQRTF((V)[0]*(V)[0]+(V)[1]*(V)[1]+(V)[2]*(V)[2]))#define LEN_2FV( V ) (SQRTF((V)[0]*(V)[0]+(V)[1]*(V)[1]))#define LEN_SQUARED_3FV( V ) ((V)[0]*(V)[0]+(V)[1]*(V)[1]+(V)[2]*(V)[2])#define LEN_SQUARED_2FV( V ) ((V)[0]*(V)[0]+(V)[1]*(V)[1])#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -