spu: fix saving bug
[pcsx_rearmed.git] / plugins / gpu-gles / gpuDraw.c
index 3842503..b619104 100644 (file)
@@ -175,8 +175,7 @@ void SetExtGLFuncs(void)
    if(bAdvancedBlend) bUseMultiPass=TRUE;              // -> pseudo-advanced with 2 passes\r
    else               bUseMultiPass=FALSE;             // -> or simple 'bright color' mode\r
 //   bGLBlend=FALSE;                                     // -> no ext blending!\r
-\r
-   glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);    \r
+   glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glError();\r
   }\r
 \r
  if(bOpaquePass)                                        // opaque mode?\r
@@ -193,13 +192,15 @@ void SetExtGLFuncs(void)
     }\r
 \r
    TCF[1]=XP8RGBA_1;\r
-   glAlphaFuncx(GL_GREATER,0.49f);\r
+   glAlphaFuncx(GL_GREATER,0.49f); glError();\r
+\r
   }\r
  else                                                  // no opaque mode?\r
   {\r
    TCF[0]=TCF[1]=P8RGBA;\r
    PalTexturedColourFn=P8RGBA;                         // -> init col func\r
-   glAlphaFuncx(GL_NOTEQUAL,0);                         // --> set alpha func\r
+   glAlphaFuncx(GL_NOTEQUAL,0); glError();             // --> set alpha func\r
+\r
   }\r
 \r
  //----------------------------------------------------//\r
@@ -207,7 +208,8 @@ void SetExtGLFuncs(void)
  LoadSubTexFn=LoadSubTexturePageSort;                  // init load tex ptr\r
 \r
  bBlendEnable=FALSE;                                   // init blending: off\r
- glDisable(GL_BLEND);\r
+ glDisable(GL_BLEND); glError();\r
+\r
 \r
  SetScanTrans();                                       // init scan lines (if wanted)\r
 }\r
@@ -289,15 +291,17 @@ bool TestEGLError(const char* pszLocation)
        EGLint iErr = eglGetError();\r
        if (iErr != EGL_SUCCESS)\r
        {\r
-               printf("%s failed (%d).\n", pszLocation, iErr);\r
+               printf("%s failed (0x%x).\n", pszLocation, iErr);\r
                return FALSE;\r
        }\r
 \r
        return TRUE;\r
 }\r
 \r
-static void initEGL(void)\r
+static int initEGL(void)\r
 {\r
+       NativeWindowType window = 0;\r
+\r
        printf ("GL init\n");\r
 \r
        EGLint numConfigs;\r
@@ -334,9 +338,10 @@ static void initEGL(void)
             if (!x11Display)\r
             {\r
                 printf("GLES Error: Unable to open X display\n");\r
+                return -1;\r
             }\r
             x11Screen = XDefaultScreen( x11Display );\r
-                               \r
+\r
             // Gets the display parameters so we can pass the same parameters to the window to be created.\r
             sRootWindow        = RootWindow(x11Display, x11Screen);\r
             i32Depth   = DefaultDepth(x11Display, x11Screen);\r
@@ -345,7 +350,8 @@ static void initEGL(void)
             if (!px11Visual)\r
             {\r
                 printf("GLES Error: Unable to acquire visual\n");\r
-                       }\r
+                return -1;\r
+            }\r
             // Colormap of the specified visual type for the display.\r
             x11Colormap = XCreateColormap( x11Display, sRootWindow, px11Visual->visual, AllocNone );\r
             sWA.colormap = x11Colormap;\r
@@ -355,7 +361,7 @@ static void initEGL(void)
 \r
             // Display capabilities list.\r
             ui32Mask = CWBackPixel | CWBorderPixel | CWEventMask | CWColormap;\r
-                                                          \r
+\r
             // Creates the X11 window\r
             x11Window = XCreateWindow( x11Display, RootWindow(x11Display, x11Screen), 0, 0, iResX, iResY,\r
                                         0, CopyFromParent, InputOutput, CopyFromParent, ui32Mask, &sWA);\r
@@ -383,6 +389,7 @@ static void initEGL(void)
             XSendEvent(x11Display, DefaultRootWindow(x11Display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);\r
 \r
             display = eglGetDisplay( (EGLNativeDisplayType)x11Display );\r
+            window = x11Window;\r
 #else\r
             display = eglGetDisplay( (EGLNativeDisplayType)0 );\r
 #endif\r
@@ -390,86 +397,99 @@ static void initEGL(void)
        if( display == EGL_NO_DISPLAY )\r
        {\r
                printf( "GLES EGL Error: GL No Display\n" );\r
+               return -1;\r
        }\r
 \r
        if( !eglInitialize( display, &majorVersion, &minorVersion ) )\r
        {\r
                printf( "GLES EGL Error: eglInitialize failed\n" );\r
+               return -1;\r
        }\r
 \r
        if( !eglChooseConfig( display, attribList, &config, 1, &numConfigs ) )\r
        {\r
                printf( "GLES EGL Error: eglChooseConfig failed\n" );\r
+               return -1;\r
        }\r
 \r
        context = eglCreateContext( display, config, NULL, NULL );\r
        if( context==0 )\r
        {\r
                printf( "GLES EGL Error: eglCreateContext failed\n" );\r
+               return -1;\r
        }\r
 \r
-#if defined(USE_X11)\r
-            surface = eglCreateWindowSurface( display, config, (EGLNativeDisplayType)x11Window, NULL );\r
-#else\r
-            surface = eglCreateWindowSurface( display, config, (EGLNativeDisplayType)0, NULL );\r
+#ifdef FAKE_WINDOW\r
+       // broken Caanoo libs won't accept NULL window\r
+       window = (NativeWindowType)1;\r
 #endif\r
+       surface = eglCreateWindowSurface( display, config, window, NULL );\r
+       if (!TestEGLError("eglCreateWindowSurface"))\r
+               return -1;\r
+\r
+       eglMakeCurrent( display, surface, surface, context );\r
+       if (!TestEGLError("eglMakeCurrent"))\r
+               return -1;\r
 \r
-    eglMakeCurrent( display, surface, surface, context );\r
-    if (!TestEGLError("eglMakeCurrent"))\r
-        printf("error eglMakeCurrent");\r
-    else\r
-        printf("GLES Window Opened\n");\r
+       printf("GLES init ok\n");\r
+       return 0;\r
 }\r
 \r
 int GLinitialize() \r
 {\r
- initEGL();\r
+ if(initEGL()!=0)\r
+  return -1;\r
 \r
  //----------------------------------------------------// \r
 \r
+ glDepthRangef(0.0f, 1.0f);glError();\r
+\r
  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
  glLoadIdentity();\r
  glScalef(1.0f/255.99f,1.0f/255.99f,1.0f);             // geforce precision hack\r
 #endif \r
\r
+ //glPolygonOffset( -0.2f, -0.2f );glError();\r
+\r
+ glMatrixMode(GL_PROJECTION); glError();               // init projection with psx resolution\r
+ glLoadIdentity(); glError();\r
 \r
- glMatrixMode(GL_PROJECTION);                          // init projection with psx resolution\r
- glLoadIdentity();\r
  glOrtho(0,PSXDisplay.DisplayMode.x,\r
-         PSXDisplay.DisplayMode.y, 0, -1, 1);\r
+         PSXDisplay.DisplayMode.y, 0, -1, 1); glError();\r
 \r
  if(iZBufferDepth)                                     // zbuffer?\r
   {\r
    uiBufferBits=GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT;\r
-   glEnable(GL_DEPTH_TEST);    \r
-   glDepthFunc(GL_ALWAYS);\r
+   glEnable(GL_DEPTH_TEST); glError();\r
+   glDepthFunc(GL_ALWAYS); glError();\r
    iDepthFunc=1;\r
   }\r
  else                                                  // no zbuffer?\r
   {\r
    uiBufferBits=GL_COLOR_BUFFER_BIT;\r
-   glDisable(GL_DEPTH_TEST);\r
+   glDisable(GL_DEPTH_TEST); glError();\r
   }\r
 \r
- glClearColor(0.0f, 0.0f, 0.0f, 0.0f);                 // first buffer clear\r
- glClear(uiBufferBits);\r
+ glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glError();      // first buffer clear\r
+ glClear(uiBufferBits); glError();\r
 \r
  GetExtInfos();                                        // get ext infos\r
  SetExtGLFuncs();                                      // init all kind of stuff (tex function pointers)\r
  \r
- glEnable(GL_ALPHA_TEST);                              // wanna alpha test\r
+ glEnable(GL_ALPHA_TEST); glError();                   // wanna alpha test\r
 \r
   {\r
-   glDisable(GL_LINE_SMOOTH);\r
-   glDisable(GL_POINT_SMOOTH);\r
+   glDisable(GL_LINE_SMOOTH); glError();\r
+   glDisable(GL_POINT_SMOOTH); glError();\r
   }\r
 \r
  ubGloAlpha=127;                                       // init some drawing vars\r
@@ -482,15 +502,15 @@ int GLinitialize()
       \r
  if(bDrawDither)  glEnable(GL_DITHER);                 // dither mode\r
  else             glDisable(GL_DITHER); \r
-\r
- glDisable(GL_FOG);                                    // turn all (currently) unused modes off\r
- glDisable(GL_LIGHTING);  \r
- glDisable(GL_STENCIL_TEST);  \r
- glDisable(GL_TEXTURE_2D);\r
+ glError(); \r
+ glDisable(GL_FOG); glError();                          // turn all (currently) unused modes off\r
+ glDisable(GL_LIGHTING); glError();  \r
+ glDisable(GL_STENCIL_TEST); glError();  \r
+ glDisable(GL_TEXTURE_2D); glError();\r
  glDisable(GL_CULL_FACE);\r
 \r
- glFlush();                                            // we are done...\r
- glFinish();                           \r
+ glFlush(); glError();                                 // we are done...\r
+ glFinish(); glError();                           \r
 \r
  CreateScanLines();                                    // setup scanline stuff (if wanted)\r
 \r
@@ -1055,8 +1075,8 @@ void assignTextureSprite(void)
     {\r
      if(gLastTex!=gTexName || gLastFMode!=0)\r
       {\r
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\r
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\r
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glError();\r
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glError();\r
        gLastTex=gTexName;gLastFMode=0;\r
       }\r
     }\r
@@ -1115,8 +1135,8 @@ void assignTexture3(void)
     {\r
      if(gLastTex!=gTexName || gLastFMode!=1)\r
       {\r
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\r
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\r
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glError();\r
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glError();\r
        gLastTex=gTexName;gLastFMode=1;\r
       }\r
     }\r
@@ -1185,8 +1205,8 @@ void assignTexture4(void)
     {\r
      if(gLastTex!=gTexName || gLastFMode!=1)\r
       {\r
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\r
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\r
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glError();\r
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glError();\r
        gLastTex=gTexName;gLastFMode=1;\r
       }\r
     }\r
@@ -1257,7 +1277,8 @@ void SetOGLDisplaySettings(BOOL DisplaySet)
    if(bSetClip || !EqualRect(&rC,&rX))\r
     {\r
      rC=rX;\r
-     glScissor(rC.left,rC.top,rC.right,rC.bottom);\r
+     glScissor(rC.left,rC.top,rC.right,rC.bottom); glError();\r
+     //LOGE("glscissor:%d %d %d %d",rC.left,rC.top,rC.right,rC.bottom);\r
      bSetClip=FALSE; \r
     }\r
    return;\r
@@ -1348,7 +1369,8 @@ void SetOGLDisplaySettings(BOOL DisplaySet)
 \r
  if(bSetClip || !EqualRect(&r,&rC))\r
   {\r
-   glScissor(r.left,r.top,r.right,r.bottom);\r
+   glScissor(r.left,r.top,r.right,r.bottom); glError();\r
+\r
    rC=r;\r
    bSetClip=FALSE;\r
   }\r