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

📄 bbm422.c

📁 linux嵌入式开发程序
💻 C
字号:

/*===========================================================================
        2D Graphics Library
        ALL RIGHTS RESERVED, COPYRIGHT (C) FUJITSU LIMITED 1993-2002
        LICENSED MATERIAL - PROGRAM PROPERTY OF FUJITSU LIMITED
 ===========================================================================*/

#include "gl.h"
#include "defhook.h"

#define BitSft          4


int
_GL_bbmaskYUV422(GL_WP *gp)
{
    DWORD   color1, color2, color3 ;
    long    doffs ;
    int     dbitp, lines, words, ti, tj ;
    BYTE    *sadr ;

    color3 = gp->bitblt.color ;
    color1 = color3 & 0x00ffffff ;
    color2 = color3 & 0xffff00ff ;

    doffs = gp->bitblt.doffs ;
    dbitp = gp->bitblt.dbitp ;
    lines = gp->bitblt.ty ;

    AdjAccOffs32(doffs,dbitp) ;
    words = ((gp->bitblt.tx<<BitSft) + dbitp)>>5 ;

    sadr  = (BYTE *)gp->bitblt.tilep ;
    ti    =  (gp->bitblt.dx - gp->bitblt.bx) & 0x1f ;
    tj    = ((gp->bitblt.dy - gp->bitblt.by) & 0x1f) << (MaskSft-3) ;

    while(lines-->0){
        register DWORD  *dst ;
        register DWORD  mask,dots ;
        register int    tx ;

        dots    = *(DWORD *)(sadr+tj) ;
        dst     = _AddAdr(gp->hwork.VRAMadr[gp->hwork.page][0],doffs) ;
        tx      = gp->bitblt.tx ;

        if(dots!=0){
            dots    = (dots << ti) | (dots >> (32-ti)) ;
            if(words>0){
                if(dbitp>0){
                    mask = dots >> 31 ;
                    dots = (dots<<1) | mask ;
                    if(mask){
                        *dst = *dst & 0xff000000 | color1 ;
                    }
                    dst++ ;
                    tx-- ;
                }
                while(tx>=2){
                    tx -= 2 ;
                    mask = dots >> 30 ;
                    dots = (dots<<2) | mask ;
                    switch(mask){
                    case 1:
                        *dst = *dst & 0xff000000 | color1 ;
                        break ;
                    case 2:
                        *dst = *dst & 0x0000ff00 | color2 ;
                        break ;
                    case 3:
                        *dst = color3 ;
                        break ;
                    }
                    dst++ ;
                }
            }
            if(tx>0){
                if((long)dots<0){
                    *dst = *dst & 0x0000ff00 | color2 ;
                }
            }
        }
        tj += MaskBpl ;
        tj &= MaskBpp-1 ;
        doffs += gp->bitblt.dlbytes ;
    }
    return GL_Ok ;
}



⌨️ 快捷键说明

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