DEADSOFTWARE

added optional framebuffer and resolution scaling
[d2df-sdl.git] / src / game / sdl2 / g_system.pas
index 694042c37dea2db0f756e690b4d14a00f63f16e7..89cebaf02b5e84d292118595e878a4a17e680f52 100644 (file)
@@ -78,10 +78,17 @@ implementation
   begin
     gWinSizeX := w;
     gWinSizeY := h;
-    gScreenWidth := w;
-    gScreenHeight := 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}
       fuiScrWdt := w;
       fuiScrHgt := h;
@@ -151,6 +158,15 @@ implementation
         begin
           {$IFDEF NOGL_INIT}
             nogl_Init;
+            glRenderToFBO := False; // TODO: check for GL_OES_framebuffer_object
+          {$ELSE}
+            if glRenderToFBO then
+              if not Load_GL_ARB_framebuffer_object() then
+                if not Load_GL_EXT_framebuffer_object() then
+                begin
+                  e_LogWriteln('SDL: no framebuffer support detected');
+                  glRenderToFBO := False
+                end;
           {$ENDIF}
           if (fullscreen = false) and (maximized = false) and (wc = false) then
           begin
@@ -209,6 +225,8 @@ implementation
 
   procedure sys_Repaint;
   begin
+    if glRenderToFBO then
+      e_BlitFramebuffer(gWinSizeX, gWinSizeY);
     SDL_GL_SwapWindow(window)
   end;