shithub: choc

Download patch

ref: 7d37b373ee43b8d509d9eae882a18bf6744db15c
parent: 4c28d8a8a37edea1893896f3d601771c1615c1c5
author: Simon Howard <[email protected]>
date: Mon May 8 17:54:32 EDT 2006

Allow -3 scale.

Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 478

--- a/src/i_video.c
+++ b/src/i_video.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: i_video.c 477 2006-05-06 19:22:31Z fraggle $
+// $Id: i_video.c 478 2006-05-08 21:54:32Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 // Copyright(C) 2005 Simon Howard
@@ -175,7 +175,7 @@
 //-----------------------------------------------------------------------------
 
 static const char
-rcsid[] = "$Id: i_video.c 477 2006-05-06 19:22:31Z fraggle $";
+rcsid[] = "$Id: i_video.c 478 2006-05-08 21:54:32Z fraggle $";
 
 #include <SDL.h>
 #include <ctype.h>
@@ -707,7 +707,54 @@
             SDL_UnlockSurface(screen);
         }
     }
-}
+
+    if (screenmultiply == 3)
+    {
+        byte *bufp, *screenp, *screenp2, *screenp3;
+        int x, y;
+        int pitch;
+
+        if (SDL_LockSurface(screen) >= 0)
+        {
+            pitch = screen->pitch * 3;
+            bufp = screens[0] + y1 * SCREENWIDTH + x1;
+            screenp = (byte *) screen->pixels 
+                    + (y1 + y_offset) * pitch 
+                    + x1 * 3;
+            screenp2 = screenp + screen->pitch;
+            screenp3 = screenp + screen->pitch * 2;
+    
+            for (y=y1; y<y2; ++y)
+            {
+                byte *sp, *sp2, *sp3, *bp;
+                sp = screenp;
+                sp2 = screenp2;
+                sp3 = screenp3;
+                bp = bufp;
+    
+                for (x=x1; x<x2; ++x)
+                {
+                    *sp++ = *bp;
+                    *sp++ = *bp;
+                    *sp++ = *bp;
+                    *sp2++ = *bp;
+                    *sp2++ = *bp;
+                    *sp2++ = *bp;
+                    *sp3++ = *bp;
+                    *sp3++ = *bp;
+                    *sp3++ = *bp;
+                    ++bp;
+                }
+                screenp += pitch;
+                screenp2 += pitch;
+                screenp3 += pitch;
+                bufp += SCREENWIDTH;
+            }
+    
+            SDL_UnlockSurface(screen);
+        }
+    }
+}
 
 static void UpdateRect(int x1, int y1, int x2, int y2)
 {
@@ -982,11 +1029,15 @@
     {
         screenmultiply = 2;
     }
+    else if (M_CheckParm("-3"))
+    {
+        screenmultiply = 3;
+    }
 
     if (screenmultiply < 1)
         screenmultiply = 1;
-    if (screenmultiply > 2)
-        screenmultiply = 2;
+    if (screenmultiply > 3)
+        screenmultiply = 3;
 
     if (fullscreen)
     {