doxygen: add newline after \file
[blender.git] / source / blender / editors / include / BIF_glutil.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup editorui
22  */
23
24 #ifndef __BIF_GLUTIL_H__
25 #define __BIF_GLUTIL_H__
26
27 struct rctf;
28 struct rcti;
29
30 struct ColorManagedDisplaySettings;
31 struct ColorManagedViewSettings;
32 struct ImBuf;
33 struct bContext;
34
35 /* A few functions defined here are being DEPRECATED for Blender 2.8
36  *
37  * Do not use them in new code, and you are encouraged to
38  * convert existing code to draw without these.
39  *
40  * These will be deleted before we ship 2.8!
41  * - merwin
42  */
43
44 /**
45  * Returns a float value as obtained by glGetFloatv.
46  * The param must cause only one value to be gotten from GL.
47  */
48 float glaGetOneFloat(int param);
49 int glaGetOneInt(int param);
50
51 /**
52  * Functions like glRasterPos2i, except ensures that the resulting
53  * raster position is valid. \a known_good_x and \a known_good_y
54  * should be coordinates of a point known to be within the current
55  * view frustum.
56  * \attention This routine should be used when the distance of \a x
57  * and \a y away from the known good point is small (ie. for small icons
58  * and for bitmap characters), when drawing large+zoomed images it is
59  * possible for overflow to occur, the glaDrawPixelsSafe routine should
60  * be used instead.
61  */
62 void glaRasterPosSafe2f(float x, float y, float known_good_x, float known_good_y);
63
64 typedef struct IMMDrawPixelsTexState {
65         struct GPUShader *shader;
66         unsigned int pos;
67         unsigned int texco;
68         bool do_shader_unbind;
69 } IMMDrawPixelsTexState;
70
71 /* To be used before calling immDrawPixelsTex
72  * Default shader is GPU_SHADER_2D_IMAGE_COLOR
73  * Returns a shader to be able to set uniforms */
74 IMMDrawPixelsTexState immDrawPixelsTexSetup(int builtin);
75
76 /**
77  * immDrawPixelsTex - Functions like a limited glDrawPixels, but actually draws the
78  * image using textures, which can be tremendously faster on low-end
79  * cards, and also avoids problems with the raster position being
80  * clipped when offscreen. Pixel unpacking parameters and
81  * the glPixelZoom values are _not_ respected.
82  *
83  * \attention Use immDrawPixelsTexSetup before calling this function.
84  *
85  * \attention This routine makes many assumptions: the rect data
86  * is expected to be in RGBA byte or float format, and the
87  * modelview and projection matrices are assumed to define a
88  * 1-to-1 mapping to screen space.
89  */
90 void immDrawPixelsTex(IMMDrawPixelsTexState *state,
91                       float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect,
92                       float xzoom, float yzoom, float color[4]);
93 void immDrawPixelsTex_clipping(IMMDrawPixelsTexState *state,
94                                float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect,
95                                float clip_min_x, float clip_min_y, float clip_max_x, float clip_max_y,
96                                float xzoom, float yzoom, float color[4]);
97 void immDrawPixelsTexScaled(IMMDrawPixelsTexState *state,
98                             float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect, float scaleX, float scaleY,
99                             float xzoom, float yzoom, float color[4]);
100 void immDrawPixelsTexScaled_clipping(IMMDrawPixelsTexState *state,
101                                      float x, float y, int img_w, int img_h, int format, int type, int zoomfilter, void *rect, float scaleX, float scaleY,
102                                      float clip_min_x, float clip_min_y, float clip_max_x, float clip_max_y,
103                                      float xzoom, float yzoom, float color[4]);
104
105 void set_inverted_drawing(int enable);
106 void setlinestyle(int nr);
107
108 /* own working polygon offset */
109 float bglPolygonOffsetCalc(const float winmat[16], float viewdist, float dist);
110 void bglPolygonOffset(float viewdist, float dist);
111
112 /* **** Color management helper functions for GLSL display/transform ***** */
113
114 /* Draw imbuf on a screen, preferably using GLSL display transform */
115 void glaDrawImBuf_glsl(struct ImBuf *ibuf, float x, float y, int zoomfilter,
116                        struct ColorManagedViewSettings *view_settings,
117                        struct ColorManagedDisplaySettings *display_settings,
118                        float zoom_x, float zoom_y);
119 void glaDrawImBuf_glsl_clipping(struct ImBuf *ibuf, float x, float y, int zoomfilter,
120                                 struct ColorManagedViewSettings *view_settings,
121                                 struct ColorManagedDisplaySettings *display_settings,
122                                 float clip_min_x, float clip_min_y,
123                                 float clip_max_x, float clip_max_y,
124                                 float zoom_x, float zoom_y);
125
126
127 /* Draw imbuf on a screen, preferably using GLSL display transform */
128 void glaDrawImBuf_glsl_ctx(const struct bContext *C, struct ImBuf *ibuf, float x, float y, int zoomfilter,
129                            float zoom_x, float zoom_y);
130 void glaDrawImBuf_glsl_ctx_clipping(const struct bContext *C,
131                                     struct ImBuf *ibuf,
132                                     float x, float y,
133                                     int zoomfilter,
134                                     float clip_min_x, float clip_min_y,
135                                     float clip_max_x, float clip_max_y,
136                                     float zoom_x, float zoom_y);
137
138 void immDrawBorderCorners(unsigned int pos, const struct rcti *border, float zoomx, float zoomy);
139
140 #endif /* __BIF_GLUTIL_H__ */