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 //*************************************************************************//
\r
20 // History of changes:
\r
22 // 2009/03/08 - Pete
\r
23 // - generic cleanup for the Peops release
\r
25 //*************************************************************************//
\r
27 /////////////////////////////////////////////////////////////////////////////
\r
36 typedef unsigned char u8;
\r
37 typedef signed char s8;
\r
38 typedef unsigned short int u16;
\r
39 typedef signed short int s16;
\r
40 typedef unsigned long u32;
\r
41 typedef signed long s32;
\r
42 typedef unsigned long long int u64;
\r
43 typedef signed long long int s64;
\r
51 #pragma softfp_linkage
\r
53 #include <GLES/gl.h> // for opengl es types
\r
55 #pragma no_softfp_linkage
\r
61 #define glTexParameteri(x,y,z) glTexParameterf(x,y,z)
\r
62 #define glAlphaFuncx(x,y) glAlphaFunc(x,y)
\r
66 extern void ( APIENTRY * glPixelStorei )(GLenum pname, GLint param);
\r
70 #define MIRROR_TEST 1
\r
72 /////////////////////////////////////////////////////////////////////////////
\r
74 #define SCISSOR_TEST 1
\r
76 /////////////////////////////////////////////////////////////////////////////
\r
78 // for own sow/tow scaling
\r
81 /////////////////////////////////////////////////////////////////////////////
\r
83 #define CLUTUSED 0x80000000
\r
84 //glColor4ubv(x.c.col)
\r
85 #define SETCOL(x) if(x.c.lcol!=ulOLDCOL) {ulOLDCOL=x.c.lcol;glColor4ub(x.c.col[0],x.c.col[1],x.c.col[2],x.c.col[3]);}
\r
86 //#define SETPCOL(x) if(x->c.lcol!=ulOLDCOL) {ulOLDCOL=x->c.lcol;glColor4ub(x->c.col[0],x->c.col[1],x->c.col[2],x->c.col[3]);}
\r
89 #define INFO_DRAWSTART 1
\r
90 #define INFO_DRAWEND 2
\r
91 #define INFO_DRAWOFF 3
\r
93 #define SIGNSHIFT 21
\r
94 #define CHKMAX_X 1024
\r
95 #define CHKMAX_Y 512
\r
97 /////////////////////////////////////////////////////////////////////////////
\r
99 // GPU STATUS REGISTER bit values (c) Lewpy
\r
101 #define DR_NORMAL 0
\r
102 #define DR_VRAMTRANSFER 1
\r
104 #define GPUSTATUS_ODDLINES 0x80000000
\r
105 #define GPUSTATUS_DMABITS 0x60000000 // Two bits
\r
106 #define GPUSTATUS_READYFORCOMMANDS 0x10000000
\r
107 #define GPUSTATUS_READYFORVRAM 0x08000000
\r
108 #define GPUSTATUS_IDLE 0x04000000
\r
109 #define GPUSTATUS_DISPLAYDISABLED 0x00800000
\r
110 #define GPUSTATUS_INTERLACED 0x00400000
\r
111 #define GPUSTATUS_RGB24 0x00200000
\r
112 #define GPUSTATUS_PAL 0x00100000
\r
113 #define GPUSTATUS_DOUBLEHEIGHT 0x00080000
\r
114 #define GPUSTATUS_WIDTHBITS 0x00070000 // Three bits
\r
115 #define GPUSTATUS_MASKENABLED 0x00001000
\r
116 #define GPUSTATUS_MASKDRAWN 0x00000800
\r
117 #define GPUSTATUS_DRAWINGALLOWED 0x00000400
\r
118 #define GPUSTATUS_DITHER 0x00000200
\r
120 #define STATUSREG lGPUstatusRet
\r
122 #define GPUIsBusy (STATUSREG &= ~GPUSTATUS_IDLE)
\r
123 #define GPUIsIdle (STATUSREG |= GPUSTATUS_IDLE)
\r
125 #define GPUIsNotReadyForCommands (STATUSREG &= ~GPUSTATUS_READYFORCOMMANDS)
\r
126 #define GPUIsReadyForCommands (STATUSREG |= GPUSTATUS_READYFORCOMMANDS)
\r
128 /////////////////////////////////////////////////////////////////////////////
\r
130 #define KEY_RESETTEXSTORE 1
\r
131 #define KEY_SHOWFPS 2
\r
132 #define KEY_RESETOPAQUE 4
\r
133 #define KEY_RESETDITHER 8
\r
134 #define KEY_RESETFILTER 16
\r
135 #define KEY_RESETADVBLEND 32
\r
136 #define KEY_BLACKWHITE 64
\r
137 #define KEY_TOGGLEFBTEXTURE 128
\r
138 #define KEY_STEPDOWN 256
\r
139 #define KEY_TOGGLEFBREAD 512
\r
141 /////////////////////////////////////////////////////////////////////////////
\r
142 // Linux is missing some stuff, eh? ;)
\r
152 #define BOOL unsigned short
\r
155 #define bool unsigned short
\r
157 #define LOWORD(l) ((unsigned short)(l))
\r
158 #define HIWORD(l) ((unsigned short)(((unsigned long)(l) >> 16) & 0xFFFF))
\r
159 #define max(a,b) (((a) > (b)) ? (a) : (b))
\r
160 #define min(a,b) (((a) < (b)) ? (a) : (b))
\r
161 #define DWORD unsigned long
\r
163 typedef struct RECTTAG
\r
173 /////////////////////////////////////////////////////////////////////////////
\r
175 typedef struct VRAMLOADTAG
\r
181 short RowsRemaining;
\r
182 short ColsRemaining;
\r
183 unsigned short *ImagePtr;
\r
186 typedef struct PSXPOINTTAG
\r
192 typedef struct PSXSPOINTTAG
\r
198 typedef struct PSXRECTTAG
\r
206 /////////////////////////////////////////////////////////////////////////////
\r
208 typedef struct TWINTAG
\r
210 PSXRect_t Position;
\r
211 PSXRect_t OPosition;
\r
212 PSXPoint_t TextureSize;
\r
213 float UScaleFactor;
\r
214 float VScaleFactor;
\r
217 /////////////////////////////////////////////////////////////////////////////
\r
219 typedef struct PSXDISPLAYTAG
\r
221 PSXPoint_t DisplayModeNew;
\r
222 PSXPoint_t DisplayMode;
\r
223 PSXPoint_t DisplayPosition;
\r
224 PSXPoint_t DisplayEnd;
\r
229 long InterlacedNew;
\r
231 long InterlacedTest;
\r
234 PSXSPoint_t DrawOffset;
\r
235 PSXRect_t DrawArea;
\r
236 PSXPoint_t GDrawOffset;
\r
237 PSXPoint_t CumulOffset;
\r
242 /////////////////////////////////////////////////////////////////////////////
\r
244 typedef struct OGLVertexTag
\r
257 unsigned long lcol;
\r
262 typedef union EXShortTag
\r
268 typedef union EXLongTag
\r
276 /////////////////////////////////////////////////////////////////////////////
\r
280 extern HINSTANCE hInst;
\r
284 //-----------------------------------------------------//
\r
290 extern BOOL bKeepRatio;
\r
291 extern RECT rRatioRect;
\r
292 extern BOOL bOpaquePass;
\r
293 extern BOOL bAdvancedBlend;
\r
295 //extern PFNGLBLENDEQU glBlendEquationEXTEx;
\r
296 //extern PFNGLCOLORTABLEEXT glColorTableEXTEx;
\r
298 extern u8 gl_ux[8];
\r
299 extern u8 gl_vy[8];
\r
300 extern OGLVertex vertex[4];
\r
301 extern short sprtY,sprtX,sprtH,sprtW;
\r
303 extern HWND hWWindow;
\r
305 extern BOOL bIsFirstFrame;
\r
306 extern int iWinSize;
\r
307 extern int iZBufferDepth;
\r
308 extern GLbitfield uiBufferBits;
\r
309 extern int iUseMask;
\r
310 extern int iSetMask;
\r
311 extern int iDepthFunc;
\r
312 extern BOOL bCheckMask;
\r
313 extern unsigned short sSetMask;
\r
314 extern unsigned long lSetMask;
\r
315 extern BOOL bSetClip;
\r
316 extern GLuint gTexScanName;
\r
320 //-----------------------------------------------------//
\r
324 extern long GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;
\r
325 extern long GlobalTextREST,GlobalTextABR,GlobalTextPAGE;
\r
326 extern short ly0,lx0,ly1,lx1,ly2,lx2,ly3,lx3;
\r
330 extern short DrawSemiTrans;
\r
334 //-----------------------------------------------------//
\r
336 #ifndef _IN_PRIMDRAW
\r
338 extern BOOL bNeedUploadTest;
\r
339 extern BOOL bNeedUploadAfter;
\r
340 extern BOOL bTexEnabled;
\r
341 extern BOOL bBlendEnable;
\r
342 extern BOOL bDrawDither;
\r
343 extern int iFilterType;
\r
344 extern BOOL bFullVRam;
\r
345 extern BOOL bUseMultiPass;
\r
346 extern int iOffscreenDrawing;
\r
347 extern BOOL bOldSmoothShaded;
\r
348 extern BOOL bUsingTWin;
\r
349 extern BOOL bUsingMovie;
\r
350 extern PSXRect_t xrMovieArea;
\r
351 extern PSXRect_t xrUploadArea;
\r
352 extern PSXRect_t xrUploadAreaIL;
\r
353 extern PSXRect_t xrUploadAreaRGB24;
\r
354 extern GLuint gTexName;
\r
355 extern BOOL bDrawNonShaded;
\r
356 extern BOOL bDrawMultiPass;
\r
357 extern GLubyte ubGloColAlpha;
\r
358 extern GLubyte ubGloAlpha;
\r
359 extern short sSprite_ux2;
\r
360 extern short sSprite_vy2;
\r
361 extern BOOL bRenderFrontBuffer;
\r
362 extern unsigned long ulOLDCOL;
\r
363 extern unsigned long ulClutID;
\r
364 extern void (*primTableJ[256])(u8 *);
\r
365 extern void (*primTableSkip[256])(u8 *);
\r
366 extern unsigned short usMirror;
\r
367 extern unsigned long dwCfgFixes;
\r
368 extern unsigned long dwActFixes;
\r
369 extern unsigned long dwEmuFixes;
\r
370 extern BOOL bUseFixes;
\r
371 extern int iSpriteTex;
\r
372 extern int iDrawnSomething;
\r
378 extern short sxmin;
\r
379 extern short sxmax;
\r
380 extern short symin;
\r
381 extern short symax;
\r
385 //-----------------------------------------------------//
\r
387 #ifndef _IN_TEXTURE
\r
389 extern u8 ubOpaqueDraw;
\r
390 extern GLint giWantedRGBA;
\r
391 extern GLint giWantedFMT;
\r
392 extern GLint giWantedTYPE;
\r
393 extern void (*LoadSubTexFn) (int,int,short,short);
\r
394 extern long GlobalTexturePage;
\r
395 extern unsigned long (*TCF[]) (unsigned long);
\r
396 extern unsigned short (*PTCF[]) (unsigned short);
\r
397 extern unsigned long (*PalTexturedColourFn) (unsigned long);
\r
398 extern BOOL bUseFastMdec;
\r
399 extern BOOL bUse15bitMdec;
\r
400 extern int iFrameTexType;
\r
401 extern int iFrameReadType;
\r
402 extern int iClampType;
\r
403 extern int iSortTexCnt;
\r
404 extern BOOL bFakeFrontBuffer;
\r
405 extern GLuint gTexFrameName;
\r
406 extern GLuint gTexBlurName;
\r
407 extern int iVRamSize;
\r
408 extern int iTexGarbageCollection;
\r
411 extern BOOL bIgnoreNextTile;
\r
416 //-----------------------------------------------------//
\r
420 extern VRAMLoad_t VRAMWrite;
\r
421 extern VRAMLoad_t VRAMRead;
\r
422 extern int iDataWriteMode;
\r
423 extern int iDataReadMode;
\r
424 extern int iColDepth;
\r
425 extern BOOL bChangeRes;
\r
426 extern BOOL bWindowMode;
\r
427 extern s8 szDispBuf[];
\r
428 extern s8 szGPUKeys[];
\r
429 extern PSXDisplay_t PSXDisplay;
\r
430 extern PSXDisplay_t PreviousPSXDisplay;
\r
431 //extern unsigned long ulKeybits;
\r
432 extern TWin_t TWin;
\r
433 extern BOOL bDisplayNotSet;
\r
434 extern long lGPUstatusRet;
\r
435 extern short imageX0,imageX1;
\r
436 extern short imageY0,imageY1;
\r
437 extern long lClearOnSwap,lClearOnSwapColor;
\r
438 extern u8 * psxVub;
\r
439 extern s8 * psxVsb;
\r
440 extern unsigned short * psxVuw;
\r
441 extern signed short * psxVsw;
\r
442 extern unsigned long * psxVul;
\r
443 extern signed long * psxVsl;
\r
444 extern GLfloat gl_z;
\r
445 extern BOOL bNeedRGB24Update;
\r
446 extern BOOL bChangeWinMode;
\r
447 extern GLuint uiScanLine;
\r
448 extern int iUseScanLines;
\r
449 extern long lSelectedSlot;
\r
450 extern int iScanBlend;
\r
451 extern BOOL bInitCap;
\r
452 extern int iBlurBuffer;
\r
453 extern int iLastRGB24;
\r
454 extern int iRenderFVR;
\r
455 extern int iNoScreenSaver;
\r
456 extern unsigned long ulGPUInfoVals[];
\r
457 extern BOOL bNeedInterlaceUpdate;
\r
458 extern BOOL bNeedWriteUpload;
\r
459 extern BOOL bSkipNextFrame;
\r
463 extern int bFullScreen;
\r
468 //-----------------------------------------------------//
\r
472 //extern unsigned long dwCoreFlags;
\r
473 extern GLuint gTexPicName;
\r
474 //extern PSXPoint_t ptCursorPoint[];
\r
475 //extern unsigned short usCursorActive;
\r
479 //-----------------------------------------------------//
\r
484 extern s8 * pConfigFile;
\r
489 //-----------------------------------------------------//
\r
493 extern BOOL bUseFrameLimit;
\r
494 extern BOOL bUseFrameSkip;
\r
495 extern float fFrameRate;
\r
496 extern float fFrameRateHz;
\r
497 extern int iFrameLimit;
\r
498 extern float fps_skip;
\r
499 extern float fps_cur;
\r
503 //-----------------------------------------------------//
\r
550 //extern unsigned long ulKeybits;
\r
554 //-----------------------------------------------------//
\r
558 extern unsigned long dwGPUVersion;
\r
559 extern int iGPUHeight;
\r
560 extern int iGPUHeightMask;
\r
561 extern int GlobalTextIL;
\r
562 extern int iTileCheat;
\r
573 //-----------------------------------------------------//
\r