DEADSOFTWARE

always try to load FBO extensions in case user enables r_fbo later
[d2df-sdl.git] / src / game / sdl / g_system.pas
index 01467205ceaf1285f382cbf7ef4be336f6f68289..a4cbe649a3f7b4fcb39f7d908365e366776c9903 100644 (file)
@@ -25,7 +25,7 @@ interface
 
   (* --- Graphics --- *)
   function sys_GetDisplayModes (bpp: Integer): SSArray;
-  function sys_SetDisplayMode (w, h, bpp: Integer; fullscreen: Boolean): Boolean;
+  function sys_SetDisplayMode (w, h, bpp: Integer; fullscreen, maximized: Boolean): Boolean;
   procedure sys_EnableVSync (yes: Boolean);
   procedure sys_Repaint;
 
@@ -74,6 +74,15 @@ implementation
   begin
     gWinSizeX := w;
     gWinSizeY := h;
+    gRC_Width := w;
+    gRC_Height := h;
+    if glRenderToFBO then
+    begin
+      // store real window size in gWinSize, downscale resolution now
+      w := round(w / r_pixel_scale);
+      h := round(h / r_pixel_scale);
+      e_ResizeFramebuffer(w, h);
+    end;
     gScreenWidth := w;
     gScreenHeight := h;
     {$IFDEF ENABLE_HOLMES}
@@ -100,7 +109,7 @@ implementation
     var flags: Uint32;
   begin
     e_LogWritefln('InitWindow %s %s %s %s', [w, h, bpp, fullScreen]);
-    result := False;
+    result := false;
     SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
     SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
     SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
@@ -117,9 +126,18 @@ implementation
       if screen <> nil then
       begin
         {$IFDEF NOGL_INIT}
-          nogl_Init;
+        nogl_Init;
+        if (not nogl_ExtensionSupported('GL_OES_framebuffer_object')) and glRenderToFBO then
+        {$ELSE}
+        if (not Load_GL_ARB_framebuffer_object()) and glRenderToFBO then
         {$ENDIF}
+        begin
+          e_LogWriteln('SDL: no framebuffer object support detected');
+          glRenderToFBO := False
+        end;
         SDL_WM_SetCaption(GetTitle(), nil);
+        gFullScreen := fullscreen;
+        gRC_FullScreen := fullscreen;
         UpdateSize(w, h);
         result := True
       end
@@ -132,6 +150,8 @@ implementation
 
   procedure sys_Repaint;
   begin
+    if glRenderToFBO then
+      e_BlitFramebuffer(gWinSizeX, gWinSizeY);
     SDL_GL_SwapBuffers
   end;
 
@@ -159,7 +179,7 @@ implementation
     end
   end;
 
-  function sys_SetDisplayMode (w, h, bpp: Integer; fullscreen: Boolean): Boolean;
+  function sys_SetDisplayMode (w, h, bpp: Integer; fullscreen, maximized: Boolean): Boolean;
   begin
     result := InitWindow(w, h, bpp, fullscreen)
   end;