Cleanup: remove redundant, invalid info from headers
[blender.git] / source / blender / gpu / GPU_immediate.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) 2016 Blender Foundation.
17  * All rights reserved.
18  */
19
20 /** \file blender/gpu/GPU_immediate.h
21  *  \ingroup gpu
22  *
23  * GPU immediate mode work-alike
24  */
25
26 #ifndef __GPU_IMMEDIATE_H__
27 #define __GPU_IMMEDIATE_H__
28
29 #include "GPU_vertex_format.h"
30 #include "GPU_primitive.h"
31 #include "GPU_shader_interface.h"
32 #include "GPU_batch.h"
33 #include "GPU_immediate_util.h"
34 #include "GPU_shader.h"
35
36 /** Returns a cleared vertex format, ready for #add_attr. */
37 GPUVertFormat *immVertexFormat(void);
38
39 /** Every immBegin must have a program bound first. */
40 void immBindProgram(uint32_t program, const GPUShaderInterface *);
41 /** Call after your last immEnd, or before binding another program. */
42 void immUnbindProgram(void);
43
44 /** Must supply exactly vertex_len vertices. */
45 void immBegin(GPUPrimType, uint vertex_len);
46 /** Can supply fewer vertices. */
47 void immBeginAtMost(GPUPrimType, uint max_vertex_len);
48 void immEnd(void); /* finishes and draws. */
49
50 /* ImmBegin a batch, then use standard immFunctions as usual. */
51 /* ImmEnd will finalize the batch instead of drawing. */
52 /* Then you can draw it as many times as you like! Partially replaces the need for display lists. */
53 GPUBatch *immBeginBatch(GPUPrimType, uint vertex_len);
54 GPUBatch *immBeginBatchAtMost(GPUPrimType, uint vertex_len);
55
56 /* Provide attribute values that can change per vertex. */
57 /* First vertex after immBegin must have all its attributes specified. */
58 /* Skipped attributes will continue using the previous value for that attr_id. */
59 void immAttr1f(uint attr_id, float x);
60 void immAttr2f(uint attr_id, float x, float y);
61 void immAttr3f(uint attr_id, float x, float y, float z);
62 void immAttr4f(uint attr_id, float x, float y, float z, float w);
63
64 void immAttr2i(uint attr_id, int x, int y);
65
66 void immAttr1u(uint attr_id, uint x);
67
68 void immAttr2s(uint attr_id, short x, short y);
69
70 void immAttr2fv(uint attr_id, const float data[2]);
71 void immAttr3fv(uint attr_id, const float data[3]);
72 void immAttr4fv(uint attr_id, const float data[4]);
73
74 void immAttr3ub(uint attr_id, unsigned char r, unsigned char g, unsigned char b);
75 void immAttr4ub(uint attr_id, unsigned char r, unsigned char g, unsigned char b, unsigned char a);
76
77 void immAttr3ubv(uint attr_id, const unsigned char data[3]);
78 void immAttr4ubv(uint attr_id, const unsigned char data[4]);
79
80 /* Explicitly skip an attribute. */
81 /* This advanced option kills automatic value copying for this attr_id. */
82 void immAttrSkip(uint attr_id);
83
84 /* Provide one last attribute value & end the current vertex. */
85 /* This is most often used for 2D or 3D position (similar to glVertex). */
86 void immVertex2f(uint attr_id, float x, float y);
87 void immVertex3f(uint attr_id, float x, float y, float z);
88 void immVertex4f(uint attr_id, float x, float y, float z, float w);
89
90 void immVertex2i(uint attr_id, int x, int y);
91
92 void immVertex2s(uint attr_id, short x, short y);
93
94 void immVertex2fv(uint attr_id, const float data[2]);
95 void immVertex3fv(uint attr_id, const float data[3]);
96
97 void immVertex2iv(uint attr_id, const int data[2]);
98
99 /* Provide uniform values that don't change for the entire draw call. */
100 void immUniform1i(const char *name, int x);
101 void immUniform4iv(const char *name, const int data[4]);
102 void immUniform1f(const char *name, float x);
103 void immUniform2f(const char *name, float x, float y);
104 void immUniform2fv(const char *name, const float data[2]);
105 void immUniform3f(const char *name, float x, float y, float z);
106 void immUniform3fv(const char *name, const float data[3]);
107 void immUniformArray3fv(const char *name, const float *data, int count);
108 void immUniform4f(const char *name, float x, float y, float z, float w);
109 void immUniform4fv(const char *name, const float data[4]);
110 void immUniformArray4fv(const char *bare_name, const float *data, int count);
111 void immUniformMatrix4fv(const char *name, const float data[4][4]);
112
113 /* Convenience functions for setting "uniform vec4 color". */
114 /* The rgb functions have implicit alpha = 1.0. */
115 void immUniformColor4f(float r, float g, float b, float a);
116 void immUniformColor4fv(const float rgba[4]);
117 void immUniformColor3f(float r, float g, float b);
118 void immUniformColor3fv(const float rgb[3]);
119 void immUniformColor3fvAlpha(const float rgb[3], float a);
120
121 void immUniformColor3ub(unsigned char r, unsigned char g, unsigned char b);
122 void immUniformColor4ub(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
123 void immUniformColor3ubv(const unsigned char rgb[3]);
124 void immUniformColor3ubvAlpha(const unsigned char rgb[3], unsigned char a);
125 void immUniformColor4ubv(const unsigned char rgba[4]);
126
127 /* Extend immBindProgram to use Blender’s library of built-in shader programs.
128  * Use immUnbindProgram() when done. */
129 void immBindBuiltinProgram(eGPUBuiltinShader shader_id);
130
131 /* Extend immUniformColor to take Blender's themes */
132 void immUniformThemeColor(int color_id);
133 void immUniformThemeColor3(int color_id);
134 void immUniformThemeColorShade(int color_id, int offset);
135 void immUniformThemeColorShadeAlpha(int color_id, int color_offset, int alpha_offset);
136 void immUniformThemeColorBlendShade(int color_id1, int color_id2, float fac, int offset);
137 void immUniformThemeColorBlend(int color_id1, int color_id2, float fac);
138 void immThemeColorShadeAlpha(int colorid, int coloffset, int alphaoffset);
139
140 /* These are called by the system -- not part of drawing API. */
141 void immInit(void);
142 void immActivate(void);
143 void immDeactivate(void);
144 void immDestroy(void);
145
146 #endif  /* __GPU_IMMEDIATE_H__ */