Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/libmupen64plus/mupen64plus-video-glide64mk2/src/Glitch64/main.h
2 views
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
void WriteLog(m64p_msg_level level, const char *msg, ...);
28
29
30
#ifndef _WIN32
31
//#define VPDEBUG
32
#endif
33
#ifdef VPDEBUG
34
void dump_tex(int id);
35
void dump_start();
36
void dump_stop();
37
extern int dumping;
38
#endif
39
40
#define zscale 1.0f
41
42
typedef struct _wrapper_config
43
{
44
int res;
45
int fbo;
46
int anisofilter;
47
int vram_size;
48
} wrapper_config;
49
extern wrapper_config config;
50
51
52
// VP added this utility function
53
// returns the bytes per pixel of a given GR texture format
54
int grTexFormatSize(int fmt);
55
56
extern int packed_pixels_support;
57
extern int ati_sucks;
58
extern float largest_supported_anisotropy;
59
60
extern int default_texture; // the infamous "32*1024*1024" is now configurable
61
extern int depth_texture;
62
void set_depth_shader();
63
void set_bw_shader();
64
extern float invtex[2];
65
extern int buffer_cleared; // mark that the buffer has been cleared, used to check if we need to reload the texture buffer content
66
67
#ifdef _WIN32
68
#include <windows.h>
69
extern "C" {
70
#include <SDL_opengl.h>
71
extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
72
extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
73
extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
74
extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
75
extern PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;
76
extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
77
extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
78
extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
79
extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
80
extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT;
81
extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
82
extern PFNGLFOGCOORDFEXTPROC glFogCoordfEXT;
83
extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT;
84
extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
85
extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
86
extern PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT;
87
extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
88
extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
89
extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
90
extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
91
extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
92
extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT;
93
extern PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;
94
extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
95
extern PFNGLUNIFORM1FARBPROC glUniform1fARB;
96
extern PFNGLUNIFORM1IARBPROC glUniform1iARB;
97
extern PFNGLUNIFORM4FARBPROC glUniform4fARB;
98
extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
99
typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
100
}
101
#else
102
#include <stdio.h>
103
//#define printf(...)
104
#define GL_GLEXT_PROTOTYPES
105
#include <SDL_opengl.h>
106
#endif // _WIN32
107
#include "glide.h"
108
109
void display_warning(const unsigned char *text, ...);
110
void display_warning(const char *text, ...);
111
void init_geometry();
112
void init_textures();
113
void init_combiner();
114
void free_textures();
115
void updateCombiner(int i);
116
void updateCombinera(int i);
117
void remove_tex(unsigned int idmin, unsigned int idmax);
118
void add_tex(unsigned int id);
119
120
#ifdef _WIN32
121
extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
122
extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
123
extern PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;
124
extern PFNGLFOGCOORDFPROC glFogCoordfEXT;
125
126
extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
127
extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
128
extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
129
extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
130
extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
131
extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
132
extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
133
extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
134
extern PFNGLUNIFORM1IARBPROC glUniform1iARB;
135
extern PFNGLUNIFORM4IARBPROC glUniform4iARB;
136
extern PFNGLUNIFORM4FARBPROC glUniform4fARB;
137
extern PFNGLUNIFORM1FARBPROC glUniform1fARB;
138
extern PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
139
extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
140
extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
141
extern PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;
142
#endif
143
144
extern int w_buffer_mode;
145
extern int nbTextureUnits;
146
extern int width, height, widtho, heighto;
147
extern int tex0_width, tex0_height, tex1_width, tex1_height;
148
extern float texture_env_color[4];
149
extern int fog_enabled;
150
extern float lambda;
151
extern int need_lambda[2];
152
extern float lambda_color[2][4];
153
extern int inverted_culling;
154
extern int culling_mode;
155
extern int render_to_texture;
156
extern int lfb_color_fmt;
157
extern int need_to_compile;
158
extern int blackandwhite0;
159
extern int blackandwhite1;
160
extern int TMU_SIZE;
161
162
extern int blend_func_separate_support;
163
extern int fog_coord_support;
164
//extern int pbuffer_support;
165
extern int glsl_support;
166
extern unsigned int pBufferAddress;
167
extern int viewport_width, viewport_height, viewport_offset, nvidia_viewport_hack;
168
extern int UMAmode;
169
170
void grChromaRangeExt(GrColor_t color0, GrColor_t color1, FxU32 mode);
171
void grChromaRangeModeExt(GrChromakeyMode_t mode);
172
void grTexChromaRangeExt(GrChipID_t tmu, GrColor_t color0, GrColor_t color1, GrTexChromakeyMode_t mode);
173
void grTexChromaModeExt(GrChipID_t tmu, GrChromakeyMode_t mode);
174
void updateTexture();
175
void reloadTexture();
176
void free_combiners();
177
void compile_shader();
178
void set_lambda();
179
void set_copy_shader();
180
181
// config functions
182
183
//FX_ENTRY void FX_CALL grConfigWrapperExt(HINSTANCE instance, HWND hwnd);
184
FX_ENTRY void FX_CALL grConfigWrapperExt(FxI32, FxI32, FxBool, FxBool);
185
FX_ENTRY GrScreenResolution_t FX_CALL grWrapperFullScreenResolutionExt(FxU32*, FxU32*);
186
FX_ENTRY char ** FX_CALL grQueryResolutionsExt(FxI32*);
187
FX_ENTRY FxBool FX_CALL grKeyPressedExt(FxU32 key);
188
FX_ENTRY void FX_CALL grGetGammaTableExt(FxU32, FxU32*, FxU32*, FxU32*);
189
190
int getFullScreenWidth();
191
int getFullScreenHeight();
192
193
// ZIGGY framebuffer copy extension
194
// allow to copy the depth or color buffer from back/front to front/back
195
#define GR_FBCOPY_MODE_DEPTH 0
196
#define GR_FBCOPY_MODE_COLOR 1
197
#define GR_FBCOPY_BUFFER_BACK 0
198
#define GR_FBCOPY_BUFFER_FRONT 1
199
FX_ENTRY void FX_CALL grFramebufferCopyExt(int x, int y, int w, int h,
200
int buffer_from, int buffer_to, int mode);
201
202
203
// COMBINE extension
204
205
typedef FxU32 GrCCUColor_t;
206
typedef FxU32 GrACUColor_t;
207
typedef FxU32 GrTCCUColor_t;
208
typedef FxU32 GrTACUColor_t;
209
210
typedef FxU32 GrCombineMode_t;
211
#define GR_FUNC_MODE_ZERO 0x00
212
#define GR_FUNC_MODE_X 0x01
213
#define GR_FUNC_MODE_ONE_MINUS_X 0x02
214
#define GR_FUNC_MODE_NEGATIVE_X 0x03
215
#define GR_FUNC_MODE_X_MINUS_HALF 0x04
216
217
#define GR_CMBX_ZERO 0x00
218
#define GR_CMBX_TEXTURE_ALPHA 0x01
219
#define GR_CMBX_ALOCAL 0x02
220
#define GR_CMBX_AOTHER 0x03
221
#define GR_CMBX_B 0x04
222
#define GR_CMBX_CONSTANT_ALPHA 0x05
223
#define GR_CMBX_CONSTANT_COLOR 0x06
224
#define GR_CMBX_DETAIL_FACTOR 0x07
225
#define GR_CMBX_ITALPHA 0x08
226
#define GR_CMBX_ITRGB 0x09
227
#define GR_CMBX_LOCAL_TEXTURE_ALPHA 0x0a
228
#define GR_CMBX_LOCAL_TEXTURE_RGB 0x0b
229
#define GR_CMBX_LOD_FRAC 0x0c
230
#define GR_CMBX_OTHER_TEXTURE_ALPHA 0x0d
231
#define GR_CMBX_OTHER_TEXTURE_RGB 0x0e
232
#define GR_CMBX_TEXTURE_RGB 0x0f
233
#define GR_CMBX_TMU_CALPHA 0x10
234
#define GR_CMBX_TMU_CCOLOR 0x11
235
236
237
FX_ENTRY void FX_CALL
238
grColorCombineExt(GrCCUColor_t a, GrCombineMode_t a_mode,
239
GrCCUColor_t b, GrCombineMode_t b_mode,
240
GrCCUColor_t c, FxBool c_invert,
241
GrCCUColor_t d, FxBool d_invert,
242
FxU32 shift, FxBool invert);
243
244
FX_ENTRY void FX_CALL
245
grAlphaCombineExt(GrACUColor_t a, GrCombineMode_t a_mode,
246
GrACUColor_t b, GrCombineMode_t b_mode,
247
GrACUColor_t c, FxBool c_invert,
248
GrACUColor_t d, FxBool d_invert,
249
FxU32 shift, FxBool invert);
250
251
FX_ENTRY void FX_CALL
252
grTexColorCombineExt(GrChipID_t tmu,
253
GrTCCUColor_t a, GrCombineMode_t a_mode,
254
GrTCCUColor_t b, GrCombineMode_t b_mode,
255
GrTCCUColor_t c, FxBool c_invert,
256
GrTCCUColor_t d, FxBool d_invert,
257
FxU32 shift, FxBool invert);
258
259
FX_ENTRY void FX_CALL
260
grTexAlphaCombineExt(GrChipID_t tmu,
261
GrTACUColor_t a, GrCombineMode_t a_mode,
262
GrTACUColor_t b, GrCombineMode_t b_mode,
263
GrTACUColor_t c, FxBool c_invert,
264
GrTACUColor_t d, FxBool d_invert,
265
FxU32 shift, FxBool invert);
266
267
FX_ENTRY void FX_CALL
268
grConstantColorValueExt(GrChipID_t tmu,
269
GrColor_t value);
270
271
#define CHECK_FRAMEBUFFER_STATUS() \
272
{\
273
GLenum status; \
274
status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); \
275
/*display_warning("%x\n", status);*/\
276
switch(status) { \
277
case GL_FRAMEBUFFER_COMPLETE_EXT: \
278
/*display_warning("framebuffer complete!\n");*/\
279
break; \
280
case GL_FRAMEBUFFER_UNSUPPORTED_EXT: \
281
display_warning("framebuffer GL_FRAMEBUFFER_UNSUPPORTED_EXT\n");\
282
/* you gotta choose different formats */ \
283
/*assert(0);*/ \
284
break; \
285
case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: \
286
display_warning("framebuffer INCOMPLETE_ATTACHMENT\n");\
287
break; \
288
case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: \
289
display_warning("framebuffer FRAMEBUFFER_MISSING_ATTACHMENT\n");\
290
break; \
291
case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: \
292
display_warning("framebuffer FRAMEBUFFER_DIMENSIONS\n");\
293
break; \
294
/*case GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT: \
295
display_warning("framebuffer INCOMPLETE_DUPLICATE_ATTACHMENT\n");\
296
break;*/ \
297
case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: \
298
display_warning("framebuffer INCOMPLETE_FORMATS\n");\
299
break; \
300
case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: \
301
display_warning("framebuffer INCOMPLETE_DRAW_BUFFER\n");\
302
break; \
303
case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: \
304
display_warning("framebuffer INCOMPLETE_READ_BUFFER\n");\
305
break; \
306
case GL_FRAMEBUFFER_BINDING_EXT: \
307
display_warning("framebuffer BINDING_EXT\n");\
308
break; \
309
default: \
310
break; \
311
/* programming error; will fail on all hardware */ \
312
/*assert(0);*/ \
313
}\
314
}
315
316
#ifdef VPDEBUG
317
#define LOGGING
318
#endif
319
320
#ifdef LOGGING
321
void OPEN_LOG();
322
void CLOSE_LOG();
323
//void LOG(const char *text, ...);
324
#else // LOGGING
325
#define OPEN_LOG()
326
#define CLOSE_LOG()
327
//#define LOG
328
#endif // LOGGING
329
330
#endif
331
332