stratagus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Stratagus-CVS] stratagus/src/video linedraw.c


From: Nehal Mistry
Subject: [Stratagus-CVS] stratagus/src/video linedraw.c
Date: Tue, 02 Dec 2003 00:12:52 -0500

CVSROOT:        /cvsroot/stratagus
Module name:    stratagus
Branch:         
Changes by:     Nehal Mistry <address@hidden>   03/12/02 00:12:52

Modified files:
        src/video      : linedraw.c 

Log message:
        fix trans pixel functions

Patches:
Index: stratagus/src/video/linedraw.c
diff -u stratagus/src/video/linedraw.c:1.57 stratagus/src/video/linedraw.c:1.58
--- stratagus/src/video/linedraw.c:1.57 Mon Dec  1 23:00:15 2003
+++ stratagus/src/video/linedraw.c      Tue Dec  2 00:12:51 2003
@@ -27,7 +27,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: linedraw.c,v 1.57 2003/12/02 04:00:15 nehalmistry Exp $
+//     $Id: linedraw.c,v 1.58 2003/12/02 05:12:51 nehalmistry Exp $
 
 //@{
 
@@ -468,22 +468,48 @@
 
 global void VideoDrawTransPixel16(Uint32 color, int x, int y, unsigned char 
alpha)
 {
-    // FIXME: todo
-/*
     Uint16* p;
+    unsigned long dp;
+
+    alpha = (255 - alpha) >> 3;
 
     VideoLockScreen();
+
     p = &((Uint16*)TheScreen->pixels)[x + y * VideoWidth];
-    *p = ((((*p & 0xF800) >> 11) * (255 - alpha) + ((color & 0xF800) >> 11) * 
alpha) << 3) |
-       ((((*p & 0x7E0) >> 5) * (255 - alpha) + ((color & 0x7E0) >> 5) * alpha) 
>> 3) |
-       (((*p &0x1F) * (255 - alpha) + (color & 0x1F) * alpha) >> 8);
+    color = (((color << 16) | color) & 0x07E0F81F);
+    dp = *p;
+    dp = ((dp << 16) | dp) & 0x07E0F81F;
+    dp = ((((dp - color) * alpha) >> 5) + color) & 0x07E0F81F;
+    *p = (dp >> 16) | dp;
+
     VideoUnlockScreen();
-*/
 }
 
 global void VideoDrawTransPixel32(Uint32 color, int x, int y, unsigned char 
alpha)
 {
-    // FIXME: todo
+    unsigned long sp2;
+    unsigned long dp1;
+    unsigned long dp2;
+    Uint32* p;
+
+    alpha = 255 - alpha;
+
+    VideoLockScreen();
+
+    p = &((Uint32*)TheScreen->pixels)[x + y * VideoWidth];
+
+    sp2 = (color & 0xFF00FF00) >> 8;
+    color &= 0x00FF00FF;
+
+    dp1 = *p;
+    dp2 = (dp1 & 0xFF00FF00) >> 8;
+    dp1 &= 0x00FF00FF;
+
+    dp1 = ((((dp1-color) * alpha) >> 8) + color) & 0x00FF00FF;
+    dp2 = ((((dp2-sp2) * alpha) >> 8) + sp2) & 0x00FF00FF;
+    *p = (dp1 | (dp2 << 8));
+
+    VideoUnlockScreen();
 }
 
 global void VideoDrawPixelClip(Uint32 color, int x, int y)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]