fix gun handling in enhancement mode
[pcsx_rearmed.git] / plugins / gpu-gles / gpuPlugin.c
index d6e6fbb..9d749a5 100644 (file)
 //#include "gpuStdafx.h"\r
 \r
 //#include <mmsystem.h>\r
-\r
 #define _IN_GPU\r
 \r
-#ifdef _WINDOWS\r
-#include "stdafx.h"\r
-#include <stdlib.h>\r
-#include <stdio.h>\r
-#include <stdarg.h>\r
-#include <string.h>\r
-#include <mmsystem.h>\r
-\r
-#include "externals.h"\r
-#include "gpu.h"\r
-#include "draw.h"\r
-#include "prim.h"\r
-#include "texture.h"\r
-#include "fps.h"\r
-#include "resource.h"\r
-#else\r
 #include <stdlib.h>\r
 #include <stdio.h>\r
 #include <stdarg.h>\r
 //#include "NoPic.h"\r
 \r
 #include "gpuStdafx.h"\r
-#endif\r
 \r
-extern void ProcessEvents();\r
-               \r
 short g_m1=255,g_m2=255,g_m3=255;\r
 short DrawSemiTrans=FALSE;\r
 short Ymin;\r
@@ -83,8 +63,8 @@ int           iTileCheat=0;
 // memory image of the PSX vram\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-u8  *psxVSecure;\r
-u8  *psxVub;\r
+unsigned char  *psxVSecure;\r
+unsigned char  *psxVub;\r
 signed   char  *psxVsb;\r
 unsigned short *psxVuw;\r
 unsigned short *psxVuw_eom;\r
@@ -100,10 +80,6 @@ BOOL            bNeedInterlaceUpdate=FALSE;
 BOOL            bNeedRGB24Update=FALSE;\r
 BOOL            bChangeWinMode=FALSE;\r
 \r
-#ifdef _WINDOWS\r
-extern HGLRC    GLCONTEXT;\r
-#endif\r
-\r
 unsigned long   ulStatusControl[256];\r
 \r
 ////////////////////////////////////////////////////////////////////////\r
@@ -112,10 +88,10 @@ unsigned long   ulStatusControl[256];
 \r
 static long     GPUdataRet;\r
 long            lGPUstatusRet;\r
-s8            szDispBuf[64];\r
+char            szDispBuf[64];\r
 \r
 static unsigned long gpuDataM[256];\r
-static u8 gpuCommand = 0;\r
+static unsigned char gpuCommand = 0;\r
 static long          gpuDataC = 0;\r
 static long          gpuDataP = 0;\r
 \r
@@ -144,7 +120,7 @@ BOOL            bDisplayNotSet = TRUE;
 GLuint          uiScanLine=0;\r
 int             iUseScanLines=0;\r
 long            lSelectedSlot=0;\r
-u8 * pGfxCardScreen=0;\r
+unsigned char * pGfxCardScreen=0;\r
 int             iBlurBuffer=0;\r
 int             iScanBlend=0;\r
 int             iRenderFVR=0;\r
@@ -154,27 +130,13 @@ int             iFakePrimBusy = 0;
 int             iRumbleVal    = 0;\r
 int             iRumbleTime   = 0;\r
 \r
+static void (*rearmed_get_layer_pos)(int *x, int *y, int *w, int *h);\r
+static void flipEGL(void);\r
+\r
 ////////////////////////////////////////////////////////////////////////\r
 // stuff to make this a true PDK module\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
-s8 * CALLBACK PSEgetLibName(void)\r
-{\r
- return "name";\r
-}\r
-\r
-unsigned long CALLBACK PSEgetLibType(void)\r
-{\r
- return  1;\r
-}\r
-\r
-unsigned long CALLBACK PSEgetLibVersion(void)\r
-{\r
- return 1<<16|1<<8|1;\r
-}\r
-#endif\r
-\r
 ////////////////////////////////////////////////////////////////////////\r
 // snapshot funcs (saves screen to bitmap / text infos into file)\r
 ////////////////////////////////////////////////////////////////////////\r
@@ -187,10 +149,10 @@ void ResizeWindow()
  glViewport(rRatioRect.left,                           // init viewport by ratio rect\r
             iResY-(rRatioRect.top+rRatioRect.bottom),\r
             rRatioRect.right, \r
-            rRatioRect.bottom);         \r
+            rRatioRect.bottom); glError();\r
                                                       \r
- glScissor(0, 0, iResX, iResY);                        // init clipping (fullscreen)\r
- glEnable(GL_SCISSOR_TEST);                       \r
+ glScissor(0, 0, iResX, iResY); glError();             // init clipping (fullscreen)\r
+ glEnable(GL_SCISSOR_TEST); glError();\r
 \r
 #ifndef OWNSCALE\r
  glMatrixMode(GL_TEXTURE);                             // init psx tex sow and tow if not "ownscale"\r
@@ -198,22 +160,19 @@ void ResizeWindow()
  glScalef(1.0f/255.99f,1.0f/255.99f,1.0f);             // geforce precision hack\r
 #endif \r
 \r
- glMatrixMode(GL_PROJECTION);                          // init projection with psx resolution\r
- glLoadIdentity();\r
+ glMatrixMode(GL_PROJECTION); glError();               // init projection with psx resolution\r
+ glLoadIdentity(); glError();\r
  glOrtho(0,PSXDisplay.DisplayMode.x,\r
-         PSXDisplay.DisplayMode.y, 0, -1, 1);\r
+         PSXDisplay.DisplayMode.y, 0, -1, 1); glError();\r
  if (bKeepRatio)\r
  SetAspectRatio();\r
 }\r
 \r
-s8 * GetConfigInfos(int hW)\r
+char * GetConfigInfos(int hW)\r
 {\r
-#ifdef _WINDOWS\r
- HDC hdc;HGLRC hglrc;\r
-#endif\r
- s8 szO[2][4]={"off","on "};\r
- s8 szTxt[256];\r
- s8 * pB=(s8 *)malloc(32767);\r
+ char szO[2][4]={"off","on "};\r
+ char szTxt[256];\r
+ char * pB=(char *)malloc(32767);\r
 /*\r
  if(!pB) return NULL;\r
  *pB=0;\r
@@ -235,7 +194,7 @@ s8 * GetConfigInfos(int hW)
  strcat(pB,szTxt);\r
  sprintf(szTxt,"OGL version: %s\r\n\r\n",(char *)glGetString(GL_VERSION));\r
  strcat(pB,szTxt);\r
- //strcat(pB,(s8 *)glGetString(GL_EXTENSIONS));\r
+ //strcat(pB,(char *)glGetString(GL_EXTENSIONS));\r
  //strcat(pB,"\r\n\r\n");\r
 \r
 #ifdef _WINDOWS\r
@@ -393,11 +352,7 @@ void DoSnapShot(void)
 {\r
 }       \r
 \r
-#ifdef _WINDOWS\r
 void CALLBACK GPUmakeSnapshot(void)\r
-#else\r
-void CALLBACK GPUmakeSnapshot(void)\r
-#endif\r
 {\r
  //bSnapShot = TRUE;\r
 }        \r
@@ -406,31 +361,17 @@ void CALLBACK GPUmakeSnapshot(void)
 // GPU INIT... here starts it all (first func called by emu)\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
 long CALLBACK GPUinit()\r
-#else\r
-long CALLBACK GPUinit()\r
-#endif\r
 {\r
 memset(ulStatusControl,0,256*sizeof(unsigned long));\r
 \r
-#ifdef _WINDOWS\r
-iResX=240;iResY=320;\r
-#endif\r
 bChangeRes=FALSE;\r
-#ifdef _WINDOWS\r
-bWindowMode=TRUE;\r
-#else\r
 bWindowMode=FALSE;\r
-#endif \r
-#ifdef _WINDOWS\r
-iWinSize=MAKELONG(iResX,iResY);\r
-#endif\r
 \r
 bKeepRatio = TRUE;\r
 // different ways of accessing PSX VRAM\r
 \r
-psxVSecure=(u8 *)malloc((iGPUHeight*2)*1024 + (1024*1024)); // always alloc one extra MB for soft drawing funcs security\r
+psxVSecure=(unsigned char *)malloc((iGPUHeight*2)*1024 + (1024*1024)); // always alloc one extra MB for soft drawing funcs security\r
 if(!psxVSecure) return -1;\r
 \r
 psxVub=psxVSecure+512*1024;                           // security offset into double sized psx vram!\r
@@ -498,33 +439,6 @@ return 0;
 }                             \r
 \r
 \r
-////////////////////////////////////////////////////////////////////////\r
-// GPU OPEN: funcs to open up the gpu display (Windows)\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-#ifdef _WINDOWS\r
-\r
-void ChangeDesktop()                                   // change destop resolution\r
-{\r
- DEVMODE dv;long lRes,iTry=0;                       \r
-\r
- while(iTry<10)                                        // keep on hammering...\r
-  {\r
-   memset(&dv,0,sizeof(DEVMODE));\r
-   dv.dmSize=sizeof(DEVMODE);\r
-   dv.dmBitsPerPel=iColDepth;\r
-   dv.dmPelsWidth=iResX;\r
-   dv.dmPelsHeight=iResY;\r
-\r
-   dv.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;\r
-\r
-   lRes=ChangeDisplaySettings(&dv,0);                  // ...hammering the anvil\r
-\r
-   if(lRes==DISP_CHANGE_SUCCESSFUL) return;\r
-   iTry++;Sleep(10);\r
-  }\r
-}\r
-\r
 ////////////////////////////////////////////////////////////////////////\r
 // OPEN interface func: attention! \r
 // some emus are calling this func in their main Window thread,\r
@@ -539,35 +453,12 @@ void ChangeDesktop()                                   // change destop resoluti
 // some PAD or SPU plugins would not work anymore)\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-HMENU hPSEMenu=NULL;\r
-\r
-long CALLBACK GPUopen(HWND hwndGPU)                    \r
-#else\r
 long CALLBACK GPUopen(int hwndGPU)\r
-#endif\r
 {\r
-       #ifdef _WINDOWS\r
-       HDC hdc;RECT r;DEVMODE dv;\r
-\r
-        hWWindow = hwndGPU;                                   // store hwnd globally\r
-       #endif\r
-       // InitKeyHandler();                                     // init key handler (subclass window)\r
-\r
-\r
-\r
-       #ifdef _WINDOWS\r
-        iResX=240;iResY=320;\r
-       #endif\r
-#ifdef MAEMO_CHANGES\r
-         iResX=640;iResY=480;\r
-#endif\r
+        iResX=800;iResY=480;\r
         iColDepth=8;\r
         bChangeRes=FALSE;\r
-       #ifdef _WINDOWS\r
-        bWindowMode=TRUE;\r
-       #else\r
         bWindowMode=FALSE;\r
-       #endif \r
         bFullVRam=FALSE;\r
         iFilterType=0;\r
        // bAdvancedBlend=FALSE;\r
@@ -581,9 +472,6 @@ long CALLBACK GPUopen(int hwndGPU)
         //bOpaquePass=FALSE;\r
         //bUseAntiAlias=FALSE;\r
         //iTexQuality=0;\r
-       #ifdef _WINDOWS\r
-        iWinSize=MAKELONG(iResX,iResY);\r
-       #endif\r
         iUseMask=0;\r
         iZBufferDepth=0;\r
         bUseFastMdec=FALSE;\r
@@ -605,65 +493,12 @@ long CALLBACK GPUopen(int hwndGPU)
 \r
 \r
 \r
-#ifdef _WINDOWS\r
- memset(&dv,0,sizeof(DEVMODE));\r
- dv.dmSize=sizeof(DEVMODE);\r
- EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&dv);\r
-#endif\r
  bIsFirstFrame = TRUE;                                 // flag: we have to init OGL later in windows!\r
 \r
-#ifdef _WINDOWS\r
- if(bWindowMode)                                       // win mode?\r
-  {\r
-   DWORD dw=GetWindowLong(hWWindow, GWL_STYLE);        // -> adjust wnd style (owndc needed by some stupid ogl drivers)\r
-   dw&=~WS_THICKFRAME;\r
-   dw|=WS_BORDER|WS_CAPTION|CS_OWNDC;\r
-   SetWindowLong(hWWindow, GWL_STYLE, dw);\r
-\r
-   hPSEMenu=GetMenu(hWWindow);                         // -> hide emu menu (if any)\r
-   if(hPSEMenu!=NULL) SetMenu(hWWindow,NULL);\r
-\r
-   iResX=LOWORD(iWinSize);iResY=HIWORD(iWinSize);\r
-   ShowWindow(hWWindow,SW_SHOWNORMAL);\r
-\r
-   MoveWindow(hWWindow,                                // -> center wnd\r
-      GetSystemMetrics(SM_CXFULLSCREEN)/2-iResX/2,\r
-      GetSystemMetrics(SM_CYFULLSCREEN)/2-iResY/2,\r
-      iResX+GetSystemMetrics(SM_CXFIXEDFRAME)+3,\r
-      iResY+GetSystemMetrics(SM_CYFIXEDFRAME)+GetSystemMetrics(SM_CYCAPTION)+3,\r
-      TRUE);\r
-   UpdateWindow(hWWindow);                             // -> let windows do some update\r
-\r
-   if(dv.dmBitsPerPel==16 || dv.dmBitsPerPel==32)      // -> overwrite user color info with desktop color info\r
-    iColDepth=dv.dmBitsPerPel;\r
-  }\r
- else                                                  // fullscreen mode:\r
-  {\r
-   if(dv.dmBitsPerPel!=(unsigned int)iColDepth ||      // -> check, if we have to change resolution\r
-      dv.dmPelsWidth !=(unsigned int)iResX ||\r
-      dv.dmPelsHeight!=(unsigned int)iResY)\r
-    bChangeRes=TRUE; else bChangeRes=FALSE;\r
-\r
-   if(bChangeRes) ChangeDesktop();                     // -> change the res (had to do an own func because of some MS 'optimizations')\r
-\r
-   SetWindowLong(hWWindow, GWL_STYLE, CS_OWNDC);       // -> adjust wnd style as well (to be sure)\r
-                \r
-   hPSEMenu=GetMenu(hWWindow);                         // -> hide menu\r
-   if(hPSEMenu!=NULL) SetMenu(hWWindow,NULL);\r
-   ShowWindow(hWWindow,SW_SHOWMAXIMIZED);              // -> max mode\r
-  }\r
-#endif\r
  rRatioRect.left   = rRatioRect.top=0;\r
  rRatioRect.right  = iResX;\r
  rRatioRect.bottom = iResY;\r
 \r
-#ifdef _WINDOWS\r
- r.left=r.top=0;r.right=iResX;r.bottom=iResY;          // hack for getting a clean black window until OGL gets initialized\r
- hdc = GetDC(hWWindow);\r
- FillRect(hdc,&r,(HBRUSH)GetStockObject(BLACK_BRUSH));\r
- bSetupPixelFormat(hdc);\r
- ReleaseDC(hWWindow,hdc);\r
-#endif\r
  bDisplayNotSet = TRUE; \r
  bSetClip=TRUE;\r
 \r
@@ -671,10 +506,12 @@ long CALLBACK GPUopen(int hwndGPU)
 \r
  InitializeTextureStore();                             // init texture mem\r
 \r
+ CSTEXTURE = CSVERTEX = CSCOLOR = 0;\r
+\r
 // lGPUstatusRet = 0x74000000;\r
 \r
 // with some emus, we could do the OGL init right here... oh my\r
-// if(bIsFirstFrame) GLinitialize();\r
+ if(bIsFirstFrame) GLinitialize();\r
 \r
  return 0;\r
 }\r
@@ -683,28 +520,6 @@ long CALLBACK GPUopen(int hwndGPU)
 // close\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
-long CALLBACK GPUclose()                               // WINDOWS CLOSE\r
-{\r
-// ExitKeyHandler();\r
-\r
- GLcleanup();                                          // close OGL\r
-\r
- if(bChangeRes)                                        // change res back\r
-  ChangeDisplaySettings(NULL,0);\r
-\r
- if(hPSEMenu)                                          // set menu again\r
-  SetMenu(hWWindow,hPSEMenu);\r
-\r
- if(pGfxCardScreen) free(pGfxCardScreen);              // free helper memory\r
- pGfxCardScreen=0;\r
-\r
-// if(iNoScreenSaver) EnableScreenSaver(TRUE);           // enable screen saver again\r
-\r
- return 0;\r
-}\r
-\r
-#else\r
 \r
 long GPUclose()                                        // LINUX CLOSE\r
 {\r
@@ -717,17 +532,12 @@ long GPUclose()                                        // LINUX CLOSE
 \r
  return 0;\r
 }\r
-#endif\r
 \r
 ////////////////////////////////////////////////////////////////////////\r
 // I shot the sheriff... last function called from emu \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
 long CALLBACK GPUshutdown()\r
-#else\r
-long CALLBACK GPUshutdown()\r
-#endif\r
 {\r
  if(psxVSecure) free(psxVSecure);                      // kill emulated vram memory\r
  psxVSecure=0;\r
@@ -742,15 +552,15 @@ long CALLBACK GPUshutdown()
 void PaintBlackBorders(void)\r
 {\r
  short s;\r
+ glDisable(GL_SCISSOR_TEST); glError();\r
+ if(bTexEnabled) {glDisable(GL_TEXTURE_2D);bTexEnabled=FALSE;} glError();\r
+ if(bOldSmoothShaded) {glShadeModel(GL_FLAT);bOldSmoothShaded=FALSE;} glError();\r
+ if(bBlendEnable)     {glDisable(GL_BLEND);bBlendEnable=FALSE;} glError();\r
+ glDisable(GL_ALPHA_TEST); glError();\r
 \r
- glDisable(GL_SCISSOR_TEST);\r
- if(bTexEnabled) {glDisable(GL_TEXTURE_2D);bTexEnabled=FALSE;}\r
- if(bOldSmoothShaded) {glShadeModel(GL_FLAT);bOldSmoothShaded=FALSE;}\r
- if(bBlendEnable)     {glDisable(GL_BLEND);bBlendEnable=FALSE;}\r
- glDisable(GL_ALPHA_TEST);\r
+ glEnable(GL_ALPHA_TEST); glError();\r
+ glEnable(GL_SCISSOR_TEST); glError();\r
 \r
- glEnable(GL_ALPHA_TEST);\r
- glEnable(GL_SCISSOR_TEST);\r
 }\r
 \r
 ////////////////////////////////////////////////////////////////////////\r
@@ -791,10 +601,6 @@ void updateDisplay(void)                               // UPDATE DISPLAY
 {\r
 BOOL bBlur=FALSE;\r
 \r
-#ifdef _WINDOWS\r
-HDC hdc=GetDC(hWWindow);                              // windows:\r
-wglMakeCurrent(hdc,GLCONTEXT);                        // -> make context current again\r
-#endif\r
 \r
 bFakeFrontBuffer=FALSE;\r
 bRenderFrontBuffer=FALSE;\r
@@ -836,11 +642,13 @@ if(PreviousPSXDisplay.Range.x0||                      // paint black borders aro
 \r
 if(PSXDisplay.Disabled)                               // display disabled?\r
  {\r
+  //LOGE("PSXDisplay.Disabled");\r
+\r
   // moved here\r
-  glDisable(GL_SCISSOR_TEST);                       \r
-  glClearColor(0,0,0,128);                            // -> clear whole backbuffer\r
-  glClear(uiBufferBits);\r
-  glEnable(GL_SCISSOR_TEST);                       \r
+  glDisable(GL_SCISSOR_TEST); glError();                       \r
+  glClearColor(0,0,0,128); glError();                 // -> clear whole backbuffer\r
+  glClear(uiBufferBits); glError();\r
+  glEnable(GL_SCISSOR_TEST); glError();                       \r
   gl_z=0.0f;\r
   bDisplayNotSet = TRUE;\r
  }\r
@@ -882,29 +690,16 @@ if(bUseFrameSkip)                                     // frame skipping active ?
  {\r
   if(!bSkipNextFrame) \r
    {\r
-    if(iDrawnSomething)\r
-#ifdef _WINDOWS\r
-     SwapBuffers(wglGetCurrentDC());                  // -> to skip or not to skip\r
-#else\r
-     eglSwapBuffers(display,surface);\r
-#endif\r
+    if(iDrawnSomething)     flipEGL();\r
    }\r
-  if(dwActFixes&0x180)                                // -> special old frame skipping: skip max one in a row\r
-   {\r
     if((fps_skip < fFrameRateHz) && !(bSkipNextFrame)) \r
      {bSkipNextFrame = TRUE; fps_skip=fFrameRateHz;}\r
     else bSkipNextFrame = FALSE;\r
-   }\r
-  else FrameSkip();\r
+\r
  }\r
 else                                                  // no skip ?\r
  {\r
-  if(iDrawnSomething)\r
-#ifdef _WINDOWS\r
-   SwapBuffers(wglGetCurrentDC());                    // -> swap\r
-#else\r
-  eglSwapBuffers(display,surface);\r
-#endif\r
+  if(iDrawnSomething)  flipEGL();\r
  }\r
 \r
 iDrawnSomething=0;\r
@@ -921,11 +716,10 @@ if(lClearOnSwap)                                      // clear buffer after swap
   g=((GLclampf)GREEN(lClearOnSwapColor))/255.0f;      // -> get col\r
   b=((GLclampf)BLUE(lClearOnSwapColor))/255.0f;\r
   r=((GLclampf)RED(lClearOnSwapColor))/255.0f;\r
-  \r
-  glDisable(GL_SCISSOR_TEST);                       \r
-  glClearColor(r,g,b,128);                            // -> clear \r
-  glClear(uiBufferBits);\r
-  glEnable(GL_SCISSOR_TEST);                       \r
+  glDisable(GL_SCISSOR_TEST); glError();                       \r
+  glClearColor(r,g,b,128); glError();                 // -> clear \r
+  glClear(uiBufferBits); glError();\r
+  glEnable(GL_SCISSOR_TEST); glError();                       \r
   lClearOnSwap=0;                                     // -> done\r
  }\r
 else \r
@@ -934,11 +728,12 @@ else
 \r
   if(iZBufferDepth)                                   // clear zbuffer as well (if activated)\r
    {\r
-    glDisable(GL_SCISSOR_TEST);                       \r
-    glClear(GL_DEPTH_BUFFER_BIT);\r
-    glEnable(GL_SCISSOR_TEST);                       \r
+    glDisable(GL_SCISSOR_TEST); glError();\r
+    glClear(GL_DEPTH_BUFFER_BIT); glError();\r
+    glEnable(GL_SCISSOR_TEST); glError();\r
    }\r
  }\r
+\r
 gl_z=0.0f;\r
 \r
 //----------------------------------------------------//\r
@@ -985,7 +780,7 @@ if(iRumbleTime)                                       // shake screen by modifyi
   glViewport(rRatioRect.left+i1,                      \r
              iResY-(rRatioRect.top+rRatioRect.bottom)+i2,\r
              rRatioRect.right+i3, \r
-             rRatioRect.bottom+i4);            \r
+             rRatioRect.bottom+i4); glError();\r
  }\r
 \r
 //----------------------------------------------------//\r
@@ -1018,18 +813,9 @@ bRenderFrontBuffer=FALSE;
 // if(gTexPicName) DisplayPic();\r
 // if(ulKeybits&KEY_SHOWFPS) DisplayText();\r
 \r
-#ifdef _WINDOWS\r
- {                                                    // windows: \r
-  HDC hdc=GetDC(hWWindow);\r
-  wglMakeCurrent(hdc,GLCONTEXT);                      // -> make current again\r
-  if(iDrawnSomething)\r
-   SwapBuffers(wglGetCurrentDC());                    // -> swap\r
-  ReleaseDC(hWWindow,hdc);                            // -> ! important !\r
- }\r
-#else\r
 if(iDrawnSomething)                                   // linux:\r
eglSwapBuffers(display,surface);\r
-#endif\r
     flipEGL();\r
+\r
 \r
 //if(iBlurBuffer) UnBlurBackBuffer();\r
 }\r
@@ -1119,6 +905,7 @@ float xs,ys,s;RECT r;
 if(!PSXDisplay.DisplayModeNew.x) return;\r
 if(!PSXDisplay.DisplayModeNew.y) return;\r
 \r
+#if 0\r
 xs=(float)iResX/(float)PSXDisplay.DisplayModeNew.x;\r
 ys=(float)iResY/(float)PSXDisplay.DisplayModeNew.y;\r
 \r
@@ -1132,12 +919,11 @@ if(r.bottom < 1)     r.bottom = 1;
 \r
 r.left = (iResX-r.right)/2;\r
 r.top  = (iResY-r.bottom)/2;\r
-\r
 if(r.bottom<rRatioRect.bottom ||\r
    r.right <rRatioRect.right)\r
  {\r
   RECT rC;\r
-  glClearColor(0,0,0,128);                         \r
+  glClearColor(0,0,0,128); glError();\r
 \r
   if(r.right <rRatioRect.right)\r
    {\r
@@ -1145,11 +931,12 @@ if(r.bottom<rRatioRect.bottom ||
     rC.top=0;\r
     rC.right=r.left;\r
     rC.bottom=iResY;\r
-    glScissor(rC.left,rC.top,rC.right,rC.bottom);\r
-    glClear(uiBufferBits);\r
+    glScissor(rC.left,rC.top,rC.right,rC.bottom); glError();\r
+    glClear(uiBufferBits); glError();\r
     rC.left=iResX-rC.right;\r
-    glScissor(rC.left,rC.top,rC.right,rC.bottom);\r
-    glClear(uiBufferBits);\r
+    glScissor(rC.left,rC.top,rC.right,rC.bottom); glError();\r
+    \r
+    glClear(uiBufferBits); glError();\r
    }\r
 \r
   if(r.bottom <rRatioRect.bottom)\r
@@ -1158,11 +945,12 @@ if(r.bottom<rRatioRect.bottom ||
     rC.top=0;\r
     rC.right=iResX;\r
     rC.bottom=r.top;\r
-    glScissor(rC.left,rC.top,rC.right,rC.bottom);\r
-    glClear(uiBufferBits);\r
+    glScissor(rC.left,rC.top,rC.right,rC.bottom); glError();\r
+\r
+    glClear(uiBufferBits); glError();\r
     rC.top=iResY-rC.bottom;\r
-    glScissor(rC.left,rC.top,rC.right,rC.bottom);\r
-    glClear(uiBufferBits);\r
+    glScissor(rC.left,rC.top,rC.right,rC.bottom); glError();\r
+    glClear(uiBufferBits); glError();\r
    }\r
   \r
   bSetClip=TRUE;\r
@@ -1170,12 +958,16 @@ if(r.bottom<rRatioRect.bottom ||
  }\r
 \r
 rRatioRect=r;\r
-\r
+#else\r
+ // pcsx-rearmed hack\r
+ if (rearmed_get_layer_pos != NULL)\r
+   rearmed_get_layer_pos(&rRatioRect.left, &rRatioRect.top, &rRatioRect.right, &rRatioRect.bottom);\r
+#endif\r
 \r
 glViewport(rRatioRect.left,\r
            iResY-(rRatioRect.top+rRatioRect.bottom),\r
            rRatioRect.right,\r
-           rRatioRect.bottom);                         // init viewport\r
+           rRatioRect.bottom); glError();              // init viewport\r
 }\r
 \r
 ////////////////////////////////////////////////////////////////////////\r
@@ -1195,9 +987,9 @@ if ((PSXDisplay.DisplayMode.y == PSXDisplay.DisplayModeNew.y) &&
  }\r
 else                                                  // some res change?\r
  {\r
-  glLoadIdentity();\r
+  glLoadIdentity(); glError();\r
   glOrtho(0,PSXDisplay.DisplayModeNew.x,              // -> new psx resolution\r
-            PSXDisplay.DisplayModeNew.y, 0, -1, 1);\r
+            PSXDisplay.DisplayModeNew.y, 0, -1, 1); glError();\r
   if(bKeepRatio) SetAspectRatio();\r
  }\r
 \r
@@ -1236,15 +1028,6 @@ if(bUp) updateDisplay();                              // yeah, real update (swap
 // window mode <-> fullscreen mode (windows)\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
-void ChangeWindowMode(void)\r
-{\r
- GPUclose();\r
- bWindowMode=!bWindowMode;\r
- GPUopen(hWWindow);\r
- bChangeWinMode=FALSE;\r
-}\r
-#endif\r
 \r
 ////////////////////////////////////////////////////////////////////////\r
 // swap update check (called by psx vsync function)\r
@@ -1312,11 +1095,7 @@ return FALSE;
 \r
 static unsigned short usFirstPos=2;\r
 \r
-#ifdef _WINDOWS\r
-void CALLBACK GPUupdateLace(void)\r
-#else\r
 void CALLBACK GPUupdateLace(void)\r
-#endif\r
 {\r
 if(!(dwActFixes&0x1000))                               \r
  STATUSREG^=0x80000000;                               // interlaced bit toggle, if the CC game fix is not active (see gpuReadStatus)\r
@@ -1345,20 +1124,13 @@ else if(usFirstPos==1)                                // initial updates (after
   updateDisplay();\r
  }\r
 \r
-#ifdef _WINDOWS\r
-if(bChangeWinMode) ChangeWindowMode();\r
-#endif\r
 }\r
 \r
 ////////////////////////////////////////////////////////////////////////\r
 // process read request from GPU status register\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
-unsigned long CALLBACK GPUreadStatus(void)\r
-#else\r
 unsigned long CALLBACK GPUreadStatus(void)\r
-#endif\r
 {\r
 if(dwActFixes&0x1000)                                 // CC game fix\r
  {\r
@@ -1394,17 +1166,11 @@ return STATUSREG;
 // these are always single packet commands.\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
-void CALLBACK GPUwriteStatus(unsigned long gdata)\r
-#else\r
 void CALLBACK GPUwriteStatus(unsigned long gdata)\r
-#endif\r
 {\r
 unsigned long lCommand=(gdata>>24)&0xff;\r
 \r
-#ifdef _WINDOWS\r
 if(bIsFirstFrame) GLinitialize();                     // real ogl startup (needed by some emus)\r
-#endif\r
 \r
 ulStatusControl[lCommand]=gdata;\r
 \r
@@ -1723,8 +1489,8 @@ void CheckVRamReadEx(int x, int y, int dx, int dy)
  int ux,uy,udx,udy,wx,wy;\r
  unsigned short * p1, *p2;\r
  float XS,YS;\r
- u8 * ps;\r
- u8 * px;\r
+ unsigned char * ps;\r
+ unsigned char * px;\r
  unsigned short s,sx;\r
 \r
  if(STATUSREG&GPUSTATUS_RGB24) return;\r
@@ -1820,16 +1586,15 @@ void CheckVRamReadEx(int x, int y, int dx, int dy)
 \r
  if(!pGfxCardScreen)\r
   {\r
-   glPixelStorei(GL_PACK_ALIGNMENT,1);\r
-   pGfxCardScreen=(u8 *)malloc(iResX*iResY*4);\r
+   glPixelStorei(GL_PACK_ALIGNMENT,1); glError();\r
+   pGfxCardScreen=(unsigned char *)malloc(iResX*iResY*4);\r
   }\r
 \r
  ps=pGfxCardScreen;\r
  \r
  //if(!sArea) glReadBuffer(GL_FRONT);\r
 \r
- glReadPixels(x,y,dx,dy,GL_RGB,GL_UNSIGNED_BYTE,ps);\r
-               \r
+ glReadPixels(x,y,dx,dy,GL_RGB,GL_UNSIGNED_BYTE,ps); glError();\r
  //if(!sArea) glReadBuffer(GL_BACK);\r
 \r
  s=0;\r
@@ -1874,7 +1639,7 @@ void CheckVRamRead(int x, int y, int dx, int dy, bool bFront)
 {\r
  unsigned short sArea;unsigned short * p;\r
  int ux,uy,udx,udy,wx,wy;float XS,YS;\r
- u8 * ps, * px;\r
+ unsigned char * ps, * px;\r
  unsigned short s=0,sx;\r
 \r
  if(STATUSREG&GPUSTATUS_RGB24) return;\r
@@ -1968,16 +1733,15 @@ void CheckVRamRead(int x, int y, int dx, int dy, bool bFront)
 \r
  if(!pGfxCardScreen)\r
   {\r
-   glPixelStorei(GL_PACK_ALIGNMENT,1);\r
-   pGfxCardScreen=(u8 *)malloc(iResX*iResY*4);\r
+   glPixelStorei(GL_PACK_ALIGNMENT,1); glError();\r
+   pGfxCardScreen=(unsigned char *)malloc(iResX*iResY*4);\r
   }\r
 \r
  ps=pGfxCardScreen;\r
  \r
 // if(bFront) glReadBuffer(GL_FRONT);\r
 \r
- glReadPixels(x,y,dx,dy,GL_RGB,GL_UNSIGNED_BYTE,ps);\r
-               \r
+ glReadPixels(x,y,dx,dy,GL_RGB,GL_UNSIGNED_BYTE,ps); glError(); glError();\r
 // if(bFront) glReadBuffer(GL_BACK);\r
 \r
  XS=(float)dx/(float)(udx);\r
@@ -2010,11 +1774,7 @@ void CheckVRamRead(int x, int y, int dx, int dy, bool bFront)
 // core read from vram\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
-void CALLBACK GPUreadDataMem(unsigned int * pMem, int iSize)\r
-#else\r
 void CALLBACK GPUreadDataMem(unsigned long * pMem, int iSize)\r
-#endif\r
 {\r
 int i;\r
 \r
@@ -2086,18 +1846,10 @@ ENDREAD:
 GPUIsIdle;\r
 }\r
 \r
-#ifdef _WINDOWS\r
-unsigned long CALLBACK GPUreadData(void)\r
-#else\r
 unsigned long CALLBACK GPUreadData(void)\r
-#endif\r
 {\r
  unsigned long l;\r
-#ifdef _WINDOWS\r
  GPUreadDataMem(&l,1);\r
-#else\r
- GPUreadDataMem(&l,1);\r
-#endif \r
  return GPUdataRet;\r
 }\r
 \r
@@ -2105,7 +1857,7 @@ unsigned long CALLBACK GPUreadData(void)
 // helper table to know how much data is used by drawing commands\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-const u8 primTableCX[256] =\r
+const unsigned char primTableCX[256] =\r
 {\r
     // 00\r
     0,0,3,0,0,0,0,0,\r
@@ -2179,13 +1931,9 @@ const u8 primTableCX[256] =
 // processes data send to GPU data register\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
 void CALLBACK GPUwriteDataMem(unsigned long * pMem, int iSize)\r
-#else\r
-void CALLBACK GPUwriteDataMem(unsigned long * pMem, int iSize)\r
-#endif\r
 {\r
-u8 command;\r
+unsigned char command;\r
 unsigned long gdata=0;\r
 int i=0;\r
 GPUIsBusy;\r
@@ -2245,7 +1993,7 @@ ENDVRAM:
 \r
 if(iDataWriteMode==DR_NORMAL)\r
  {\r
-  void (* *primFunc)(u8 *);\r
+  void (* *primFunc)(unsigned char *);\r
   if(bSkipNextFrame) primFunc=primTableSkip;\r
   else               primFunc=primTableJ;\r
 \r
@@ -2257,7 +2005,7 @@ if(iDataWriteMode==DR_NORMAL)
 \r
     if(gpuDataC == 0)\r
      {\r
-      command = (u8)((gdata>>24) & 0xff);\r
+      command = (unsigned char)((gdata>>24) & 0xff);\r
 \r
       if(primTableCX[command])\r
        {\r
@@ -2286,7 +2034,7 @@ if(iDataWriteMode==DR_NORMAL)
     if(gpuDataP == gpuDataC)\r
      {\r
       gpuDataC=gpuDataP=0;\r
-      primFunc[gpuCommand]((u8 *)gpuDataM);\r
+      primFunc[gpuCommand]((unsigned char *)gpuDataM);\r
 \r
       if(dwEmuFixes&0x0001 || dwActFixes&0x20000)     // hack for emulating "gpu busy" in some games\r
        iFakePrimBusy=4;\r
@@ -2302,17 +2050,9 @@ GPUIsIdle;
 \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
 void CALLBACK GPUwriteData(unsigned long gdata)\r
-#else\r
-void CALLBACK GPUwriteData(unsigned long gdata)\r
-#endif\r
 {\r
-#ifdef _WINDOWS\r
- GPUwriteDataMem(&gdata,1);\r
-#else\r
  GPUwriteDataMem(&gdata,1);\r
-#endif \r
 }\r
 \r
 ////////////////////////////////////////////////////////////////////////\r
@@ -2350,9 +2090,9 @@ return iT;
 \r
 /*#include <unistd.h>\r
 \r
-void StartCfgTool(s8 * pCmdLine)                     // linux: start external cfg tool\r
+void StartCfgTool(char * pCmdLine)                     // linux: start external cfg tool\r
 {\r
- FILE * cf;s8 filename[255],t[255];\r
+ FILE * cf;char filename[255],t[255];\r
 \r
  strcpy(filename,"cfg/cfgPeopsMesaGL");                 // look in cfg sub folder first\r
  cf=fopen(filename,"rb");\r
@@ -2396,22 +2136,9 @@ void StartCfgTool(s8 * pCmdLine)                     // linux: start external cf
 #endif\r
 \r
 \r
-#ifdef _WINDOWS\r
-long CALLBACK GPUconfigure(void)\r
-#else\r
 long CALLBACK GPUconfigure(void)\r
-#endif\r
 {\r
 \r
-#ifdef _WINDOWS\r
-// HWND hWP=GetActiveWindow();\r
-// DialogBox(hInst,MAKEINTRESOURCE(IDD_CFGDLG),\r
-//           hWP,(DLGPROC)CfgDlgProc);\r
-#else\r
-\r
-// StartCfgTool("CFG");\r
-\r
-#endif\r
 \r
  return 0;\r
 }\r
@@ -2450,14 +2177,10 @@ return FALSE;
 // core gives a dma chain to gpu: same as the gpuwrite interface funcs\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
 long CALLBACK GPUdmaChain(unsigned long * baseAddrL, unsigned long addr)\r
-#else\r
-long CALLBACK GPUdmaChain(unsigned long * baseAddrL, unsigned long addr)\r
-#endif\r
 {\r
 unsigned long dmaMem;\r
-u8 * baseAddrB;\r
+unsigned char * baseAddrB;\r
 short count;unsigned int DMACommandCounter = 0;\r
 \r
 if(bIsFirstFrame) GLinitialize();\r
@@ -2466,7 +2189,7 @@ GPUIsBusy;
 \r
 lUsedAddr[0]=lUsedAddr[1]=lUsedAddr[2]=0xffffff;\r
 \r
-baseAddrB = (u8*) baseAddrL;\r
+baseAddrB = (unsigned char*) baseAddrL;\r
 \r
 do\r
  {\r
@@ -2479,11 +2202,7 @@ do
 \r
   dmaMem=addr+4;\r
 \r
-#ifdef _WINDOWS\r
-  if(count>0) GPUwriteDataMem(&baseAddrL[dmaMem>>2],count);\r
-#else\r
   if(count>0) GPUwriteDataMem(&baseAddrL[dmaMem>>2],count);\r
-#endif\r
   \r
   addr = baseAddrL[addr>>2]&0xffffff;\r
  }\r
@@ -2498,11 +2217,7 @@ return 0;
 // show about dlg\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
-void CALLBACK GPUabout(void)\r
-#else\r
 void CALLBACK GPUabout(void)\r
-#endif\r
 {\r
 \r
 }\r
@@ -2511,11 +2226,7 @@ void CALLBACK GPUabout(void)
 // We are ever fine ;)\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
-long CALLBACK GPUtest(void)\r
-#else\r
 long CALLBACK GPUtest(void)\r
-#endif\r
 {\r
  // if test fails this function should return negative value for error (unable to continue)\r
  // and positive value for warning (can continue but output might be crappy)\r
@@ -2529,11 +2240,7 @@ long CALLBACK GPUtest(void)
 \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
 long CALLBACK GPUfreeze(unsigned long ulGetFreezeData,GPUFreeze_t * pF)\r
-#else\r
-long CALLBACK GPUfreeze(unsigned long ulGetFreezeData,GPUFreeze_t * pF)\r
-#endif\r
 {\r
 if(ulGetFreezeData==2) \r
  {\r
@@ -2564,17 +2271,6 @@ memcpy(psxVub,         pF->psxVRam,  1024*iGPUHeight*2);
 \r
 ResetTextureArea(TRUE);\r
 \r
-#ifdef _WINDOWS\r
- GPUwriteStatus(ulStatusControl[0]);\r
- GPUwriteStatus(ulStatusControl[1]);\r
- GPUwriteStatus(ulStatusControl[2]);\r
- GPUwriteStatus(ulStatusControl[3]);\r
- GPUwriteStatus(ulStatusControl[8]);\r
- GPUwriteStatus(ulStatusControl[6]);\r
- GPUwriteStatus(ulStatusControl[7]);\r
- GPUwriteStatus(ulStatusControl[5]);\r
- GPUwriteStatus(ulStatusControl[4]);\r
-#else\r
  GPUwriteStatus(ulStatusControl[0]);\r
  GPUwriteStatus(ulStatusControl[1]);\r
  GPUwriteStatus(ulStatusControl[2]);\r
@@ -2584,7 +2280,6 @@ ResetTextureArea(TRUE);
  GPUwriteStatus(ulStatusControl[7]);\r
  GPUwriteStatus(ulStatusControl[5]);\r
  GPUwriteStatus(ulStatusControl[4]);\r
-#endif\r
  return 1;\r
 }\r
 \r
@@ -2597,7 +2292,7 @@ ResetTextureArea(TRUE);
 //10 = red\r
 //11 = transparent\r
 \r
-u8 cFont[10][120]=\r
+unsigned char cFont[10][120]=\r
 {\r
 // 0\r
 {0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,\r
@@ -2823,7 +2518,7 @@ u8 cFont[10][120]=
 \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-void PaintPicDot(u8 * p,u8 c)\r
+void PaintPicDot(unsigned char * p,unsigned char c)\r
 {\r
  if(c==0) {*p++=0x00;*p++=0x00;*p=0x00;return;}\r
  if(c==1) {*p++=0xff;*p++=0xff;*p=0xff;return;}\r
@@ -2832,27 +2527,23 @@ void PaintPicDot(u8 * p,u8 c)
 \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
-void CALLBACK GPUgetScreenPic(u8 * pMem)\r
-#else\r
-long CALLBACK GPUgetScreenPic(u8 * pMem)\r
-#endif\r
+long CALLBACK GPUgetScreenPic(unsigned char * pMem)\r
 {\r
  float XS,YS;int x,y,v;\r
- u8 * ps, * px, * pf;\r
- u8 c;\r
+ unsigned char * ps, * px, * pf;\r
+ unsigned char c;\r
 \r
  if(!pGfxCardScreen)\r
   {\r
-   glPixelStorei(GL_PACK_ALIGNMENT,1);\r
-   pGfxCardScreen=(u8 *)malloc(iResX*iResY*4);\r
+   glPixelStorei(GL_PACK_ALIGNMENT,1); glError();\r
+   pGfxCardScreen=(unsigned char *)malloc(iResX*iResY*4);\r
   }\r
 \r
  ps=pGfxCardScreen;\r
 \r
 // glReadBuffer(GL_FRONT);\r
 \r
- glReadPixels(0,0,iResX,iResY,GL_RGB,GL_UNSIGNED_BYTE,ps);\r
+ glReadPixels(0,0,iResX,iResY,GL_RGB,GL_UNSIGNED_BYTE,ps); glError();\r
                \r
 // glReadBuffer(GL_BACK);\r
 \r
@@ -2884,13 +2575,13 @@ long CALLBACK GPUgetScreenPic(u8 * pMem)
     {\r
      c=cFont[lSelectedSlot][x+y*6];\r
      v=(c&0xc0)>>6;\r
-     PaintPicDot(pf,(u8)v);pf+=3;                // paint the dots into the rect\r
+     PaintPicDot(pf,(unsigned char)v);pf+=3;                // paint the dots into the rect\r
      v=(c&0x30)>>4;\r
-     PaintPicDot(pf,(u8)v);pf+=3;\r
+     PaintPicDot(pf,(unsigned char)v);pf+=3;\r
      v=(c&0x0c)>>2;\r
-     PaintPicDot(pf,(u8)v);pf+=3;\r
+     PaintPicDot(pf,(unsigned char)v);pf+=3;\r
      v=c&0x03;\r
-     PaintPicDot(pf,(u8)v);pf+=3;\r
+     PaintPicDot(pf,(unsigned char)v);pf+=3;\r
     }\r
    pf+=104*3;\r
   }\r
@@ -2915,11 +2606,7 @@ long CALLBACK GPUgetScreenPic(u8 * pMem)
 \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-#ifdef _WINDOWS\r
-void CALLBACK GPUshowScreenPic(u8 * pMem)\r
-#else\r
-long CALLBACK GPUshowScreenPic(u8 * pMem)\r
-#endif\r
+long CALLBACK GPUshowScreenPic(unsigned char * pMem)\r
 {\r
 // DestroyPic();\r
 // if(pMem==0) return;\r
@@ -2959,3 +2646,14 @@ void CALLBACK GPUdisplayFlags(unsigned long dwFlags)
 {\r
 // dwCoreFlags=dwFlags;\r
 }\r
+\r
+// pcsx-rearmed callbacks\r
+void CALLBACK GPUrearmedCallbacks(const void **cbs)\r
+{\r
+ rearmed_get_layer_pos = cbs[0];\r
+}\r
+\r
+static void flipEGL(void)\r
+{\r
+ eglSwapBuffers(display, surface);\r
+}\r