Graph editor: Add channel option to make it persistent on display
[blender.git] / source / blender / editors / include / BIF_gl.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  * os dependent include locations of gl.h
27  */
28
29 /** \file BIF_gl.h
30  *  \ingroup editorui
31  */
32
33 #ifndef __BIF_GL_H__
34 #define __BIF_GL_H__
35
36 #include "GPU_glew.h"
37 #include "BLI_utildefines.h"
38
39 /*
40  * these should be phased out. cpack should be replaced in
41  * code with calls to glColor3ub. - zr
42  */
43 /* 
44  *
45  * This define converts a numerical value to the equivalent 24-bit
46  * color, while not being endian-sensitive. On little-endians, this
47  * is the same as doing a 'naive' indexing, on big-endian, it is not!
48  * */
49 void cpack(unsigned int x);
50
51 #ifdef WITH_GL_PROFILE_COMPAT
52 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
53 #  define glMultMatrixf(x)  \
54         glMultMatrixf(_Generic((x), \
55                 float *:      (float *)(x), \
56                 float [16]:   (float *)(x), \
57                 float (*)[4]: (float *)(x), \
58                 float [4][4]: (float *)(x), \
59                 const float *:      (float *)(x), \
60                 const float [16]:   (float *)(x), \
61                 const float (*)[4]: (float *)(x), \
62                 const float [4][4]: (float *)(x)) \
63 )
64 #  define glLoadMatrixf(x)  \
65         glLoadMatrixf(_Generic((x), \
66                 float *:      (float *)(x), \
67                 float [16]:   (float *)(x), \
68                 float (*)[4]: (float *)(x), \
69                 float [4][4]: (float *)(x)) \
70 )
71 #else
72 #  define glMultMatrixf(x)  glMultMatrixf((float *)(x))
73 #  define glLoadMatrixf(x)  glLoadMatrixf((float *)(x))
74 #endif  /* C11 */
75 #endif  /* WITH_GL_PROFILE_COMPAT */
76
77
78 /* hacking pointsize and linewidth */
79 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
80 #  define glPointSize(f)  glPointSize(U.pixelsize * _Generic((f), double: (float)(f), default: (f)))
81 #  define glLineWidth(f)  glLineWidth(U.pixelsize * _Generic((f), double: (float)(f), default: (f)))
82 #else
83 #  define glPointSize(f)  glPointSize(U.pixelsize * (f))
84 #  define glLineWidth(f)  glLineWidth(U.pixelsize * (f))
85 #endif  /* C11 */
86
87 #define GLA_PIXEL_OFS 0.375f
88
89
90 BLI_INLINE void glTranslate3iv(const int vec[3])    { glTranslatef(UNPACK3_EX((const float), vec, ));       }
91 BLI_INLINE void glTranslate2iv(const int vec[2])    { glTranslatef(UNPACK2_EX((const float), vec, ), 0.0f); }
92 BLI_INLINE void glTranslate3fv(const float vec[3])  { glTranslatef(UNPACK3(vec));       }
93 BLI_INLINE void glTranslate2fv(const float vec[2])  { glTranslatef(UNPACK2(vec), 0.0f); }
94
95 BLI_INLINE void glScale3iv(const int vec[3])    { glTranslatef(UNPACK3_EX((const float), vec, ));       }
96 BLI_INLINE void glScale2iv(const int vec[2])    { glTranslatef(UNPACK2_EX((const float), vec, ), 0.0f); }
97 BLI_INLINE void glScale3fv(const float vec[3])  { glScalef(UNPACK3(vec));      }
98 BLI_INLINE void glScale2fv(const float vec[2])  { glScalef(UNPACK2(vec), 0.0); }
99
100 /* v2 versions don't make much sense for rotation */
101 BLI_INLINE void glRotate3fv(const float angle, const float vec[3])   { glRotatef(angle, UNPACK3(vec)); }
102
103 #endif /* #ifdef __BIF_GL_H__ */
104