-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathglui_internal.h
executable file
·105 lines (80 loc) · 2.74 KB
/
glui_internal.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#ifndef GLUI_INTERNAL_H
#define GLUI_INTERNAL_H
#include <cstdio>
#include <cmath>
#ifndef AND
#define AND &&
#define OR ||
#define NOT !
#endif
#ifndef MAX
#define MAX(a,b) ((a)>(b) ? (a) : (b))
#define MIN(a,b) ((a)<(b) ? (a) : (b))
#endif
#ifndef ABS
#define ABS(a) ((a)>=0 ? (a) : (-(a)))
#endif
/******************** bit comparisons and operations ***************/
#ifndef TEST_BIT
#define TEST_BIT( x, b ) (((x) & (1<<(b))) != 0 )
#define SET_BIT( x, b ) ((x) |= (1 << (b)))
#define CLEAR_BIT( x, b ) ((x) &= ~(1 << (b)))
#define TOGGLE_BIT( x, b ) ((TEST_BIT(x,b)) ?(CLEAR_BIT(x,b)):(SET_BIT(x,b)))
#endif
#ifndef TEST_AND
#define TEST_AND( a, b ) ((a&b)==b)
#endif
#ifndef M_PI
#define M_PI 3.141592654
#endif
/*********** flush the stdout and stderr output streams *************/
#ifndef flushout
#define flushout fflush(stdout)
#define flusherr fflush(stderr)
#endif
/********** Debugging functions *************************************/
#ifndef error_return
#define error_return( c ); {fprintf(stderr,c);return;}
#endif
/************************* floating-point random ********************/
#ifndef randf
#define randf() ((float) rand() / (float)RAND_MAX )
#endif
#ifndef SIGN
#define SIGN(x) ((x)>=0 ? 1 : -1)
#endif
/****************** conversion between degrees and radians **********/
#ifndef DEG2RAD
#define DEG2RAD(x) ((x)/180.0*M_PI)
#define RAD2DEG(x) ((x)/M_PI*180.0)
#endif
/***************** clamp a value to some fixed interval *************/
#ifndef CLAMP
#define CLAMP(x,lo,hi) {if ((x) < (lo)) {(x)=(lo);} else if((x) > (hi)) {(x)=(hi);}}
#endif
/************ check if a value lies within a closed interval *********/
#ifndef IN_BOUNDS
#define IN_BOUNDS( x, lo, hi ) ( (x) >= (lo) AND (x) <= (hi) )
#endif
/************ check if a 2D point lies within a 2D box ***************/
#ifndef PT_IN_BOX
#define PT_IN_BOX( x, y, lo_x, hi_x, lo_y, hi_y ) \
( IN_BOUNDS(x,lo_x,hi_x) AND IN_BOUNDS(y,lo_y,hi_y) )
#endif
/****** check if value lies on proper side of another value *****/
/*** if side is positive => proper side is positive, else negative **/
#ifndef CHECK_PROPER_SIDE
#define CHECK_PROPER_SIDE(x,val,side) ((side) > 0 ? (x) > (val) : (x) < (val))
#endif
/***** Small value when we want to do a comparison to 'close to zero' *****/
#ifndef FUDGE
#define FUDGE .00001
#endif
/******************* swap two values, using a temp variable *********/
#ifndef SWAP2
#define SWAP2(a,b,t) {t=a;a=b;b=t;}
#endif
#define VEC3_TO_ARRAY(v,a) a[0]=v[0], a[1]=v[1], a[2]=v[2]
/**** Return the ASCII control code given the non-control ASCII character */
#define CTRL(c) ( (c>=('a'-1)) ? (c-'a'+1) : (c-'A'+1) )
#endif /* GLUI_INTERNAL_H */