1 /***************************************************************************
\r
2 external.h - description
\r
4 begin : Sun Mar 08 2009
\r
5 copyright : (C) 1999-2009 by Pete Bernert
\r
6 web : www.pbernert.com
\r
7 ***************************************************************************/
\r
9 /***************************************************************************
\r
11 * This program is free software; you can redistribute it and/or modify *
\r
12 * it under the terms of the GNU General Public License as published by *
\r
13 * the Free Software Foundation; either version 2 of the License, or *
\r
14 * (at your option) any later version. See also the license.txt file for *
\r
15 * additional informations. *
\r
17 ***************************************************************************/
\r
19 #define MIRROR_TEST 1
\r
20 #define SCISSOR_TEST 1
\r
22 // for own sow/tow scaling
\r
25 #define CLUTUSED 0x80000000
\r
27 #define SETCOL(x) if(x.c.lcol!=ulOLDCOL) {ulOLDCOL=x.c.lcol;glColor4ubv(x.c.col);}
\r
28 #define SETPCOL(x) if(x->c.lcol!=ulOLDCOL) {ulOLDCOL=x->c.lcol;glColor4ubv(x->c.col);}
\r
30 #define GL_TO_EDGE_CLAMP 0x812F
\r
33 #define INFO_DRAWSTART 1
\r
34 #define INFO_DRAWEND 2
\r
35 #define INFO_DRAWOFF 3
\r
37 #define SIGNSHIFT 21
\r
38 #define CHKMAX_X 1024
\r
39 #define CHKMAX_Y 512
\r
41 // GPU STATUS REGISTER bit values (c) Lewpy
\r
44 #define DR_VRAMTRANSFER 1
\r
46 #define GPUSTATUS_ODDLINES 0x80000000
\r
47 #define GPUSTATUS_DMABITS 0x60000000 // Two bits
\r
48 #define GPUSTATUS_READYFORCOMMANDS 0x10000000
\r
49 #define GPUSTATUS_READYFORVRAM 0x08000000
\r
50 #define GPUSTATUS_IDLE 0x04000000
\r
51 #define GPUSTATUS_DISPLAYDISABLED 0x00800000
\r
52 #define GPUSTATUS_INTERLACED 0x00400000
\r
53 #define GPUSTATUS_RGB24 0x00200000
\r
54 #define GPUSTATUS_PAL 0x00100000
\r
55 #define GPUSTATUS_DOUBLEHEIGHT 0x00080000
\r
56 #define GPUSTATUS_WIDTHBITS 0x00070000 // Three bits
\r
57 #define GPUSTATUS_MASKENABLED 0x00001000
\r
58 #define GPUSTATUS_MASKDRAWN 0x00000800
\r
59 #define GPUSTATUS_DRAWINGALLOWED 0x00000400
\r
60 #define GPUSTATUS_DITHER 0x00000200
\r
62 #define STATUSREG lGPUstatusRet
\r
64 #define GPUIsBusy (STATUSREG &= ~GPUSTATUS_IDLE)
\r
65 #define GPUIsIdle (STATUSREG |= GPUSTATUS_IDLE)
\r
67 #define GPUIsNotReadyForCommands (STATUSREG &= ~GPUSTATUS_READYFORCOMMANDS)
\r
68 #define GPUIsReadyForCommands (STATUSREG |= GPUSTATUS_READYFORCOMMANDS)
\r
70 #define KEY_RESETTEXSTORE 1
\r
71 #define KEY_SHOWFPS 2
\r
72 #define KEY_RESETOPAQUE 4
\r
73 #define KEY_RESETDITHER 8
\r
74 #define KEY_RESETFILTER 16
\r
75 #define KEY_RESETADVBLEND 32
\r
76 #define KEY_BLACKWHITE 64
\r
77 #define KEY_TOGGLEFBTEXTURE 128
\r
78 #define KEY_STEPDOWN 256
\r
79 #define KEY_TOGGLEFBREAD 512
\r
83 #define BOOL unsigned short
\r
84 #define bool unsigned short
\r
85 #define LOWORD(l) ((unsigned short)(l))
\r
86 #define HIWORD(l) ((unsigned short)(((uint32_t)(l) >> 16) & 0xFFFF))
\r
87 #define max(a,b) (((a) > (b)) ? (a) : (b))
\r
88 #define min(a,b) (((a) < (b)) ? (a) : (b))
\r
89 #define DWORD uint32_t
\r
91 typedef struct RECTTAG
\r
99 typedef struct VRAMLOADTAG
\r
105 short RowsRemaining;
\r
106 short ColsRemaining;
\r
107 unsigned short *ImagePtr;
\r
110 typedef struct PSXPOINTTAG
\r
116 typedef struct PSXSPOINTTAG
\r
122 typedef struct PSXRECTTAG
\r
130 typedef struct TWINTAG
\r
132 PSXRect_t Position;
\r
133 PSXRect_t OPosition;
\r
134 PSXPoint_t TextureSize;
\r
135 float UScaleFactor;
\r
136 float VScaleFactor;
\r
139 typedef struct PSXDISPLAYTAG
\r
141 PSXPoint_t DisplayModeNew;
\r
142 PSXPoint_t DisplayMode;
\r
143 PSXPoint_t DisplayPosition;
\r
144 PSXPoint_t DisplayEnd;
\r
151 int InterlacedTest;
\r
154 PSXSPoint_t DrawOffset;
\r
155 PSXRect_t DrawArea;
\r
156 PSXPoint_t GDrawOffset;
\r
157 PSXPoint_t CumulOffset;
\r
162 typedef struct OGLVertexTag
\r
173 unsigned char col[4];
\r
178 typedef union EXShortTag
\r
180 unsigned char c[2];
\r
184 typedef union EXLongTag
\r
186 unsigned char c[4];
\r
193 extern char *pConfigFile;
\r
201 extern BOOL bKeepRatio;
\r
202 extern RECT rRatioRect;
\r
203 extern BOOL bSnapShot;
\r
204 extern BOOL bSmallAlpha;
\r
205 extern BOOL bOpaquePass;
\r
206 extern BOOL bAdvancedBlend;
\r
207 extern BOOL bUseLines;
\r
208 extern int iTexQuality;
\r
209 extern BOOL bUseAntiAlias;
\r
210 extern BOOL bGLExt;
\r
211 extern BOOL bGLFastMovie;
\r
212 extern BOOL bGLSoft;
\r
213 extern BOOL bGLBlend;
\r
215 extern PFNGLBLENDEQU glBlendEquationEXTEx;
\r
216 extern PFNGLCOLORTABLEEXT glColorTableEXTEx;
\r
218 extern unsigned char gl_ux[8];
\r
219 extern unsigned char gl_vy[8];
\r
220 extern OGLVertex vertex[4];
\r
221 extern short sprtY,sprtX,sprtH,sprtW;
\r
222 extern BOOL bIsFirstFrame;
\r
223 extern int iWinSize;
\r
224 extern int iZBufferDepth;
\r
225 extern GLbitfield uiBufferBits;
\r
226 extern int iUseMask;
\r
227 extern int iSetMask;
\r
228 extern int iDepthFunc;
\r
229 extern BOOL bCheckMask;
\r
230 extern unsigned short sSetMask;
\r
231 extern uint32_t lSetMask;
\r
232 extern int iShowFPS;
\r
233 extern BOOL bSetClip;
\r
234 extern int iForceVSync;
\r
235 extern int iUseExts;
\r
236 extern int iUsePalTextures;
\r
237 extern GLuint gTexScanName;
\r
243 extern int GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;
\r
244 extern int GlobalTextREST,GlobalTextABR,GlobalTextPAGE;
\r
245 extern short ly0,lx0,ly1,lx1,ly2,lx2,ly3,lx3;
\r
249 extern short DrawSemiTrans;
\r
253 #ifndef _IN_PRIMDRAW
\r
255 extern BOOL bNeedUploadTest;
\r
256 extern BOOL bNeedUploadAfter;
\r
257 extern BOOL bTexEnabled;
\r
258 extern BOOL bBlendEnable;
\r
259 extern BOOL bDrawDither;
\r
260 extern int iFilterType;
\r
261 extern BOOL bFullVRam;
\r
262 extern BOOL bUseMultiPass;
\r
263 extern int iOffscreenDrawing;
\r
264 extern BOOL bOldSmoothShaded;
\r
265 extern BOOL bUsingTWin;
\r
266 extern BOOL bUsingMovie;
\r
267 extern PSXRect_t xrMovieArea;
\r
268 extern PSXRect_t xrUploadArea;
\r
269 extern PSXRect_t xrUploadAreaIL;
\r
270 extern PSXRect_t xrUploadAreaRGB24;
\r
271 extern GLuint gTexName;
\r
272 extern BOOL bDrawNonShaded;
\r
273 extern BOOL bDrawMultiPass;
\r
274 extern GLubyte ubGloColAlpha;
\r
275 extern GLubyte ubGloAlpha;
\r
276 extern short sSprite_ux2;
\r
277 extern short sSprite_vy2;
\r
278 extern BOOL bRenderFrontBuffer;
\r
279 extern uint32_t ulOLDCOL;
\r
280 extern uint32_t ulClutID;
\r
281 extern void (*primTableJ[256])(unsigned char *);
\r
282 extern void (*primTableSkip[256])(unsigned char *);
\r
283 extern unsigned short usMirror;
\r
284 extern uint32_t dwCfgFixes;
\r
285 extern uint32_t dwActFixes;
\r
286 extern uint32_t dwEmuFixes;
\r
287 extern BOOL bUseFixes;
\r
288 extern int iSpriteTex;
\r
289 extern int iDrawnSomething;
\r
295 extern short sxmin;
\r
296 extern short sxmax;
\r
297 extern short symin;
\r
298 extern short symax;
\r
302 #ifndef _IN_TEXTURE
\r
304 extern unsigned char ubOpaqueDraw;
\r
305 extern GLint giWantedRGBA;
\r
306 extern GLint giWantedFMT;
\r
307 extern GLint giWantedTYPE;
\r
308 extern void (*LoadSubTexFn) (int,int,short,short);
\r
309 extern int GlobalTexturePage;
\r
310 extern uint32_t (*TCF[]) (uint32_t);
\r
311 extern unsigned short (*PTCF[]) (unsigned short);
\r
312 extern uint32_t (*PalTexturedColourFn) (uint32_t);
\r
313 extern BOOL bUseFastMdec;
\r
314 extern BOOL bUse15bitMdec;
\r
315 extern int iFrameTexType;
\r
316 extern int iFrameReadType;
\r
317 extern int iClampType;
\r
318 extern int iSortTexCnt;
\r
319 extern BOOL bFakeFrontBuffer;
\r
320 extern GLuint gTexFrameName;
\r
321 extern GLuint gTexBlurName;
\r
322 extern int iVRamSize;
\r
323 extern int iTexGarbageCollection;
\r
326 extern int iHiResTextures;
\r
327 extern BOOL bIgnoreNextTile;
\r
333 extern VRAMLoad_t VRAMWrite;
\r
334 extern VRAMLoad_t VRAMRead;
\r
335 extern int iDataWriteMode;
\r
336 extern int iDataReadMode;
\r
337 extern int iColDepth;
\r
338 extern BOOL bChangeRes;
\r
339 extern BOOL bWindowMode;
\r
340 extern char szDispBuf[];
\r
341 extern char szGPUKeys[];
\r
342 extern PSXDisplay_t PSXDisplay;
\r
343 extern PSXDisplay_t PreviousPSXDisplay;
\r
344 extern uint32_t ulKeybits;
\r
345 extern TWin_t TWin;
\r
346 extern BOOL bDisplayNotSet;
\r
347 extern int lGPUstatusRet;
\r
348 extern short imageX0,imageX1;
\r
349 extern short imageY0,imageY1;
\r
350 extern int lClearOnSwap,lClearOnSwapColor;
\r
351 extern unsigned char *psxVub;
\r
352 extern signed char *psxVsb;
\r
353 extern unsigned short *psxVuw;
\r
354 extern signed short *psxVsw;
\r
355 extern uint32_t *psxVul;
\r
356 extern signed int *psxVsl;
\r
357 extern GLfloat gl_z;
\r
358 extern BOOL bNeedRGB24Update;
\r
359 extern BOOL bChangeWinMode;
\r
360 extern GLuint uiScanLine;
\r
361 extern int iUseScanLines;
\r
362 extern int lSelectedSlot;
\r
363 extern int iScanBlend;
\r
364 extern BOOL bInitCap;
\r
365 extern int iBlurBuffer;
\r
366 extern int iLastRGB24;
\r
367 extern int iRenderFVR;
\r
368 extern int iNoScreenSaver;
\r
369 extern uint32_t ulGPUInfoVals[];
\r
370 extern BOOL bNeedInterlaceUpdate;
\r
371 extern BOOL bNeedWriteUpload;
\r
372 extern BOOL bSkipNextFrame;
\r
374 extern int bFullScreen;
\r
380 extern uint32_t dwCoreFlags;
\r
381 extern GLuint gTexPicName;
\r
382 extern PSXPoint_t ptCursorPoint[];
\r
383 extern unsigned short usCursorActive;
\r
389 extern BOOL bUseFrameLimit;
\r
390 extern BOOL bUseFrameSkip;
\r
391 extern float fFrameRate;
\r
392 extern float fFrameRateHz;
\r
393 extern int iFrameLimit;
\r
394 extern float fps_skip;
\r
395 extern float fps_cur;
\r
401 extern uint32_t ulKeybits;
\r
407 extern uint32_t dwGPUVersion;
\r
408 extern int iGPUHeight;
\r
409 extern int iGPUHeightMask;
\r
410 extern int GlobalTextIL;
\r
411 extern int iTileCheat;
\r