Path: blob/master/libmupen64plus/mupen64plus-video-glide64mk2/src/Glitch64/main.h
2 views
/*1* Glide64 - Glide video plugin for Nintendo 64 emulators.2* Copyright (c) 2002 Dave20013* Copyright (c) 2003-2009 Sergey 'Gonetz' Lipski4*5* This program is free software; you can redistribute it and/or modify6* it under the terms of the GNU General Public License as published by7* the Free Software Foundation; either version 2 of the License, or8* any later version.9*10* This program is distributed in the hope that it will be useful,11* but WITHOUT ANY WARRANTY; without even the implied warranty of12* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the13* GNU General Public License for more details.14*15* You should have received a copy of the GNU General Public License16* along with this program; if not, write to the Free Software17* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA18*/1920#ifndef MAIN_H21#define MAIN_H2223#include <m64p_types.h>2425#define LOG(...) WriteLog(M64MSG_VERBOSE, __VA_ARGS__)26void WriteLog(m64p_msg_level level, const char *msg, ...);272829#ifndef _WIN3230//#define VPDEBUG31#endif32#ifdef VPDEBUG33void dump_tex(int id);34void dump_start();35void dump_stop();36extern int dumping;37#endif3839#define zscale 1.0f4041typedef struct _wrapper_config42{43int res;44int fbo;45int anisofilter;46int vram_size;47} wrapper_config;48extern wrapper_config config;495051// VP added this utility function52// returns the bytes per pixel of a given GR texture format53int grTexFormatSize(int fmt);5455extern int packed_pixels_support;56extern int ati_sucks;57extern float largest_supported_anisotropy;5859extern int default_texture; // the infamous "32*1024*1024" is now configurable60extern int depth_texture;61void set_depth_shader();62void set_bw_shader();63extern float invtex[2];64extern int buffer_cleared; // mark that the buffer has been cleared, used to check if we need to reload the texture buffer content6566#ifdef _WIN3267#include <windows.h>68extern "C" {69#include <SDL_opengl.h>70extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;71extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB;72extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;73extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;74extern PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;75extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;76extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB;77extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;78extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;79extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT;80extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;81extern PFNGLFOGCOORDFEXTPROC glFogCoordfEXT;82extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT;83extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;84extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;85extern PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT;86extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB;87extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;88extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;89extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB;90extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;91extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT;92extern PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;93extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB;94extern PFNGLUNIFORM1FARBPROC glUniform1fARB;95extern PFNGLUNIFORM1IARBPROC glUniform1iARB;96extern PFNGLUNIFORM4FARBPROC glUniform4fARB;97extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;98typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);99}100#else101#include <stdio.h>102//#define printf(...)103#define GL_GLEXT_PROTOTYPES104#include <SDL_opengl.h>105#endif // _WIN32106#include "glide.h"107108void display_warning(const unsigned char *text, ...);109void display_warning(const char *text, ...);110void init_geometry();111void init_textures();112void init_combiner();113void free_textures();114void updateCombiner(int i);115void updateCombinera(int i);116void remove_tex(unsigned int idmin, unsigned int idmax);117void add_tex(unsigned int id);118119#ifdef _WIN32120extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;121extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;122extern PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;123extern PFNGLFOGCOORDFPROC glFogCoordfEXT;124125extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;126extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB;127extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB;128extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;129extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB;130extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB;131extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;132extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;133extern PFNGLUNIFORM1IARBPROC glUniform1iARB;134extern PFNGLUNIFORM4IARBPROC glUniform4iARB;135extern PFNGLUNIFORM4FARBPROC glUniform4fARB;136extern PFNGLUNIFORM1FARBPROC glUniform1fARB;137extern PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;138extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB;139extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;140extern PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;141#endif142143extern int w_buffer_mode;144extern int nbTextureUnits;145extern int width, height, widtho, heighto;146extern int tex0_width, tex0_height, tex1_width, tex1_height;147extern float texture_env_color[4];148extern int fog_enabled;149extern float lambda;150extern int need_lambda[2];151extern float lambda_color[2][4];152extern int inverted_culling;153extern int culling_mode;154extern int render_to_texture;155extern int lfb_color_fmt;156extern int need_to_compile;157extern int blackandwhite0;158extern int blackandwhite1;159extern int TMU_SIZE;160161extern int blend_func_separate_support;162extern int fog_coord_support;163//extern int pbuffer_support;164extern int glsl_support;165extern unsigned int pBufferAddress;166extern int viewport_width, viewport_height, viewport_offset, nvidia_viewport_hack;167extern int UMAmode;168169void grChromaRangeExt(GrColor_t color0, GrColor_t color1, FxU32 mode);170void grChromaRangeModeExt(GrChromakeyMode_t mode);171void grTexChromaRangeExt(GrChipID_t tmu, GrColor_t color0, GrColor_t color1, GrTexChromakeyMode_t mode);172void grTexChromaModeExt(GrChipID_t tmu, GrChromakeyMode_t mode);173void updateTexture();174void reloadTexture();175void free_combiners();176void compile_shader();177void set_lambda();178void set_copy_shader();179180// config functions181182//FX_ENTRY void FX_CALL grConfigWrapperExt(HINSTANCE instance, HWND hwnd);183FX_ENTRY void FX_CALL grConfigWrapperExt(FxI32, FxI32, FxBool, FxBool);184FX_ENTRY GrScreenResolution_t FX_CALL grWrapperFullScreenResolutionExt(FxU32*, FxU32*);185FX_ENTRY char ** FX_CALL grQueryResolutionsExt(FxI32*);186FX_ENTRY FxBool FX_CALL grKeyPressedExt(FxU32 key);187FX_ENTRY void FX_CALL grGetGammaTableExt(FxU32, FxU32*, FxU32*, FxU32*);188189int getFullScreenWidth();190int getFullScreenHeight();191192// ZIGGY framebuffer copy extension193// allow to copy the depth or color buffer from back/front to front/back194#define GR_FBCOPY_MODE_DEPTH 0195#define GR_FBCOPY_MODE_COLOR 1196#define GR_FBCOPY_BUFFER_BACK 0197#define GR_FBCOPY_BUFFER_FRONT 1198FX_ENTRY void FX_CALL grFramebufferCopyExt(int x, int y, int w, int h,199int buffer_from, int buffer_to, int mode);200201202// COMBINE extension203204typedef FxU32 GrCCUColor_t;205typedef FxU32 GrACUColor_t;206typedef FxU32 GrTCCUColor_t;207typedef FxU32 GrTACUColor_t;208209typedef FxU32 GrCombineMode_t;210#define GR_FUNC_MODE_ZERO 0x00211#define GR_FUNC_MODE_X 0x01212#define GR_FUNC_MODE_ONE_MINUS_X 0x02213#define GR_FUNC_MODE_NEGATIVE_X 0x03214#define GR_FUNC_MODE_X_MINUS_HALF 0x04215216#define GR_CMBX_ZERO 0x00217#define GR_CMBX_TEXTURE_ALPHA 0x01218#define GR_CMBX_ALOCAL 0x02219#define GR_CMBX_AOTHER 0x03220#define GR_CMBX_B 0x04221#define GR_CMBX_CONSTANT_ALPHA 0x05222#define GR_CMBX_CONSTANT_COLOR 0x06223#define GR_CMBX_DETAIL_FACTOR 0x07224#define GR_CMBX_ITALPHA 0x08225#define GR_CMBX_ITRGB 0x09226#define GR_CMBX_LOCAL_TEXTURE_ALPHA 0x0a227#define GR_CMBX_LOCAL_TEXTURE_RGB 0x0b228#define GR_CMBX_LOD_FRAC 0x0c229#define GR_CMBX_OTHER_TEXTURE_ALPHA 0x0d230#define GR_CMBX_OTHER_TEXTURE_RGB 0x0e231#define GR_CMBX_TEXTURE_RGB 0x0f232#define GR_CMBX_TMU_CALPHA 0x10233#define GR_CMBX_TMU_CCOLOR 0x11234235236FX_ENTRY void FX_CALL237grColorCombineExt(GrCCUColor_t a, GrCombineMode_t a_mode,238GrCCUColor_t b, GrCombineMode_t b_mode,239GrCCUColor_t c, FxBool c_invert,240GrCCUColor_t d, FxBool d_invert,241FxU32 shift, FxBool invert);242243FX_ENTRY void FX_CALL244grAlphaCombineExt(GrACUColor_t a, GrCombineMode_t a_mode,245GrACUColor_t b, GrCombineMode_t b_mode,246GrACUColor_t c, FxBool c_invert,247GrACUColor_t d, FxBool d_invert,248FxU32 shift, FxBool invert);249250FX_ENTRY void FX_CALL251grTexColorCombineExt(GrChipID_t tmu,252GrTCCUColor_t a, GrCombineMode_t a_mode,253GrTCCUColor_t b, GrCombineMode_t b_mode,254GrTCCUColor_t c, FxBool c_invert,255GrTCCUColor_t d, FxBool d_invert,256FxU32 shift, FxBool invert);257258FX_ENTRY void FX_CALL259grTexAlphaCombineExt(GrChipID_t tmu,260GrTACUColor_t a, GrCombineMode_t a_mode,261GrTACUColor_t b, GrCombineMode_t b_mode,262GrTACUColor_t c, FxBool c_invert,263GrTACUColor_t d, FxBool d_invert,264FxU32 shift, FxBool invert);265266FX_ENTRY void FX_CALL267grConstantColorValueExt(GrChipID_t tmu,268GrColor_t value);269270#define CHECK_FRAMEBUFFER_STATUS() \271{\272GLenum status; \273status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); \274/*display_warning("%x\n", status);*/\275switch(status) { \276case GL_FRAMEBUFFER_COMPLETE_EXT: \277/*display_warning("framebuffer complete!\n");*/\278break; \279case GL_FRAMEBUFFER_UNSUPPORTED_EXT: \280display_warning("framebuffer GL_FRAMEBUFFER_UNSUPPORTED_EXT\n");\281/* you gotta choose different formats */ \282/*assert(0);*/ \283break; \284case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: \285display_warning("framebuffer INCOMPLETE_ATTACHMENT\n");\286break; \287case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: \288display_warning("framebuffer FRAMEBUFFER_MISSING_ATTACHMENT\n");\289break; \290case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: \291display_warning("framebuffer FRAMEBUFFER_DIMENSIONS\n");\292break; \293/*case GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT: \294display_warning("framebuffer INCOMPLETE_DUPLICATE_ATTACHMENT\n");\295break;*/ \296case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: \297display_warning("framebuffer INCOMPLETE_FORMATS\n");\298break; \299case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: \300display_warning("framebuffer INCOMPLETE_DRAW_BUFFER\n");\301break; \302case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: \303display_warning("framebuffer INCOMPLETE_READ_BUFFER\n");\304break; \305case GL_FRAMEBUFFER_BINDING_EXT: \306display_warning("framebuffer BINDING_EXT\n");\307break; \308default: \309break; \310/* programming error; will fail on all hardware */ \311/*assert(0);*/ \312}\313}314315#ifdef VPDEBUG316#define LOGGING317#endif318319#ifdef LOGGING320void OPEN_LOG();321void CLOSE_LOG();322//void LOG(const char *text, ...);323#else // LOGGING324#define OPEN_LOG()325#define CLOSE_LOG()326//#define LOG327#endif // LOGGING328329#endif330331332