Glide Plugin GLES2 port from mupen64plus-ae, but with special FrameSkip code
[mupen64plus-pandora.git] / source / gles2glide64 / src / Glitch64 / main.h
CommitLineData
98e75f2d 1/*
2* Glide64 - Glide video plugin for Nintendo 64 emulators.
3* Copyright (c) 2002 Dave2001
4* Copyright (c) 2003-2009 Sergey 'Gonetz' Lipski
5*
6* This program is free software; you can redistribute it and/or modify
7* it under the terms of the GNU General Public License as published by
8* the Free Software Foundation; either version 2 of the License, or
9* any later version.
10*
11* This program is distributed in the hope that it will be useful,
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14* GNU General Public License for more details.
15*
16* You should have received a copy of the GNU General Public License
17* along with this program; if not, write to the Free Software
18* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19*/
20
21#ifndef MAIN_H
22#define MAIN_H
23
24#include <m64p_types.h>
25
26#define LOG(...) // WriteLog(M64MSG_VERBOSE, __VA_ARGS__)
27#define LOGINFO(...) WriteLog(M64MSG_INFO, __VA_ARGS__)
28void WriteLog(m64p_msg_level level, const char *msg, ...);
29
30
31#ifndef _WIN32
32//#define VPDEBUG
33#endif
34#ifdef VPDEBUG
35void dump_tex(int id);
36void dump_start();
37void dump_stop();
38extern int dumping;
39#endif
40
41#define zscale 1.0f
42
43typedef struct _wrapper_config
44{
45 int res;
46 int fbo;
47 int anisofilter;
48 int vram_size;
49} wrapper_config;
50extern wrapper_config config;
51
52
53// VP added this utility function
54// returns the bytes per pixel of a given GR texture format
55int grTexFormatSize(int fmt);
56
57extern int packed_pixels_support;
58extern int ati_sucks;
59extern float largest_supported_anisotropy;
60
61extern int default_texture; // the infamous "32*1024*1024" is now configurable
62extern int depth_texture;
63void set_depth_shader();
64void set_bw_shader();
65extern float invtex[2];
66extern int buffer_cleared; // mark that the buffer has been cleared, used to check if we need to reload the texture buffer content
67
68#ifdef _WIN32
69#include <windows.h>
70extern "C" {
71 #include <SDL_opengl.h>
72 extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
73 extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
74 extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
75 extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
76 extern PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;
77 extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
78 extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
79 extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
80 extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
81 extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT;
82 extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
83 extern PFNGLFOGCOORDFEXTPROC glFogCoordfEXT;
84 extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT;
85 extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
86 extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
87 extern PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT;
88 extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
89 extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
90 extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
91 extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
92 extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
93 extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT;
94 extern PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;
95 extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
96 extern PFNGLUNIFORM1FARBPROC glUniform1fARB;
97 extern PFNGLUNIFORM1IARBPROC glUniform1iARB;
98 extern PFNGLUNIFORM4FARBPROC glUniform4fARB;
99 extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
100 typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
101}
102#else
103#include <stdio.h>
104//#define printf(...)
105#define GL_GLEXT_PROTOTYPES
106#include <SDL_opengles2.h>
107#endif // _WIN32
108#include "glide.h"
109#include "glState.cpp"
110
111void display_warning(const unsigned char *text, ...);
112void display_warning(const char *text, ...);
113void init_geometry();
114void init_textures();
115void init_combiner();
116void free_textures();
117void updateCombiner(int i);
118void updateCombinera(int i);
119void remove_tex(unsigned int idmin, unsigned int idmax);
120void add_tex(unsigned int id);
121
122#ifdef _WIN32
123extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
124extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
125extern PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;
126extern PFNGLFOGCOORDFPROC glFogCoordfEXT;
127
128extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
129extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
130extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
131extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
132extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
133extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
134extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
135extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
136extern PFNGLUNIFORM1IARBPROC glUniform1iARB;
137extern PFNGLUNIFORM4IARBPROC glUniform4iARB;
138extern PFNGLUNIFORM4FARBPROC glUniform4fARB;
139extern PFNGLUNIFORM1FARBPROC glUniform1fARB;
140extern PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
141extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
142extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
143extern PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;
144#endif
145void check_compile(GLuint shader);
146void check_link(GLuint program);
147void vbo_enable();
148void vbo_disable();
149
150//Vertex Attribute Locations
151#define POSITION_ATTR 0
152#define COLOUR_ATTR 1
153#define TEXCOORD_0_ATTR 2
154#define TEXCOORD_1_ATTR 3
155#define FOG_ATTR 4
156
157extern int w_buffer_mode;
158extern int nbTextureUnits;
159extern int width, height, widtho, heighto;
160extern int tex0_width, tex0_height, tex1_width, tex1_height;
161extern float texture_env_color[4];
162extern int fog_enabled;
163extern float lambda;
164extern int need_lambda[2];
165extern float lambda_color[2][4];
166extern int inverted_culling;
167extern int culling_mode;
168extern int render_to_texture;
169extern int lfb_color_fmt;
170extern int need_to_compile;
171extern int blackandwhite0;
172extern int blackandwhite1;
173extern int TMU_SIZE;
174
175extern int blend_func_separate_support;
176extern int fog_coord_support;
177//extern int pbuffer_support;
178extern int glsl_support;
179extern unsigned int pBufferAddress;
180extern int viewport_width, viewport_height, viewport_offset, nvidia_viewport_hack;
181extern int UMAmode;
182
183void grChromaRangeExt(GrColor_t color0, GrColor_t color1, FxU32 mode);
184void grChromaRangeModeExt(GrChromakeyMode_t mode);
185void grTexChromaRangeExt(GrChipID_t tmu, GrColor_t color0, GrColor_t color1, GrTexChromakeyMode_t mode);
186void grTexChromaModeExt(GrChipID_t tmu, GrChromakeyMode_t mode);
187void updateTexture();
188void reloadTexture();
189void free_combiners();
190void compile_shader();
191void set_lambda();
192void set_copy_shader();
193void disable_textureSizes();
194
195// config functions
196
197//FX_ENTRY void FX_CALL grConfigWrapperExt(HINSTANCE instance, HWND hwnd);
198FX_ENTRY void FX_CALL grConfigWrapperExt(FxI32, FxI32, FxBool, FxBool);
199FX_ENTRY GrScreenResolution_t FX_CALL grWrapperFullScreenResolutionExt(FxU32*, FxU32*);
200FX_ENTRY char ** FX_CALL grQueryResolutionsExt(FxI32*);
201FX_ENTRY FxBool FX_CALL grKeyPressedExt(FxU32 key);
202FX_ENTRY void FX_CALL grGetGammaTableExt(FxU32, FxU32*, FxU32*, FxU32*);
203
204int getFullScreenWidth();
205int getFullScreenHeight();
206
207// ZIGGY framebuffer copy extension
208// allow to copy the depth or color buffer from back/front to front/back
209#define GR_FBCOPY_MODE_DEPTH 0
210#define GR_FBCOPY_MODE_COLOR 1
211#define GR_FBCOPY_BUFFER_BACK 0
212#define GR_FBCOPY_BUFFER_FRONT 1
213FX_ENTRY void FX_CALL grFramebufferCopyExt(int x, int y, int w, int h,
214 int buffer_from, int buffer_to, int mode);
215
216
217// COMBINE extension
218
219typedef FxU32 GrCCUColor_t;
220typedef FxU32 GrACUColor_t;
221typedef FxU32 GrTCCUColor_t;
222typedef FxU32 GrTACUColor_t;
223
224typedef FxU32 GrCombineMode_t;
225#define GR_FUNC_MODE_ZERO 0x00
226#define GR_FUNC_MODE_X 0x01
227#define GR_FUNC_MODE_ONE_MINUS_X 0x02
228#define GR_FUNC_MODE_NEGATIVE_X 0x03
229#define GR_FUNC_MODE_X_MINUS_HALF 0x04
230
231#define GR_CMBX_ZERO 0x00
232#define GR_CMBX_TEXTURE_ALPHA 0x01
233#define GR_CMBX_ALOCAL 0x02
234#define GR_CMBX_AOTHER 0x03
235#define GR_CMBX_B 0x04
236#define GR_CMBX_CONSTANT_ALPHA 0x05
237#define GR_CMBX_CONSTANT_COLOR 0x06
238#define GR_CMBX_DETAIL_FACTOR 0x07
239#define GR_CMBX_ITALPHA 0x08
240#define GR_CMBX_ITRGB 0x09
241#define GR_CMBX_LOCAL_TEXTURE_ALPHA 0x0a
242#define GR_CMBX_LOCAL_TEXTURE_RGB 0x0b
243#define GR_CMBX_LOD_FRAC 0x0c
244#define GR_CMBX_OTHER_TEXTURE_ALPHA 0x0d
245#define GR_CMBX_OTHER_TEXTURE_RGB 0x0e
246#define GR_CMBX_TEXTURE_RGB 0x0f
247#define GR_CMBX_TMU_CALPHA 0x10
248#define GR_CMBX_TMU_CCOLOR 0x11
249
250
251FX_ENTRY void FX_CALL
252grColorCombineExt(GrCCUColor_t a, GrCombineMode_t a_mode,
253 GrCCUColor_t b, GrCombineMode_t b_mode,
254 GrCCUColor_t c, FxBool c_invert,
255 GrCCUColor_t d, FxBool d_invert,
256 FxU32 shift, FxBool invert);
257
258FX_ENTRY void FX_CALL
259grAlphaCombineExt(GrACUColor_t a, GrCombineMode_t a_mode,
260 GrACUColor_t b, GrCombineMode_t b_mode,
261 GrACUColor_t c, FxBool c_invert,
262 GrACUColor_t d, FxBool d_invert,
263 FxU32 shift, FxBool invert);
264
265FX_ENTRY void FX_CALL
266grTexColorCombineExt(GrChipID_t tmu,
267 GrTCCUColor_t a, GrCombineMode_t a_mode,
268 GrTCCUColor_t b, GrCombineMode_t b_mode,
269 GrTCCUColor_t c, FxBool c_invert,
270 GrTCCUColor_t d, FxBool d_invert,
271 FxU32 shift, FxBool invert);
272
273FX_ENTRY void FX_CALL
274grTexAlphaCombineExt(GrChipID_t tmu,
275 GrTACUColor_t a, GrCombineMode_t a_mode,
276 GrTACUColor_t b, GrCombineMode_t b_mode,
277 GrTACUColor_t c, FxBool c_invert,
278 GrTACUColor_t d, FxBool d_invert,
279 FxU32 shift, FxBool invert);
280
281FX_ENTRY void FX_CALL
282grConstantColorValueExt(GrChipID_t tmu,
283 GrColor_t value);
284
285#define CHECK_FRAMEBUFFER_STATUS() \
286{\
287 GLenum status; \
288 status = glCheckFramebufferStatus(GL_FRAMEBUFFER); \
289 /*display_warning("%x\n", status);*/\
290 switch(status) { \
291 case GL_FRAMEBUFFER_COMPLETE: \
292 /*display_warning("framebuffer complete!\n");*/\
293 break; \
294 case GL_FRAMEBUFFER_UNSUPPORTED: \
295 display_warning("framebuffer GL_FRAMEBUFFER_UNSUPPORTED_EXT\n");\
296 /* you gotta choose different formats */ \
297 /*assert(0);*/ \
298 break; \
299 case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: \
300 display_warning("framebuffer INCOMPLETE_ATTACHMENT\n");\
301 break; \
302 case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: \
303 display_warning("framebuffer FRAMEBUFFER_MISSING_ATTACHMENT\n");\
304 break; \
305 case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS: \
306 display_warning("framebuffer FRAMEBUFFER_DIMENSIONS\n");\
307 break; \
308 default: \
309 break; \
310 /* programming error; will fail on all hardware */ \
311 /*assert(0);*/ \
312 }\
313}
314
315#ifdef VPDEBUG
316#define LOGGING
317#endif
318
319#ifdef LOGGING
320void OPEN_LOG();
321void CLOSE_LOG();
322//void LOG(const char *text, ...);
323#else // LOGGING
324#define OPEN_LOG()
325#define CLOSE_LOG()
326//#define LOG
327#endif // LOGGING
328
329#endif