ce879073 |
1 | /***************************************************************************\r |
2 | external.h - description\r |
3 | -------------------\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 |
8 | \r |
9 | /***************************************************************************\r |
10 | * *\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 |
16 | * *\r |
17 | ***************************************************************************/\r |
18 | \r |
19 | //*************************************************************************// \r |
20 | // History of changes:\r |
21 | //\r |
22 | // 2009/03/08 - Pete \r |
23 | // - generic cleanup for the Peops release\r |
24 | //\r |
25 | //*************************************************************************// \r |
26 | \r |
27 | /////////////////////////////////////////////////////////////////////////////\r |
28 | \r |
29 | #ifndef __GPU_EX__\r |
30 | #define __GPU_EX__\r |
31 | \r |
32 | #ifdef __cplusplus\r |
33 | extern "C" {\r |
34 | #endif\r |
35 | #define _GPU_API_\r |
36 | #ifndef _WINDOWS\r |
37 | #ifdef __NANOGL__\r |
38 | #include <gl/gl.h>\r |
39 | #include <gl/egl.h>\r |
40 | #else\r |
41 | #ifdef SOFT_LINKAGE\r |
42 | #pragma softfp_linkage\r |
43 | #endif\r |
44 | #include <gles/gl.h> // for opengl es types \r |
45 | #ifdef SOFT_LINKAGE\r |
46 | #pragma no_softfp_linkage\r |
47 | #endif\r |
48 | #endif\r |
49 | #endif\r |
50 | \r |
51 | #ifdef MAEMO_CHANGES\r |
52 | #include "../psxCommon.h"\r |
53 | #else\r |
54 | #include "psxCommon.h"\r |
55 | #endif\r |
56 | \r |
57 | #ifdef __NANOGL__\r |
58 | #define glTexParameteri(x,y,z) glTexParameterf(x,y,z) \r |
59 | #define glAlphaFuncx(x,y) glAlphaFunc(x,y) \r |
60 | #ifndef APIENTRY\r |
61 | #define APIENTRY\r |
62 | #endif\r |
63 | extern void ( APIENTRY * glPixelStorei )(GLenum pname, GLint param);\r |
64 | #endif\r |
65 | \r |
66 | \r |
67 | #define MIRROR_TEST 1\r |
68 | \r |
69 | /////////////////////////////////////////////////////////////////////////////\r |
70 | \r |
71 | #define SCISSOR_TEST 1\r |
72 | \r |
73 | /////////////////////////////////////////////////////////////////////////////\r |
74 | \r |
75 | // for own sow/tow scaling\r |
76 | #define OWNSCALE 1\r |
77 | \r |
78 | /////////////////////////////////////////////////////////////////////////////\r |
79 | \r |
80 | #define CLUTUSED 0x80000000\r |
81 | //glColor4ubv(x.c.col)\r |
82 | #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 |
83 | //#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 |
84 | \r |
85 | #define INFO_TW 0\r |
86 | #define INFO_DRAWSTART 1\r |
87 | #define INFO_DRAWEND 2\r |
88 | #define INFO_DRAWOFF 3\r |
89 | \r |
90 | #define SIGNSHIFT 21\r |
91 | #define CHKMAX_X 1024\r |
92 | #define CHKMAX_Y 512\r |
93 | \r |
94 | /////////////////////////////////////////////////////////////////////////////\r |
95 | \r |
96 | // GPU STATUS REGISTER bit values (c) Lewpy\r |
97 | \r |
98 | #define DR_NORMAL 0\r |
99 | #define DR_VRAMTRANSFER 1\r |
100 | \r |
101 | #define GPUSTATUS_ODDLINES 0x80000000\r |
102 | #define GPUSTATUS_DMABITS 0x60000000 // Two bits\r |
103 | #define GPUSTATUS_READYFORCOMMANDS 0x10000000\r |
104 | #define GPUSTATUS_READYFORVRAM 0x08000000\r |
105 | #define GPUSTATUS_IDLE 0x04000000\r |
106 | #define GPUSTATUS_DISPLAYDISABLED 0x00800000\r |
107 | #define GPUSTATUS_INTERLACED 0x00400000\r |
108 | #define GPUSTATUS_RGB24 0x00200000\r |
109 | #define GPUSTATUS_PAL 0x00100000\r |
110 | #define GPUSTATUS_DOUBLEHEIGHT 0x00080000\r |
111 | #define GPUSTATUS_WIDTHBITS 0x00070000 // Three bits\r |
112 | #define GPUSTATUS_MASKENABLED 0x00001000\r |
113 | #define GPUSTATUS_MASKDRAWN 0x00000800\r |
114 | #define GPUSTATUS_DRAWINGALLOWED 0x00000400\r |
115 | #define GPUSTATUS_DITHER 0x00000200\r |
116 | \r |
117 | #define STATUSREG lGPUstatusRet\r |
118 | \r |
119 | #define GPUIsBusy (STATUSREG &= ~GPUSTATUS_IDLE)\r |
120 | #define GPUIsIdle (STATUSREG |= GPUSTATUS_IDLE)\r |
121 | \r |
122 | #define GPUIsNotReadyForCommands (STATUSREG &= ~GPUSTATUS_READYFORCOMMANDS)\r |
123 | #define GPUIsReadyForCommands (STATUSREG |= GPUSTATUS_READYFORCOMMANDS)\r |
124 | \r |
125 | /////////////////////////////////////////////////////////////////////////////\r |
126 | \r |
127 | #define KEY_RESETTEXSTORE 1\r |
128 | #define KEY_SHOWFPS 2\r |
129 | #define KEY_RESETOPAQUE 4\r |
130 | #define KEY_RESETDITHER 8\r |
131 | #define KEY_RESETFILTER 16\r |
132 | #define KEY_RESETADVBLEND 32\r |
133 | #define KEY_BLACKWHITE 64\r |
134 | #define KEY_TOGGLEFBTEXTURE 128\r |
135 | #define KEY_STEPDOWN 256\r |
136 | #define KEY_TOGGLEFBREAD 512\r |
137 | \r |
138 | /////////////////////////////////////////////////////////////////////////////\r |
139 | // Linux is missing some stuff, eh? ;)\r |
140 | \r |
141 | #ifndef _WINDOWS\r |
142 | #ifndef FALSE\r |
143 | #define FALSE 0\r |
144 | #endif\r |
145 | #ifndef TRUE\r |
146 | #define TRUE 1\r |
147 | #endif\r |
148 | #ifndef BOOL\r |
149 | #define BOOL unsigned short\r |
150 | #endif\r |
151 | #ifndef bool\r |
152 | #define bool unsigned short\r |
153 | #endif\r |
154 | #define LOWORD(l) ((unsigned short)(l))\r |
155 | #define HIWORD(l) ((unsigned short)(((unsigned long)(l) >> 16) & 0xFFFF))\r |
156 | #define max(a,b) (((a) > (b)) ? (a) : (b))\r |
157 | #define min(a,b) (((a) < (b)) ? (a) : (b))\r |
158 | #define DWORD unsigned long\r |
159 | \r |
160 | typedef struct RECTTAG\r |
161 | {\r |
162 | int left;\r |
163 | int top;\r |
164 | int right;\r |
165 | int bottom;\r |
166 | }RECT;\r |
167 | \r |
168 | #endif\r |
169 | \r |
170 | /////////////////////////////////////////////////////////////////////////////\r |
171 | \r |
172 | typedef struct VRAMLOADTAG\r |
173 | {\r |
174 | short x;\r |
175 | short y;\r |
176 | short Width;\r |
177 | short Height;\r |
178 | short RowsRemaining;\r |
179 | short ColsRemaining;\r |
180 | unsigned short *ImagePtr;\r |
181 | } VRAMLoad_t;\r |
182 | \r |
183 | typedef struct PSXPOINTTAG\r |
184 | {\r |
185 | long x;\r |
186 | long y;\r |
187 | } PSXPoint_t;\r |
188 | \r |
189 | typedef struct PSXSPOINTTAG\r |
190 | {\r |
191 | short x;\r |
192 | short y;\r |
193 | } PSXSPoint_t;\r |
194 | \r |
195 | typedef struct PSXRECTTAG\r |
196 | {\r |
197 | short x0;\r |
198 | short x1;\r |
199 | short y0;\r |
200 | short y1;\r |
201 | } PSXRect_t;\r |
202 | \r |
203 | /////////////////////////////////////////////////////////////////////////////\r |
204 | \r |
205 | typedef struct TWINTAG\r |
206 | {\r |
207 | PSXRect_t Position;\r |
208 | PSXRect_t OPosition;\r |
209 | PSXPoint_t TextureSize;\r |
210 | float UScaleFactor;\r |
211 | float VScaleFactor;\r |
212 | } TWin_t;\r |
213 | \r |
214 | /////////////////////////////////////////////////////////////////////////////\r |
215 | \r |
216 | typedef struct PSXDISPLAYTAG\r |
217 | {\r |
218 | PSXPoint_t DisplayModeNew;\r |
219 | PSXPoint_t DisplayMode;\r |
220 | PSXPoint_t DisplayPosition;\r |
221 | PSXPoint_t DisplayEnd;\r |
222 | \r |
223 | long Double;\r |
224 | long Height;\r |
225 | long PAL;\r |
226 | long InterlacedNew;\r |
227 | long Interlaced;\r |
228 | long InterlacedTest;\r |
229 | long RGB24New;\r |
230 | long RGB24;\r |
231 | PSXSPoint_t DrawOffset;\r |
232 | PSXRect_t DrawArea;\r |
233 | PSXPoint_t GDrawOffset;\r |
234 | PSXPoint_t CumulOffset;\r |
235 | long Disabled;\r |
236 | PSXRect_t Range;\r |
237 | } PSXDisplay_t;\r |
238 | \r |
239 | /////////////////////////////////////////////////////////////////////////////\r |
240 | \r |
241 | typedef struct OGLVertexTag \r |
242 | {\r |
243 | GLfloat x;\r |
244 | GLfloat y;\r |
245 | GLfloat z;\r |
246 | \r |
247 | GLfloat sow;\r |
248 | GLfloat tow;\r |
249 | \r |
250 | union\r |
251 | COLTAG\r |
252 | {\r |
253 | u8 col[4];\r |
254 | unsigned long lcol;\r |
255 | } c;\r |
256 | \r |
257 | } OGLVertex;\r |
258 | \r |
259 | typedef union EXShortTag\r |
260 | {\r |
261 | u8 c[2];\r |
262 | unsigned short s;\r |
263 | } EXShort;\r |
264 | \r |
265 | typedef union EXLongTag\r |
266 | {\r |
267 | u8 c[4];\r |
268 | unsigned long l;\r |
269 | EXShort s[2];\r |
270 | } EXLong;\r |
271 | \r |
272 | \r |
273 | /////////////////////////////////////////////////////////////////////////////\r |
274 | \r |
275 | #ifdef _WINDOWS\r |
276 | \r |
277 | extern HINSTANCE hInst;\r |
278 | \r |
279 | #endif\r |
280 | \r |
281 | //-----------------------------------------------------//\r |
282 | \r |
283 | #ifndef _IN_DRAW\r |
284 | \r |
285 | extern int iResX;\r |
286 | extern int iResY;\r |
287 | extern BOOL bKeepRatio;\r |
288 | extern RECT rRatioRect;\r |
289 | extern BOOL bOpaquePass;\r |
290 | extern BOOL bAdvancedBlend;\r |
291 | \r |
292 | //extern PFNGLBLENDEQU glBlendEquationEXTEx;\r |
293 | //extern PFNGLCOLORTABLEEXT glColorTableEXTEx;\r |
294 | \r |
295 | extern u8 gl_ux[8];\r |
296 | extern u8 gl_vy[8];\r |
297 | extern OGLVertex vertex[4];\r |
298 | extern short sprtY,sprtX,sprtH,sprtW;\r |
299 | #ifdef _WINDOWS\r |
300 | extern HWND hWWindow;\r |
301 | #endif\r |
302 | extern BOOL bIsFirstFrame;\r |
303 | extern int iWinSize;\r |
304 | extern int iZBufferDepth;\r |
305 | extern GLbitfield uiBufferBits;\r |
306 | extern int iUseMask;\r |
307 | extern int iSetMask;\r |
308 | extern int iDepthFunc;\r |
309 | extern BOOL bCheckMask;\r |
310 | extern unsigned short sSetMask;\r |
311 | extern unsigned long lSetMask;\r |
312 | extern BOOL bSetClip;\r |
313 | extern GLuint gTexScanName;\r |
314 | \r |
315 | #endif\r |
316 | \r |
317 | //-----------------------------------------------------//\r |
318 | \r |
319 | #ifndef _IN_SOFT\r |
320 | \r |
321 | extern long GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;\r |
322 | extern long GlobalTextREST,GlobalTextABR,GlobalTextPAGE;\r |
323 | extern short ly0,lx0,ly1,lx1,ly2,lx2,ly3,lx3;\r |
324 | extern short g_m1;\r |
325 | extern short g_m2;\r |
326 | extern short g_m3;\r |
327 | extern short DrawSemiTrans;\r |
328 | \r |
329 | #endif\r |
330 | \r |
331 | //-----------------------------------------------------//\r |
332 | \r |
333 | #ifndef _IN_PRIMDRAW\r |
334 | \r |
335 | extern BOOL bNeedUploadTest;\r |
336 | extern BOOL bNeedUploadAfter;\r |
337 | extern BOOL bTexEnabled;\r |
338 | extern BOOL bBlendEnable;\r |
339 | extern BOOL bDrawDither;\r |
340 | extern int iFilterType; \r |
341 | extern BOOL bFullVRam;\r |
342 | extern BOOL bUseMultiPass;\r |
343 | extern int iOffscreenDrawing;\r |
344 | extern BOOL bOldSmoothShaded;\r |
345 | extern BOOL bUsingTWin;\r |
346 | extern BOOL bUsingMovie;\r |
347 | extern PSXRect_t xrMovieArea;\r |
348 | extern PSXRect_t xrUploadArea;\r |
349 | extern PSXRect_t xrUploadAreaIL;\r |
350 | extern PSXRect_t xrUploadAreaRGB24;\r |
351 | extern GLuint gTexName;\r |
352 | extern BOOL bDrawNonShaded;\r |
353 | extern BOOL bDrawMultiPass;\r |
354 | extern GLubyte ubGloColAlpha;\r |
355 | extern GLubyte ubGloAlpha;\r |
356 | extern short sSprite_ux2;\r |
357 | extern short sSprite_vy2;\r |
358 | extern BOOL bRenderFrontBuffer;\r |
359 | extern unsigned long ulOLDCOL;\r |
360 | extern unsigned long ulClutID;\r |
361 | extern void (*primTableJ[256])(u8 *);\r |
362 | extern void (*primTableSkip[256])(u8 *);\r |
363 | extern unsigned short usMirror;\r |
364 | extern unsigned long dwCfgFixes;\r |
365 | extern unsigned long dwActFixes;\r |
366 | extern unsigned long dwEmuFixes;\r |
367 | extern BOOL bUseFixes;\r |
368 | extern int iSpriteTex;\r |
369 | extern int iDrawnSomething;\r |
370 | \r |
371 | extern long drawX;\r |
372 | extern long drawY;\r |
373 | extern long drawW;\r |
374 | extern long drawH;\r |
375 | extern short sxmin;\r |
376 | extern short sxmax;\r |
377 | extern short symin;\r |
378 | extern short symax;\r |
379 | \r |
380 | #endif\r |
381 | \r |
382 | //-----------------------------------------------------//\r |
383 | \r |
384 | #ifndef _IN_TEXTURE\r |
385 | \r |
386 | extern u8 ubOpaqueDraw;\r |
387 | extern GLint giWantedRGBA;\r |
388 | extern GLint giWantedFMT;\r |
389 | extern GLint giWantedTYPE;\r |
390 | extern void (*LoadSubTexFn) (int,int,short,short);\r |
391 | extern long GlobalTexturePage;\r |
392 | extern unsigned long (*TCF[]) (unsigned long);\r |
393 | extern unsigned short (*PTCF[]) (unsigned short);\r |
394 | extern unsigned long (*PalTexturedColourFn) (unsigned long);\r |
395 | extern BOOL bUseFastMdec;\r |
396 | extern BOOL bUse15bitMdec;\r |
397 | extern int iFrameTexType;\r |
398 | extern int iFrameReadType;\r |
399 | extern int iClampType;\r |
400 | extern int iSortTexCnt;\r |
401 | extern BOOL bFakeFrontBuffer; \r |
402 | extern GLuint gTexFrameName;\r |
403 | extern GLuint gTexBlurName;\r |
404 | extern int iVRamSize;\r |
405 | extern int iTexGarbageCollection;\r |
406 | extern int iFTexA;\r |
407 | extern int iFTexB;\r |
408 | extern BOOL bIgnoreNextTile;\r |
409 | \r |
410 | \r |
411 | #endif\r |
412 | \r |
413 | //-----------------------------------------------------//\r |
414 | \r |
415 | #ifndef _IN_GPU\r |
416 | \r |
417 | extern VRAMLoad_t VRAMWrite;\r |
418 | extern VRAMLoad_t VRAMRead;\r |
419 | extern int iDataWriteMode;\r |
420 | extern int iDataReadMode;\r |
421 | extern int iColDepth;\r |
422 | extern BOOL bChangeRes;\r |
423 | extern BOOL bWindowMode;\r |
424 | extern s8 szDispBuf[];\r |
425 | extern s8 szGPUKeys[];\r |
426 | extern PSXDisplay_t PSXDisplay;\r |
427 | extern PSXDisplay_t PreviousPSXDisplay;\r |
428 | //extern unsigned long ulKeybits;\r |
429 | extern TWin_t TWin;\r |
430 | extern BOOL bDisplayNotSet;\r |
431 | extern long lGPUstatusRet;\r |
432 | extern short imageX0,imageX1;\r |
433 | extern short imageY0,imageY1;\r |
434 | extern long lClearOnSwap,lClearOnSwapColor;\r |
435 | extern u8 * psxVub;\r |
436 | extern s8 * psxVsb;\r |
437 | extern unsigned short * psxVuw;\r |
438 | extern signed short * psxVsw;\r |
439 | extern unsigned long * psxVul;\r |
440 | extern signed long * psxVsl;\r |
441 | extern GLfloat gl_z;\r |
442 | extern BOOL bNeedRGB24Update;\r |
443 | extern BOOL bChangeWinMode;\r |
444 | extern GLuint uiScanLine;\r |
445 | extern int iUseScanLines;\r |
446 | extern long lSelectedSlot;\r |
447 | extern int iScanBlend;\r |
448 | extern BOOL bInitCap;\r |
449 | extern int iBlurBuffer;\r |
450 | extern int iLastRGB24;\r |
451 | extern int iRenderFVR;\r |
452 | extern int iNoScreenSaver;\r |
453 | extern unsigned long ulGPUInfoVals[];\r |
454 | extern BOOL bNeedInterlaceUpdate;\r |
455 | extern BOOL bNeedWriteUpload;\r |
456 | extern BOOL bSkipNextFrame;\r |
457 | \r |
458 | \r |
459 | #ifndef _WINDOWS\r |
460 | extern int bFullScreen;\r |
461 | #endif\r |
462 | \r |
463 | #endif\r |
464 | \r |
465 | //-----------------------------------------------------//\r |
466 | \r |
467 | #ifndef _IN_MENU\r |
468 | \r |
469 | //extern unsigned long dwCoreFlags;\r |
470 | extern GLuint gTexPicName;\r |
471 | //extern PSXPoint_t ptCursorPoint[];\r |
472 | //extern unsigned short usCursorActive;\r |
473 | \r |
474 | #endif\r |
475 | \r |
476 | //-----------------------------------------------------//\r |
477 | \r |
478 | #ifndef _IN_CFG\r |
479 | \r |
480 | #ifndef _WINDOWS\r |
481 | extern s8 * pConfigFile;\r |
482 | #endif\r |
483 | \r |
484 | #endif\r |
485 | \r |
486 | //-----------------------------------------------------//\r |
487 | \r |
488 | #ifndef _IN_FPS\r |
489 | \r |
490 | extern BOOL bUseFrameLimit;\r |
491 | extern BOOL bUseFrameSkip;\r |
492 | extern float fFrameRate;\r |
493 | extern float fFrameRateHz;\r |
494 | extern int iFrameLimit;\r |
495 | extern float fps_skip;\r |
496 | extern float fps_cur;\r |
497 | \r |
498 | #endif\r |
499 | \r |
500 | //-----------------------------------------------------//\r |
501 | \r |
502 | typedef struct {\r |
503 | u8 r;\r |
504 | u8 g;\r |
505 | u8 b;\r |
506 | u8 a;\r |
507 | } Vec4f;\r |
508 | \r |
509 | /**/\r |
510 | typedef struct {\r |
511 | float x;\r |
512 | float y;\r |
513 | float z;\r |
514 | } Vec3f;\r |
515 | \r |
516 | typedef struct {\r |
517 | float x;\r |
518 | float y;\r |
519 | } Vec2f;\r |
520 | \r |
521 | /*\r |
522 | typedef struct {\r |
523 | int x;\r |
524 | int y;\r |
525 | int z;\r |
526 | } Vec3f;\r |
527 | \r |
528 | typedef struct {\r |
529 | int x;\r |
530 | int y;\r |
531 | } Vec2f;\r |
532 | /**/\r |
533 | \r |
534 | typedef struct {\r |
535 | Vec3f xyz;\r |
536 | Vec2f st;\r |
537 | } Vertex;\r |
538 | \r |
539 | typedef struct {\r |
540 | Vec3f xyz;\r |
541 | Vec2f st;\r |
542 | Vec4f rgba;\r |
543 | } Vertex2;\r |
544 | \r |
545 | #ifndef _IN_KEY\r |
546 | \r |
547 | //extern unsigned long ulKeybits;\r |
548 | \r |
549 | #endif\r |
550 | \r |
551 | //-----------------------------------------------------//\r |
552 | \r |
553 | #ifndef _IN_ZN\r |
554 | \r |
555 | extern unsigned long dwGPUVersion;\r |
556 | extern int iGPUHeight;\r |
557 | extern int iGPUHeightMask;\r |
558 | extern int GlobalTextIL;\r |
559 | extern int iTileCheat;\r |
560 | \r |
561 | #endif\r |
562 | \r |
563 | #ifdef __cplusplus\r |
564 | }\r |
565 | #endif\r |
566 | \r |
567 | \r |
568 | #endif\r |
569 | \r |
570 | //-----------------------------------------------------//\r |