mirror of
https://github.com/izzy2lost/PSX1.git
synced 2026-03-26 16:38:52 -07:00
5fa6cb1729
No idea if there is any point touching this code but the warnings were annoying.
566 lines
14 KiB
C
566 lines
14 KiB
C
/***************************************************************************
|
|
external.h - description
|
|
-------------------
|
|
begin : Sun Mar 08 2009
|
|
copyright : (C) 1999-2009 by Pete Bernert
|
|
web : www.pbernert.com
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* 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 *
|
|
* (at your option) any later version. See also the license.txt file for *
|
|
* additional informations. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
//*************************************************************************//
|
|
// History of changes:
|
|
//
|
|
// 2009/03/08 - Pete
|
|
// - generic cleanup for the Peops release
|
|
//
|
|
//*************************************************************************//
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef __GPU_EX__
|
|
#define __GPU_EX__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifdef __NANOGL__
|
|
#include <gl/gl.h>
|
|
#include <gl/egl.h>
|
|
#else
|
|
#include <GLES/gl.h>
|
|
#include <GLES/glext.h>
|
|
#endif
|
|
|
|
#ifndef GL_BGRA_EXT
|
|
#define GL_BGRA_EXT GL_RGBA // ??
|
|
#endif
|
|
|
|
#ifdef __NANOGL__
|
|
#define glTexParameteri(x,y,z) glTexParameterf(x,y,z)
|
|
#define glAlphaFuncx(x,y) glAlphaFunc(x,y)
|
|
#ifndef APIENTRY
|
|
#define APIENTRY
|
|
#endif
|
|
extern void ( APIENTRY * glPixelStorei )(GLenum pname, GLint param);
|
|
#endif
|
|
|
|
|
|
#define MIRROR_TEST 1
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define SCISSOR_TEST 1
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// for own sow/tow scaling
|
|
#define OWNSCALE 1
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define CLUTUSED 0x80000000
|
|
//glColor4ubv(x.c.col)
|
|
#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]);}
|
|
//#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]);}
|
|
|
|
#define INFO_TW 0
|
|
#define INFO_DRAWSTART 1
|
|
#define INFO_DRAWEND 2
|
|
#define INFO_DRAWOFF 3
|
|
|
|
#define SIGNSHIFT 21
|
|
#define CHKMAX_X 1024
|
|
#define CHKMAX_Y 512
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// GPU STATUS REGISTER bit values (c) Lewpy
|
|
|
|
#define DR_NORMAL 0
|
|
#define DR_VRAMTRANSFER 1
|
|
|
|
#define GPUSTATUS_ODDLINES 0x80000000
|
|
#define GPUSTATUS_DMABITS 0x60000000 // Two bits
|
|
#define GPUSTATUS_READYFORCOMMANDS 0x10000000
|
|
#define GPUSTATUS_READYFORVRAM 0x08000000
|
|
#define GPUSTATUS_IDLE 0x04000000
|
|
#define GPUSTATUS_DISPLAYDISABLED 0x00800000
|
|
#define GPUSTATUS_INTERLACED 0x00400000
|
|
#define GPUSTATUS_RGB24 0x00200000
|
|
#define GPUSTATUS_PAL 0x00100000
|
|
#define GPUSTATUS_DOUBLEHEIGHT 0x00080000
|
|
#define GPUSTATUS_WIDTHBITS 0x00070000 // Three bits
|
|
#define GPUSTATUS_MASKENABLED 0x00001000
|
|
#define GPUSTATUS_MASKDRAWN 0x00000800
|
|
#define GPUSTATUS_DRAWINGALLOWED 0x00000400
|
|
#define GPUSTATUS_DITHER 0x00000200
|
|
|
|
#define STATUSREG lGPUstatusRet
|
|
|
|
#define GPUIsBusy (STATUSREG &= ~GPUSTATUS_IDLE)
|
|
#define GPUIsIdle (STATUSREG |= GPUSTATUS_IDLE)
|
|
|
|
#define GPUIsNotReadyForCommands (STATUSREG &= ~GPUSTATUS_READYFORCOMMANDS)
|
|
#define GPUIsReadyForCommands (STATUSREG |= GPUSTATUS_READYFORCOMMANDS)
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define KEY_RESETTEXSTORE 1
|
|
#define KEY_SHOWFPS 2
|
|
#define KEY_RESETOPAQUE 4
|
|
#define KEY_RESETDITHER 8
|
|
#define KEY_RESETFILTER 16
|
|
#define KEY_RESETADVBLEND 32
|
|
#define KEY_BLACKWHITE 64
|
|
#define KEY_TOGGLEFBTEXTURE 128
|
|
#define KEY_STEPDOWN 256
|
|
#define KEY_TOGGLEFBREAD 512
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Linux is missing some stuff, eh? ;)
|
|
|
|
#ifndef _WINDOWS
|
|
#ifndef FALSE
|
|
#define FALSE 0
|
|
#endif
|
|
#ifndef TRUE
|
|
#define TRUE 1
|
|
#endif
|
|
#ifndef BOOL
|
|
#define BOOL unsigned short
|
|
#endif
|
|
#ifndef bool
|
|
#define bool unsigned short
|
|
#endif
|
|
#define LOWORD(l) ((unsigned short)(l))
|
|
#define HIWORD(l) ((unsigned short)(((unsigned int)(l) >> 16) & 0xFFFF))
|
|
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
|
#define min(a,b) (((a) < (b)) ? (a) : (b))
|
|
#define DWORD unsigned int
|
|
|
|
typedef struct RECTTAG
|
|
{
|
|
int left;
|
|
int top;
|
|
int right;
|
|
int bottom;
|
|
}RECT;
|
|
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef struct VRAMLOADTAG
|
|
{
|
|
short x;
|
|
short y;
|
|
short Width;
|
|
short Height;
|
|
short RowsRemaining;
|
|
short ColsRemaining;
|
|
unsigned short *ImagePtr;
|
|
} VRAMLoad_t;
|
|
|
|
typedef struct PSXPOINTTAG
|
|
{
|
|
int x;
|
|
int y;
|
|
} PSXPoint_t;
|
|
|
|
typedef struct PSXSPOINTTAG
|
|
{
|
|
short x;
|
|
short y;
|
|
} PSXSPoint_t;
|
|
|
|
typedef struct PSXRECTTAG
|
|
{
|
|
short x0;
|
|
short x1;
|
|
short y0;
|
|
short y1;
|
|
} PSXRect_t;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef struct TWINTAG
|
|
{
|
|
PSXRect_t Position;
|
|
PSXRect_t OPosition;
|
|
PSXPoint_t TextureSize;
|
|
float UScaleFactor;
|
|
float VScaleFactor;
|
|
} TWin_t;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef struct PSXDISPLAYTAG
|
|
{
|
|
PSXPoint_t DisplayModeNew;
|
|
PSXPoint_t DisplayMode;
|
|
PSXPoint_t DisplayPosition;
|
|
PSXPoint_t DisplayEnd;
|
|
|
|
int Double;
|
|
int Height;
|
|
int PAL;
|
|
int InterlacedNew;
|
|
int Interlaced;
|
|
int InterlacedTest;
|
|
int RGB24New;
|
|
int RGB24;
|
|
PSXSPoint_t DrawOffset;
|
|
PSXRect_t DrawArea;
|
|
PSXPoint_t GDrawOffset;
|
|
PSXPoint_t CumulOffset;
|
|
int Disabled;
|
|
PSXRect_t Range;
|
|
} PSXDisplay_t;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef struct OGLVertexTag
|
|
{
|
|
GLfloat x;
|
|
GLfloat y;
|
|
GLfloat z;
|
|
|
|
GLfloat sow;
|
|
GLfloat tow;
|
|
|
|
union
|
|
COLTAG
|
|
{
|
|
unsigned char col[4];
|
|
unsigned int lcol;
|
|
} c;
|
|
|
|
} OGLVertex;
|
|
|
|
typedef union EXShortTag
|
|
{
|
|
unsigned char c[2];
|
|
unsigned short s;
|
|
} EXShort;
|
|
|
|
typedef union EXLongTag
|
|
{
|
|
unsigned char c[4];
|
|
unsigned int l;
|
|
EXShort s[2];
|
|
} EXLong;
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifdef _WINDOWS
|
|
|
|
extern HINSTANCE hInst;
|
|
|
|
#endif
|
|
|
|
//-----------------------------------------------------//
|
|
|
|
#ifndef _IN_DRAW
|
|
|
|
extern int iResX;
|
|
extern int iResY;
|
|
extern BOOL bKeepRatio;
|
|
extern RECT rRatioRect;
|
|
extern BOOL bOpaquePass;
|
|
extern BOOL bAdvancedBlend;
|
|
|
|
//extern PFNGLBLENDEQU glBlendEquationEXTEx;
|
|
//extern PFNGLCOLORTABLEEXT glColorTableEXTEx;
|
|
|
|
extern unsigned char gl_ux[8];
|
|
extern unsigned char gl_vy[8];
|
|
extern OGLVertex vertex[4];
|
|
extern short sprtY,sprtX,sprtH,sprtW;
|
|
#ifdef _WINDOWS
|
|
//extern HWND hWWindow;
|
|
#endif
|
|
extern BOOL bIsFirstFrame;
|
|
extern int iWinSize;
|
|
extern int iZBufferDepth;
|
|
extern GLbitfield uiBufferBits;
|
|
extern int iUseMask;
|
|
extern int iSetMask;
|
|
extern int iDepthFunc;
|
|
extern BOOL bCheckMask;
|
|
extern unsigned short sSetMask;
|
|
extern unsigned int lSetMask;
|
|
extern BOOL bSetClip;
|
|
extern GLuint gTexScanName;
|
|
|
|
#endif
|
|
|
|
//-----------------------------------------------------//
|
|
|
|
#ifndef _IN_SOFT
|
|
|
|
extern int GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;
|
|
extern int GlobalTextREST,GlobalTextABR,GlobalTextPAGE;
|
|
extern short ly0,lx0,ly1,lx1,ly2,lx2,ly3,lx3;
|
|
extern short g_m1;
|
|
extern short g_m2;
|
|
extern short g_m3;
|
|
extern short DrawSemiTrans;
|
|
|
|
#endif
|
|
|
|
//-----------------------------------------------------//
|
|
|
|
#ifndef _IN_PRIMDRAW
|
|
|
|
extern BOOL bNeedUploadTest;
|
|
extern BOOL bNeedUploadAfter;
|
|
extern BOOL bTexEnabled;
|
|
extern BOOL bBlendEnable;
|
|
extern BOOL bDrawDither;
|
|
extern int iFilterType;
|
|
extern BOOL bFullVRam;
|
|
extern BOOL bUseMultiPass;
|
|
extern int iOffscreenDrawing;
|
|
extern BOOL bOldSmoothShaded;
|
|
extern BOOL bUsingTWin;
|
|
extern BOOL bUsingMovie;
|
|
extern PSXRect_t xrMovieArea;
|
|
extern PSXRect_t xrUploadArea;
|
|
extern PSXRect_t xrUploadAreaIL;
|
|
extern PSXRect_t xrUploadAreaRGB24;
|
|
extern GLuint gTexName;
|
|
extern BOOL bDrawNonShaded;
|
|
extern BOOL bDrawMultiPass;
|
|
extern GLubyte ubGloColAlpha;
|
|
extern GLubyte ubGloAlpha;
|
|
extern short sSprite_ux2;
|
|
extern short sSprite_vy2;
|
|
extern BOOL bRenderFrontBuffer;
|
|
extern unsigned int ulOLDCOL;
|
|
extern unsigned int ulClutID;
|
|
extern void (*primTableJ[256])(unsigned char *);
|
|
extern void (*primTableSkip[256])(unsigned char *);
|
|
extern unsigned short usMirror;
|
|
extern unsigned int dwCfgFixes;
|
|
extern unsigned int dwActFixes;
|
|
extern unsigned int dwEmuFixes;
|
|
extern BOOL bUseFixes;
|
|
extern int iSpriteTex;
|
|
extern int iDrawnSomething;
|
|
|
|
extern int drawX;
|
|
extern int drawY;
|
|
extern int drawW;
|
|
extern int drawH;
|
|
extern short sxmin;
|
|
extern short sxmax;
|
|
extern short symin;
|
|
extern short symax;
|
|
|
|
extern unsigned int CSVERTEX;
|
|
extern unsigned int CSCOLOR;
|
|
extern unsigned int CSTEXTURE;
|
|
|
|
#endif
|
|
|
|
//-----------------------------------------------------//
|
|
|
|
#ifndef _IN_TEXTURE
|
|
|
|
extern unsigned char ubOpaqueDraw;
|
|
extern GLint giWantedRGBA;
|
|
extern GLint giWantedFMT;
|
|
extern GLint giWantedTYPE;
|
|
extern void (*LoadSubTexFn) (int,int,short,short);
|
|
extern int GlobalTexturePage;
|
|
extern unsigned int (*TCF[]) (unsigned int );
|
|
extern unsigned short (*PTCF[]) (unsigned short);
|
|
extern unsigned int (*PalTexturedColourFn) (unsigned int);
|
|
extern BOOL bUseFastMdec;
|
|
extern BOOL bUse15bitMdec;
|
|
extern int iFrameTexType;
|
|
extern int iFrameReadType;
|
|
extern int iClampType;
|
|
extern int iSortTexCnt;
|
|
extern BOOL bFakeFrontBuffer;
|
|
extern GLuint gTexFrameName;
|
|
extern GLuint gTexBlurName;
|
|
extern int iVRamSize;
|
|
extern int iTexGarbageCollection;
|
|
extern int iFTexA;
|
|
extern int iFTexB;
|
|
extern BOOL bIgnoreNextTile;
|
|
|
|
|
|
#endif
|
|
|
|
//-----------------------------------------------------//
|
|
|
|
#ifndef _IN_GPU
|
|
|
|
extern VRAMLoad_t VRAMWrite;
|
|
extern VRAMLoad_t VRAMRead;
|
|
extern int iDataWriteMode;
|
|
extern int iDataReadMode;
|
|
extern int iColDepth;
|
|
extern BOOL bChangeRes;
|
|
extern BOOL bWindowMode;
|
|
extern char szDispBuf[];
|
|
extern char szGPUKeys[];
|
|
extern PSXDisplay_t PSXDisplay;
|
|
extern PSXDisplay_t PreviousPSXDisplay;
|
|
//extern unsigned int ulKeybits;
|
|
extern TWin_t TWin;
|
|
extern BOOL bDisplayNotSet;
|
|
extern int lGPUstatusRet;
|
|
extern short imageX0,imageX1;
|
|
extern short imageY0,imageY1;
|
|
extern int lClearOnSwap,lClearOnSwapColor;
|
|
extern unsigned char * psxVub;
|
|
extern char * psxVsb;
|
|
extern unsigned short * psxVuw;
|
|
extern signed short * psxVsw;
|
|
extern unsigned int * psxVul;
|
|
extern signed int * psxVsl;
|
|
extern GLfloat gl_z;
|
|
extern BOOL bNeedRGB24Update;
|
|
extern BOOL bChangeWinMode;
|
|
extern GLuint uiScanLine;
|
|
extern int iUseScanLines;
|
|
extern int lSelectedSlot;
|
|
extern int iScanBlend;
|
|
extern BOOL bInitCap;
|
|
extern int iBlurBuffer;
|
|
extern int iLastRGB24;
|
|
extern int iRenderFVR;
|
|
extern int iNoScreenSaver;
|
|
extern unsigned int ulGPUInfoVals[];
|
|
extern BOOL bNeedInterlaceUpdate;
|
|
extern BOOL bNeedWriteUpload;
|
|
extern BOOL bSkipNextFrame;
|
|
|
|
|
|
#ifndef _WINDOWS
|
|
extern int bFullScreen;
|
|
#endif
|
|
|
|
#endif
|
|
|
|
//-----------------------------------------------------//
|
|
|
|
#ifndef _IN_MENU
|
|
|
|
//extern unsigned int dwCoreFlags;
|
|
extern GLuint gTexPicName;
|
|
//extern PSXPoint_t ptCursorPoint[];
|
|
//extern unsigned short usCursorActive;
|
|
|
|
#endif
|
|
|
|
//-----------------------------------------------------//
|
|
|
|
#ifndef _IN_CFG
|
|
|
|
#ifndef _WINDOWS
|
|
extern char * pConfigFile;
|
|
#endif
|
|
|
|
#endif
|
|
|
|
//-----------------------------------------------------//
|
|
|
|
#ifndef _IN_FPS
|
|
|
|
extern BOOL bUseFrameLimit;
|
|
extern BOOL bUseFrameSkip;
|
|
extern float fFrameRate;
|
|
extern float fFrameRateHz;
|
|
extern int iFrameLimit;
|
|
extern float fps_skip;
|
|
extern float fps_cur;
|
|
|
|
#endif
|
|
|
|
//-----------------------------------------------------//
|
|
|
|
typedef struct {
|
|
unsigned char r;
|
|
unsigned char g;
|
|
unsigned char b;
|
|
unsigned char a;
|
|
} Vec4f;
|
|
|
|
/**/
|
|
typedef struct {
|
|
float x;
|
|
float y;
|
|
float z;
|
|
} Vec3f;
|
|
|
|
typedef struct {
|
|
float x;
|
|
float y;
|
|
} Vec2f;
|
|
|
|
/*
|
|
typedef struct {
|
|
int x;
|
|
int y;
|
|
int z;
|
|
} Vec3f;
|
|
|
|
typedef struct {
|
|
int x;
|
|
int y;
|
|
} Vec2f;
|
|
*/
|
|
|
|
typedef struct {
|
|
Vec3f xyz;
|
|
Vec2f st;
|
|
} Vertex;
|
|
|
|
typedef struct {
|
|
Vec3f xyz;
|
|
Vec2f st;
|
|
Vec4f rgba;
|
|
} Vertex2;
|
|
|
|
#ifndef _IN_KEY
|
|
|
|
//extern unsigned int ulKeybits;
|
|
|
|
#endif
|
|
|
|
//-----------------------------------------------------//
|
|
|
|
#ifndef _IN_ZN
|
|
|
|
extern unsigned int dwGPUVersion;
|
|
extern int iGPUHeight;
|
|
extern int iGPUHeightMask;
|
|
extern int GlobalTextIL;
|
|
extern int iTileCheat;
|
|
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif
|
|
|
|
//-----------------------------------------------------//
|