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

📄 bbt888.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 BitLen  24
#define TileMask    (TileLen-1)
#define TileBpl     (3<<TileSft)


int
_GL_bbtileRGB888(GL_WP *gp) 
{
    int     sbitp,dbitp,words,lines, tj ;
    DWORD   dmask_head, dmask_tail ;
    BYTE    *dadr, *tilep ;

    dbitp = gp->bitblt.dbitp ;
    lines = gp->bitblt.ty ;
    dadr  = _AddAdr(gp->hwork.VRAMadr[gp->hwork.page][0],gp->bitblt.doffs) ;

    AdjAccAdr32(dadr,dbitp) ;

    dmask_head = (DWORD)-1>>dbitp ;
    words      = gp->bitblt.tx * BitLen + dbitp ;
    dmask_tail = ~((DWORD)-1L >> (words&31)) ;
    words    >>= 5 ;

    if(words==0){
        dmask_head &= dmask_tail ;
        dmask_tail  = 0 ;
    } else
        words-- ;

    tj     =  ( gp->bitblt.dy - gp->bitblt.by ) & TileMask ;

    while(lines-->0){

        register    DWORD   *dst ;
        register    int     n, count ;
        register    long    soffs ;

        soffs  = ( ( gp->bitblt.dx - gp->bitblt.bx ) & TileMask) * (BitLen>>3) ;
        sbitp  = 0 ;
        AdjAccOffs32(soffs, sbitp) ;

        dst    = (DWORD *)dadr ;
        tilep  = (BYTE *)gp->bitblt.tilep + tj * TileBpl ;
        n      = sbitp-dbitp ;

        if(n!=0){
            register    DWORD   d, o ;
            register    int     un ;

            d = *(DWORD *)(tilep+soffs) ;
            soffs += 4 ;
            if(soffs>=TileBpl)
                soffs = 0 ;

            if(n<0){
                un  = -n ;
                n  += 32 ;
                *dst++ = *dst & ~dmask_head | (d>>un) & dmask_head ;
            } else {
                un = 32 - n ;
                o  = *(DWORD *)(tilep+soffs) ;
                soffs += 4 ;
                if(soffs>=TileBpl)
                    soffs = 0 ;
                *dst++ = *dst & ~dmask_head | ((d<<n)|(o>>un)) & dmask_head ;
                d = o ;
            }

            count = words ;
            while(count--){
                o = *(DWORD *)(tilep+soffs) ;
                soffs += 4 ;
                if(soffs>=TileBpl)
                    soffs = 0 ;
                *dst++ = (d<<n)|(o>>un) ;
                d = o ;
            }

            if(dmask_tail){
                o = *(DWORD *)(tilep+soffs) ;
                *dst = *dst & ~dmask_tail | ((d<<n)|(o>>un)) & dmask_tail ;
            }
            dadr += gp->bitblt.dlbytes ;

        } else {

            *dst++ = *dst & ~dmask_head | *(DWORD *)(tilep+soffs) & dmask_head ;
            soffs += 4 ;
            if(soffs>=TileBpl)
                soffs = 0 ;

            count = words ;
            while(count--){
                *dst++ = *(DWORD *)(tilep+soffs) ;
                soffs += 4 ;
                if(soffs>=TileBpl)
                    soffs = 0 ;
            }

            if(dmask_tail){
                *dst = *dst & ~dmask_tail | *(DWORD *)(tilep+soffs) & dmask_tail ;
            }
            dadr += gp->bitblt.dlbytes ;

        }

        tj = (tj+1) & TileMask ;
    }
    return GL_Ok ;
}

⌨️ 快捷键说明

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