⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 generic_64.h

📁 DirectFB-1.0.1可用于linux的嵌入式GUI
💻 H
字号:
/*   (c) Copyright 2001-2007  The DirectFB Organization (directfb.org)   (c) Copyright 2000-2004  Convergence (integrated media) GmbH   All rights reserved.   Written by Denis Oliver Kropp <dok@directfb.org>,              Andreas Hundt <andi@fischlustig.de>,              Sven Neumann <neo@directfb.org>,              Ville Syrjälä <syrjala@sci.fi> and              Claudio Ciccani <klan@users.sf.net>.   This library is free software; you can redistribute it and/or   modify it under the terms of the GNU Lesser General Public   License as published by the Free Software Foundation; either   version 2 of the License, or (at your option) any later version.   This library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Lesser General Public License for more details.   You should have received a copy of the GNU Lesser General Public   License along with this library; if not, write to the   Free Software Foundation, Inc., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, USA.*/static void Cop_to_Aop_32_64( GenefxState *gfxs ){     int    w, l = gfxs->length;     u32   *D    = gfxs->Aop[0];     u32    Cop  = gfxs->Cop;     u64    DCop = ((u64)Cop << 32) | Cop;          if ((long)D & 4) {          *D++ = Cop;          l--;     }     for (w = l >> 1; w; w--) {          *((u64*)D) = DCop;          D += 2;     }          if (l & 1)          *D = Cop;}static void Bop_rgb32_Kto_Aop_64( GenefxState *gfxs ){     int    w, l  = gfxs->length;     u32   *D     = gfxs->Aop[0];     u32   *S     = gfxs->Bop[0];     u32    Skey  = gfxs->Skey;     u64    DSkey = ((u64)Skey << 32) | Skey;          if ((long)D & 4) {          if (*S != Skey)               *D = *S;          D++;          S++;          l--;     }                    for (w = l >> 1; w; w--) {          u64 s = *((u64*)S);          if (s != DSkey) {               if ((s & 0x00ffffff00000000ull) !=                     (DSkey & 0x00ffffff00000000ull)) {                    if ((s & 0x0000000000ffffffull) !=                          (DSkey & 0x0000000000ffffffull)) {                         *((u64*)D) = s;                    }                    else {#ifdef WORDS_BIGENDIAN                         D[0] = (u32)(s >> 32);#else                         D[1] = (u32)(s >> 32);#endif                    }               }               else {#ifdef WORDS_BIGENDIAN                    D[1] = (u32)s;#else                    D[0] = (u32)s;#endif               }          }          S += 2;          D += 2;     }          if (l & 1) {                 /* do the last potential pixel */          if (*S != Skey)               *D = *S;     }}static void Bop_rgb32_toK_Aop_64( GenefxState *gfxs ){     int    w, l  = gfxs->length;     u32   *D     = gfxs->Aop[0];     u32   *S     = gfxs->Bop[0];     u32    Dkey  = gfxs->Dkey;     u64    DDkey = ((u64)Dkey << 32) | Dkey;          if ((long)D & 4) {          if (*D == Dkey)               *D = *S;          D++;          S++;          l--;     }                    for (w = l >> 1; w; w--) {          u64 d = *((u64*)D);          if (d != DDkey) {               if ((d & 0x00ffffff00000000ull) ==                    (DDkey & 0x00ffffff00000000ull)) {                    if ((d & 0x0000000000ffffffull) ==                         (DDkey & 0x0000000000ffffffull)) {                         *((u64*)D) = *((u64*)S);                    }                    else {#ifdef WORDS_BIGENDIAN                         D[0] = S[0];#else                         D[1] = S[1];#endif                    }               }               else {#ifdef WORDS_BIGENDIAN                    D[1] = S[1];#else                    D[0] = S[0];#endif               }          }          S += 2;          D += 2;     }          if (l & 1) {                 /* do the last potential pixel */          if (*D == Dkey)               *D = *S;     }}static void Bop_32_Sto_Aop_64( GenefxState *gfxs ){     int    w, l   = gfxs->length;     int    i      = 0;     u32   *D      = gfxs->Aop[0];     u32   *S      = gfxs->Bop[0];     int    SperD  = gfxs->SperD;     int    SperD2 = SperD << 1;          if ((long)D & 4) {          *D++ = *S;          i += SperD;          l--;     }          for (w = l >> 1; w; w--) {#ifdef WORDS_BIGENDIAN          *((u64*)D) = ((u64)S[i>>16] << 32) | S[(i+SperD)>>16];#else          *((u64*)D) = ((u64)S[(i+SperD)>>16] << 32) | S[i>>16];#endif          D += 2;          i += SperD2;     }          if (l & 1)          *D = S[i>>16];}static void Dacc_xor_64( GenefxState *gfxs ){     int    w     = gfxs->length;     u64   *D     = (u64*)gfxs->Dacc;     u64    color;#ifdef WORDS_BIGENDIAN     color = ((u64)gfxs->color.b << 48) |             ((u64)gfxs->color.g << 32) |             ((u64)gfxs->color.r << 16) |             ((u64)gfxs->color.a);#else     color = ((u64)gfxs->color.a << 48) |             ((u64)gfxs->color.r << 32) |             ((u64)gfxs->color.g << 16) |             ((u64)gfxs->color.b);#endif     for (; w; w--) {          *D ^= color;          D++;     }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -