bbg888.c

来自「linux嵌入式开发程序」· C语言 代码 · 共 92 行

C
92
字号

/*===========================================================================
        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  24int_GL_bbgetRGB888(GL_WP *gp){    long    soffs ;    int     sbitp,dbitp,words,lines ;    DWORD   dmask_head, dmask_tail ;    char    *dadr ;    soffs = gp->bitblt.soffs ;    sbitp = gp->bitblt.sbitp ;    dadr  = (char *)gp->bitblt.doffs ;    dbitp = gp->bitblt.dbitp ;    lines = gp->bitblt.ty ;    while(lines--){        AdjAccOffs32(soffs,sbitp) ;        AdjAccAdr32(dadr, dbitp) ;        dmask_head = (DWORD)-1L >> 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-- ;        {            register DWORD   *src ;            register DWORD   *dst ;            register DWORD   d, o ;            register int     n ;            src = _AddAdr(gp->hwork.VRAMadr[gp->hwork.page][0],soffs) ;            dst = (DWORD  *)dadr ;            n = sbitp-dbitp ;            if(n){                register int un ;                d = *src++ ;                if(n<0){                    un = -n ;                    n += 32 ;                    *dst++ = *dst & ~dmask_head | (d>>un) & dmask_head ;                } else {                    un = 32 - n ;                    o = *src++ ;                    d = (d<<n)|(o>>un) ;                    *dst++ = *dst & ~dmask_head | d & dmask_head ;                    d = o ;                }                while(words--){                    o = *src++ ;                    *dst++ = (d<<n)|(o>>un) ;                    d = o ;                }                if(dmask_tail)                    *dst = *dst & ~dmask_tail| ((d<<n)|(*src>>un)) & dmask_tail ;             } else {                *dst++ = *dst & ~dmask_head | *src++ & dmask_head ;                while(words--)                    *dst++ = *src++ ;                if(dmask_tail)                    *dst = *dst & ~dmask_tail| *src & dmask_tail ;            }        }        soffs += gp->bitblt.slbytes ;        dadr   = _AddAdr(dadr, gp->bitblt.dlbytes) ;    }    return GL_Ok ;}

⌨️ 快捷键说明

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