Glide Plugin GLES2 port from mupen64plus-ae, but with special FrameSkip code
[mupen64plus-pandora.git] / source / gles2glide64 / src / Glitch64 / main.h
diff --git a/source/gles2glide64/src/Glitch64/main.h b/source/gles2glide64/src/Glitch64/main.h
new file mode 100644 (file)
index 0000000..f213fe9
--- /dev/null
@@ -0,0 +1,329 @@
+/*
+* Glide64 - Glide video plugin for Nintendo 64 emulators.
+* Copyright (c) 2002  Dave2001
+* Copyright (c) 2003-2009  Sergey 'Gonetz' Lipski
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#ifndef MAIN_H
+#define MAIN_H
+
+#include <m64p_types.h>
+
+#define LOG(...) // WriteLog(M64MSG_VERBOSE, __VA_ARGS__)
+#define LOGINFO(...) WriteLog(M64MSG_INFO, __VA_ARGS__)
+void WriteLog(m64p_msg_level level, const char *msg, ...);
+
+
+#ifndef _WIN32
+//#define VPDEBUG
+#endif
+#ifdef VPDEBUG
+void dump_tex(int id);
+void dump_start();
+void dump_stop();
+extern int dumping;
+#endif
+
+#define zscale 1.0f
+
+typedef struct _wrapper_config
+{
+  int res;
+  int fbo;
+  int anisofilter;
+  int vram_size;
+} wrapper_config;
+extern wrapper_config config;
+
+
+// VP added this utility function
+// returns the bytes per pixel of a given GR texture format
+int grTexFormatSize(int fmt);
+
+extern int packed_pixels_support;
+extern int ati_sucks;
+extern float largest_supported_anisotropy;
+
+extern int default_texture; // the infamous "32*1024*1024" is now configurable
+extern int depth_texture;
+void set_depth_shader();
+void set_bw_shader();
+extern float invtex[2];
+extern int buffer_cleared; // mark that the buffer has been cleared, used to check if we need to reload the texture buffer content
+
+#ifdef _WIN32
+#include <windows.h>
+extern "C" {
+    #include <SDL_opengl.h>
+    extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
+    extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
+    extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
+    extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
+    extern PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;
+    extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
+    extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
+    extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
+    extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
+    extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT;
+    extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
+    extern PFNGLFOGCOORDFEXTPROC glFogCoordfEXT;
+    extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT;
+    extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
+    extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
+    extern PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT;
+    extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
+    extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
+    extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
+    extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
+    extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
+    extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT;
+    extern PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;
+    extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
+    extern PFNGLUNIFORM1FARBPROC glUniform1fARB;
+    extern PFNGLUNIFORM1IARBPROC glUniform1iARB;
+    extern PFNGLUNIFORM4FARBPROC glUniform4fARB;
+    extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
+    typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
+}
+#else
+#include <stdio.h>
+//#define printf(...)
+#define GL_GLEXT_PROTOTYPES
+#include <SDL_opengles2.h>
+#endif // _WIN32
+#include "glide.h"
+#include "glState.cpp"
+
+void display_warning(const unsigned char *text, ...);
+void display_warning(const char *text, ...);
+void init_geometry();
+void init_textures();
+void init_combiner();
+void free_textures();
+void updateCombiner(int i);
+void updateCombinera(int i);
+void remove_tex(unsigned int idmin, unsigned int idmax);
+void add_tex(unsigned int id);
+
+#ifdef _WIN32
+extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
+extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
+extern PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;
+extern PFNGLFOGCOORDFPROC glFogCoordfEXT;
+
+extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
+extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
+extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
+extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
+extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
+extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
+extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
+extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
+extern PFNGLUNIFORM1IARBPROC glUniform1iARB;
+extern PFNGLUNIFORM4IARBPROC glUniform4iARB;
+extern PFNGLUNIFORM4FARBPROC glUniform4fARB;
+extern PFNGLUNIFORM1FARBPROC glUniform1fARB;
+extern PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
+extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
+extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
+extern PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;
+#endif
+void check_compile(GLuint shader);
+void check_link(GLuint program);
+void vbo_enable();
+void vbo_disable();
+
+//Vertex Attribute Locations
+#define POSITION_ATTR 0
+#define COLOUR_ATTR 1
+#define TEXCOORD_0_ATTR 2
+#define TEXCOORD_1_ATTR 3
+#define FOG_ATTR 4
+
+extern int w_buffer_mode;
+extern int nbTextureUnits;
+extern int width, height, widtho, heighto;
+extern int tex0_width, tex0_height, tex1_width, tex1_height;
+extern float texture_env_color[4];
+extern int fog_enabled;
+extern float lambda;
+extern int need_lambda[2];
+extern float lambda_color[2][4];
+extern int inverted_culling;
+extern int culling_mode;
+extern int render_to_texture;
+extern int lfb_color_fmt;
+extern int need_to_compile;
+extern int blackandwhite0;
+extern int blackandwhite1;
+extern int TMU_SIZE;
+
+extern int blend_func_separate_support;
+extern int fog_coord_support;
+//extern int pbuffer_support;
+extern int glsl_support;
+extern unsigned int pBufferAddress;
+extern int viewport_width, viewport_height, viewport_offset, nvidia_viewport_hack;
+extern int UMAmode;
+
+void grChromaRangeExt(GrColor_t color0, GrColor_t color1, FxU32 mode);
+void grChromaRangeModeExt(GrChromakeyMode_t mode);
+void grTexChromaRangeExt(GrChipID_t tmu, GrColor_t color0, GrColor_t color1, GrTexChromakeyMode_t mode);
+void grTexChromaModeExt(GrChipID_t tmu, GrChromakeyMode_t mode);
+void updateTexture();
+void reloadTexture();
+void free_combiners();
+void compile_shader();
+void set_lambda();
+void set_copy_shader();
+void disable_textureSizes();
+
+// config functions
+
+//FX_ENTRY void FX_CALL grConfigWrapperExt(HINSTANCE instance, HWND hwnd);
+FX_ENTRY void FX_CALL grConfigWrapperExt(FxI32, FxI32, FxBool, FxBool);
+FX_ENTRY GrScreenResolution_t FX_CALL grWrapperFullScreenResolutionExt(FxU32*, FxU32*);
+FX_ENTRY char ** FX_CALL grQueryResolutionsExt(FxI32*);
+FX_ENTRY FxBool FX_CALL grKeyPressedExt(FxU32 key);
+FX_ENTRY void FX_CALL grGetGammaTableExt(FxU32, FxU32*, FxU32*, FxU32*);
+
+int getFullScreenWidth();
+int getFullScreenHeight();
+
+// ZIGGY framebuffer copy extension
+// allow to copy the depth or color buffer from back/front to front/back
+#define GR_FBCOPY_MODE_DEPTH 0
+#define GR_FBCOPY_MODE_COLOR 1
+#define GR_FBCOPY_BUFFER_BACK 0
+#define GR_FBCOPY_BUFFER_FRONT 1
+FX_ENTRY void FX_CALL grFramebufferCopyExt(int x, int y, int w, int h,
+                                           int buffer_from, int buffer_to, int mode);
+
+
+// COMBINE extension
+
+typedef FxU32 GrCCUColor_t;
+typedef FxU32 GrACUColor_t;
+typedef FxU32 GrTCCUColor_t;
+typedef FxU32 GrTACUColor_t;
+
+typedef FxU32 GrCombineMode_t;
+#define GR_FUNC_MODE_ZERO                 0x00
+#define GR_FUNC_MODE_X                    0x01
+#define GR_FUNC_MODE_ONE_MINUS_X          0x02
+#define GR_FUNC_MODE_NEGATIVE_X           0x03
+#define GR_FUNC_MODE_X_MINUS_HALF         0x04
+
+#define GR_CMBX_ZERO                      0x00
+#define GR_CMBX_TEXTURE_ALPHA             0x01
+#define GR_CMBX_ALOCAL                    0x02
+#define GR_CMBX_AOTHER                    0x03
+#define GR_CMBX_B                         0x04
+#define GR_CMBX_CONSTANT_ALPHA            0x05
+#define GR_CMBX_CONSTANT_COLOR            0x06
+#define GR_CMBX_DETAIL_FACTOR             0x07
+#define GR_CMBX_ITALPHA                   0x08
+#define GR_CMBX_ITRGB                     0x09
+#define GR_CMBX_LOCAL_TEXTURE_ALPHA       0x0a
+#define GR_CMBX_LOCAL_TEXTURE_RGB         0x0b
+#define GR_CMBX_LOD_FRAC                  0x0c
+#define GR_CMBX_OTHER_TEXTURE_ALPHA       0x0d
+#define GR_CMBX_OTHER_TEXTURE_RGB         0x0e
+#define GR_CMBX_TEXTURE_RGB               0x0f
+#define GR_CMBX_TMU_CALPHA                0x10
+#define GR_CMBX_TMU_CCOLOR                0x11
+
+
+FX_ENTRY void FX_CALL
+grColorCombineExt(GrCCUColor_t a, GrCombineMode_t a_mode,
+                                 GrCCUColor_t b, GrCombineMode_t b_mode,
+                  GrCCUColor_t c, FxBool c_invert,
+                                 GrCCUColor_t d, FxBool d_invert,
+                                 FxU32 shift, FxBool invert);
+
+FX_ENTRY void FX_CALL
+grAlphaCombineExt(GrACUColor_t a, GrCombineMode_t a_mode,
+                                 GrACUColor_t b, GrCombineMode_t b_mode,
+                                 GrACUColor_t c, FxBool c_invert,
+                                 GrACUColor_t d, FxBool d_invert,
+                                 FxU32 shift, FxBool invert);
+
+FX_ENTRY void FX_CALL
+grTexColorCombineExt(GrChipID_t       tmu,
+                     GrTCCUColor_t a, GrCombineMode_t a_mode,
+                     GrTCCUColor_t b, GrCombineMode_t b_mode,
+                     GrTCCUColor_t c, FxBool c_invert,
+                     GrTCCUColor_t d, FxBool d_invert,
+                     FxU32 shift, FxBool invert);
+
+FX_ENTRY void FX_CALL
+grTexAlphaCombineExt(GrChipID_t       tmu,
+                     GrTACUColor_t a, GrCombineMode_t a_mode,
+                     GrTACUColor_t b, GrCombineMode_t b_mode,
+                     GrTACUColor_t c, FxBool c_invert,
+                     GrTACUColor_t d, FxBool d_invert,
+                     FxU32 shift, FxBool invert);
+
+FX_ENTRY void FX_CALL
+grConstantColorValueExt(GrChipID_t    tmu,
+                        GrColor_t     value);
+
+#define CHECK_FRAMEBUFFER_STATUS() \
+{\
+ GLenum status; \
+ status = glCheckFramebufferStatus(GL_FRAMEBUFFER); \
+ /*display_warning("%x\n", status);*/\
+ switch(status) { \
+ case GL_FRAMEBUFFER_COMPLETE: \
+   /*display_warning("framebuffer complete!\n");*/\
+   break; \
+ case GL_FRAMEBUFFER_UNSUPPORTED: \
+   display_warning("framebuffer GL_FRAMEBUFFER_UNSUPPORTED_EXT\n");\
+    /* you gotta choose different formats */ \
+   /*assert(0);*/ \
+   break; \
+ case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: \
+   display_warning("framebuffer INCOMPLETE_ATTACHMENT\n");\
+   break; \
+ case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: \
+   display_warning("framebuffer FRAMEBUFFER_MISSING_ATTACHMENT\n");\
+   break; \
+ case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS: \
+   display_warning("framebuffer FRAMEBUFFER_DIMENSIONS\n");\
+   break; \
+ default: \
+   break; \
+   /* programming error; will fail on all hardware */ \
+   /*assert(0);*/ \
+ }\
+}
+
+#ifdef VPDEBUG
+#define LOGGING
+#endif
+
+#ifdef LOGGING
+void OPEN_LOG();
+void CLOSE_LOG();
+//void LOG(const char *text, ...);
+#else // LOGGING
+#define OPEN_LOG()
+#define CLOSE_LOG()
+//#define LOG
+#endif // LOGGING
+
+#endif