Glide Plugin GLES2 port from mupen64plus-ae, but with special FrameSkip code
[mupen64plus-pandora.git] / source / gles2glide64 / src / Glitch64 / glState.cpp
CommitLineData
98e75f2d 1void vbo_draw();
2
3static GLenum cached_ActiveTexture_texture;
4void inline cache_glActiveTexture (GLenum texture)
5{
6 if(texture != cached_ActiveTexture_texture)
7 {
8 vbo_draw();
9 glActiveTexture(texture);
10 cached_ActiveTexture_texture = texture;
11 }
12}
13#define glActiveTexture(texture) cache_glActiveTexture(texture)
14
15void inline cache_glBindTexture (GLenum target, GLuint texture)
16{
17 vbo_draw();
18 glBindTexture(target, texture);
19}
20#define glBindTexture(target, texture) cache_glBindTexture(target, texture)
21
22static GLenum cached_BlendEquation_mode;
23void inline cache_glBlendEquation ( GLenum mode )
24{
25 if(mode != cached_BlendEquation_mode)
26 {
27 vbo_draw();
28 glBlendEquation(mode);
29 cached_BlendEquation_mode = mode;
30 }
31}
32#define glBlendEquation(mode) cache_glBlendEquation(mode)
33
34static GLenum cached_BlendEquationSeparate_modeRGB;
35static GLenum cached_BlendEquationSeparate_modeAlpha;
36void inline cache_glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha)
37{
38 if(modeRGB != cached_BlendEquationSeparate_modeRGB || modeAlpha != cached_BlendEquationSeparate_modeAlpha)
39 {
40 vbo_draw();
41 glBlendEquationSeparate(modeRGB, modeAlpha);
42 cached_BlendEquationSeparate_modeRGB = modeRGB;
43 cached_BlendEquationSeparate_modeAlpha = modeAlpha;
44 }
45}
46#define glBlendEquationSeparate(modeRGB, modeAlpha) cache_glBlendEquationSeparate(modeRGB, modeAlpha)
47
48static GLenum cached_BlendFunc_sfactor;
49static GLenum cached_BlendFunc_dfactor;
50void inline cache_glBlendFunc (GLenum sfactor, GLenum dfactor)
51{
52 if(sfactor != cached_BlendFunc_sfactor || dfactor != cached_BlendFunc_dfactor)
53 {
54 vbo_draw();
55 glBlendFunc(sfactor, dfactor);
56 cached_BlendFunc_sfactor = sfactor;
57 cached_BlendFunc_dfactor = dfactor;
58 }
59}
60#define glBlendFunc(sfactor, dfactor) cache_glBlendFunc(sfactor, dfactor)
61
62static GLenum cached_BlendFuncSeparate_srcRGB;
63static GLenum cached_BlendFuncSeparate_dstRGB;
64static GLenum cached_BlendFuncSeparate_srcAlpha;
65static GLenum cached_BlendFuncSeparate_dstAlpha;
66void inline cache_glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
67{
68 if(srcRGB != cached_BlendFuncSeparate_srcRGB || dstRGB != cached_BlendFuncSeparate_dstRGB || srcAlpha != cached_BlendFuncSeparate_srcAlpha || dstAlpha != cached_BlendFuncSeparate_dstAlpha)
69 {
70 vbo_draw();
71 glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
72 cached_BlendFuncSeparate_srcRGB = srcRGB;
73 cached_BlendFuncSeparate_dstRGB = dstRGB;
74 cached_BlendFuncSeparate_srcAlpha = srcAlpha;
75 cached_BlendFuncSeparate_dstAlpha = dstAlpha;
76 }
77}
78#define glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha) cache_glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha)
79
80static GLclampf cached_ClearColor_red;
81static GLclampf cached_ClearColor_green;
82static GLclampf cached_ClearColor_blue;
83static GLclampf cached_ClearColor_alpha;
84void inline cache_glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
85{
86 if(red != cached_ClearColor_red || green != cached_ClearColor_green || blue != cached_ClearColor_blue || alpha != cached_ClearColor_alpha)
87 {
88 vbo_draw();
89 glClearColor(red, green, blue, alpha);
90 cached_ClearColor_red = red;
91 cached_ClearColor_green = green;
92 cached_ClearColor_blue = blue;
93 cached_ClearColor_alpha = alpha;
94 }
95}
96#define glClearColor(red, green, blue, alpha) cache_glClearColor(red, green, blue, alpha)
97
98static GLclampf cached_ClearDepthf_depth;
99void inline cache_glClearDepthf (GLclampf depth)
100{
101 if(depth != cached_ClearDepthf_depth)
102 {
103 vbo_draw();
104 glClearDepthf(depth);
105 cached_ClearDepthf_depth = depth;
106 }
107}
108#define glClearDepthf(depth) cache_glClearDepthf(depth)
109
110static GLenum cached_CullFace_mode;
111void inline cache_glCullFace (GLenum mode)
112{
113 if(mode != cached_CullFace_mode)
114 {
115 vbo_draw();
116 glCullFace(mode);
117 cached_CullFace_mode = mode;
118 }
119}
120#define glCullFace(mode) cache_glCullFace(mode)
121
122static GLenum cached_DepthFunc_func;
123void inline cache_glDepthFunc (GLenum func)
124{
125 if(func != cached_DepthFunc_func)
126 {
127 vbo_draw();
128 glDepthFunc(func);
129 cached_DepthFunc_func = func;
130 }
131}
132#define glDepthFunc(func) cache_glDepthFunc(func)
133
134static GLboolean cached_DepthMask_flag;
135void inline cache_glDepthMask (GLboolean flag)
136{
137 if(flag != cached_DepthMask_flag)
138 {
139 vbo_draw();
140 glDepthMask(flag);
141 cached_DepthMask_flag = flag;
142 }
143}
144#define glDepthMask(flag) cache_glDepthMask(flag)
145
146static GLclampf cached_DepthRangef_zNear;
147static GLclampf cached_DepthRangef_zFar;
148void inline cache_glDepthRangef (GLclampf zNear, GLclampf zFar)
149{
150 if(zNear != cached_DepthRangef_zNear || zFar != cached_DepthRangef_zFar)
151 {
152 vbo_draw();
153 glDepthRangef(zNear, zFar);
154 cached_DepthRangef_zNear = zNear;
155 cached_DepthRangef_zFar = zFar;
156 }
157}
158#define glDepthRangef(zNear, zFar) cache_glDepthRangef(zNear, zFar)
159
160static bool cached_BLEND = false;
161static bool cached_CULL_FACE = false;
162static bool cached_DEPTH_TEST = false;
163static bool cached_DITHER = false;
164static bool cached_POLYGON_OFFSET_FILL = false;
165static bool cached_SAMPLE_ALPHA_TO_COVERAGE = false;
166static bool cached_SAMPLE_COVERAGE = false;
167static bool cached_SCISSOR_TEST = false;
168static bool cached_STENCIL_TEST = false;
169void inline cache_glDisable (GLenum cap)
170{
171 if(cap == GL_BLEND && cached_BLEND)
172 {
173 vbo_draw();
174 glDisable(GL_BLEND);
175 cached_BLEND = false;
176 }
177 else if(cap == GL_CULL_FACE && cached_CULL_FACE)
178 {
179 vbo_draw();
180 glDisable(GL_CULL_FACE);
181 cached_CULL_FACE = false;
182 }
183 else if(cap == GL_DEPTH_TEST && cached_DEPTH_TEST)
184 {
185 vbo_draw();
186 glDisable(GL_DEPTH_TEST);
187 cached_DEPTH_TEST = false;
188 }
189 else if(cap == GL_DITHER && cached_DITHER)
190 {
191 vbo_draw();
192 glDisable(GL_DITHER);
193 cached_DITHER = false;
194 }
195 else if(cap == GL_POLYGON_OFFSET_FILL && cached_POLYGON_OFFSET_FILL)
196 {
197 vbo_draw();
198 glDisable(GL_POLYGON_OFFSET_FILL);
199 cached_POLYGON_OFFSET_FILL = false;
200 }
201 else if(cap == GL_SAMPLE_ALPHA_TO_COVERAGE && cached_SAMPLE_ALPHA_TO_COVERAGE)
202 {
203 vbo_draw();
204 glDisable(GL_SAMPLE_ALPHA_TO_COVERAGE);
205 cached_SAMPLE_ALPHA_TO_COVERAGE = false;
206 }
207 else if(cap == GL_SAMPLE_COVERAGE && cached_SAMPLE_COVERAGE)
208 {
209 vbo_draw();
210 glDisable(GL_SAMPLE_COVERAGE);
211 cached_SAMPLE_COVERAGE = false;
212 }
213 else if(cap == GL_SCISSOR_TEST && cached_SCISSOR_TEST)
214 {
215 vbo_draw();
216 glDisable(GL_SCISSOR_TEST);
217 cached_SCISSOR_TEST = false;
218 }
219 else if(cap == GL_STENCIL_TEST && cached_STENCIL_TEST)
220 {
221 vbo_draw();
222 glDisable(GL_STENCIL_TEST);
223 cached_STENCIL_TEST = false;
224 }
225}
226#define glDisable(cap) cache_glDisable(cap)
227
228void inline cache_glEnable (GLenum cap)
229{
230 if(cap == GL_BLEND && !cached_BLEND)
231 {
232 vbo_draw();
233 glEnable(GL_BLEND);
234 cached_BLEND = true;
235 }
236 else if(cap == GL_CULL_FACE && !cached_CULL_FACE)
237 {
238 vbo_draw();
239 glEnable(GL_CULL_FACE);
240 cached_CULL_FACE = true;
241 }
242 else if(cap == GL_DEPTH_TEST && !cached_DEPTH_TEST)
243 {
244 vbo_draw();
245 glEnable(GL_DEPTH_TEST);
246 cached_DEPTH_TEST = true;
247 }
248 else if(cap == GL_DITHER && !cached_DITHER)
249 {
250 vbo_draw();
251 glEnable(GL_DITHER);
252 cached_DITHER = true;
253 }
254 else if(cap == GL_POLYGON_OFFSET_FILL && !cached_POLYGON_OFFSET_FILL)
255 {
256 vbo_draw();
257 glEnable(GL_POLYGON_OFFSET_FILL);
258 cached_POLYGON_OFFSET_FILL = true;
259 }
260 else if(cap == GL_SAMPLE_ALPHA_TO_COVERAGE && !cached_SAMPLE_ALPHA_TO_COVERAGE)
261 {
262 vbo_draw();
263 glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE);
264 cached_SAMPLE_ALPHA_TO_COVERAGE = true;
265 }
266 else if(cap == GL_SAMPLE_COVERAGE && !cached_SAMPLE_COVERAGE)
267 {
268 vbo_draw();
269 glEnable(GL_SAMPLE_COVERAGE);
270 cached_SAMPLE_COVERAGE = true;
271 }
272 else if(cap == GL_SCISSOR_TEST && !cached_SCISSOR_TEST)
273 {
274 vbo_draw();
275 glEnable(GL_SCISSOR_TEST);
276 cached_SCISSOR_TEST = true;
277 }
278 else if(cap == GL_STENCIL_TEST && !cached_STENCIL_TEST)
279 {
280 vbo_draw();
281 glEnable(GL_STENCIL_TEST);
282 cached_STENCIL_TEST = true;
283 }
284}
285#define glEnable(cap) cache_glEnable(cap)
286
287static GLenum cached_FrontFace_mode;
288void inline cache_glFrontFace (GLenum mode)
289{
290 if(mode != cached_FrontFace_mode)
291 {
292 vbo_draw();
293 glFrontFace(mode);
294 cached_FrontFace_mode = mode;
295 }
296}
297#define glFrontFace(mode) cache_glFrontFace(mode)
298
299static GLfloat cached_PolygonOffset_factor;
300static GLfloat cached_PolygonOffset_units;
301void inline cache_glPolygonOffset (GLfloat factor, GLfloat units)
302{
303 if(factor != cached_PolygonOffset_factor || units != cached_PolygonOffset_units)
304 {
305 vbo_draw();
306 glPolygonOffset(factor, units);
307 cached_PolygonOffset_factor = factor;
308 cached_PolygonOffset_units = units;
309 }
310}
311#define glPolygonOffset(factor, units) cache_glPolygonOffset(factor, units)
312
313static GLint cached_Scissor_x;
314static GLint cached_Scissor_y;
315static GLsizei cached_Scissor_width;
316static GLsizei cached_Scissor_height;
317void inline cache_glScissor (GLint x, GLint y, GLsizei width, GLsizei height)
318{
319 if(x != cached_Scissor_x || y != cached_Scissor_y || width != cached_Scissor_width || height != cached_Scissor_height)
320 {
321 vbo_draw();
322 glScissor(x, y, width, height);
323 cached_Scissor_x = x;
324 cached_Scissor_y = y;
325 cached_Scissor_width = width;
326 cached_Scissor_height = height;
327 }
328}
329#define glScissor(x, y, width, height) cache_glScissor(x, y, width, height)
330
331static GLuint cached_UseProgram_program;
332void inline cache_glUseProgram (GLuint program)
333{
334 if(program != cached_UseProgram_program)
335 {
336 vbo_draw();
337 glUseProgram(program);
338 cached_UseProgram_program = program;
339 }
340}
341#define glUseProgram(program) cache_glUseProgram(program)
342
343static GLint cached_Viewport_x;
344static GLint cached_Viewport_y;
345static GLsizei cached_Viewport_width;
346static GLsizei cached_Viewport_height;
347void inline cache_glViewport (GLint x, GLint y, GLsizei width, GLsizei height)
348{
349 if(x != cached_Viewport_x || y != cached_Viewport_y || width != cached_Viewport_width || height != cached_Viewport_height)
350 {
351 vbo_draw();
352 glViewport(x, y, width, height);
353 cached_Viewport_x = x;
354 cached_Viewport_y = y;
355 cached_Viewport_width = width;
356 cached_Viewport_height = height;
357 }
358}
359#define glViewport(x, y, width, height) cache_glViewport(x, y, width, height)
360