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

📄 bbp888.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  24int_GL_bbputRGB888(GL_WP *gp){    int     sbitp,dbitp,words,lines ;    DWORD   dmask_head, dmask_tail ;    BYTE    *sadr, *dadr ;    sadr  = (BYTE *)gp->bitblt.soffs ;    sbitp = 0 ;    dbitp = 0 ;    lines = gp->bitblt.ty ;    dadr  = _AddAdr(gp->hwork.VRAMadr[gp->hwork.page][0],gp->bitblt.doffs) ;    if((gp->bitblt.logic&GL_TRANS)==0){        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-- ;        while(lines--){            register DWORD   *src ;            register DWORD   *dst ;            register DWORD   d, o ;            register int     n, count ;            AdjAccAdr32(sadr,sbitp) ;            src = (DWORD *)sadr ;            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 {                    o = *src++ ;                    un = 32 - n ;                    *dst++ = *dst & ~dmask_head | ((d<<n)|(o>>un)) & dmask_head ;                    d = o ;                }                count = words ;                while(count--){                    o = *src++ ;                    *dst++ = (d<<n)|(o>>un) ;                    d = o ;                }                if(dmask_tail)                    *dst = *dst & ~dmask_tail | ((d<<n)|(*src>>un)) & dmask_tail ;                sadr   = _AddAdr(sadr, gp->bitblt.slbytes) ;                dadr   = _AddAdr(dadr, gp->bitblt.dlbytes) ;            } else {                *dst++ = *dst & ~dmask_head | *src++ & dmask_head ;                count = words ;                while(count--)                    *dst++ = *src++ ;                if(dmask_tail)                    *dst = *dst & ~dmask_tail| *src & dmask_tail ;                sadr   = _AddAdr(sadr, gp->bitblt.slbytes) ;                dadr   = _AddAdr(dadr, gp->bitblt.dlbytes) ;            }        }    } else {        DWORD color = gp->bitblt.bcolor ;        while(lines--){            register DWORD  *src ;            register BYTE   *dst ;            register DWORD  d,sbuf ;            register int    n ;            AdjAccAdr32(sadr,sbitp) ;            src   = (DWORD *)sadr ;            sbuf  = *src++ << sbitp ;            n     = 32-sbitp ;            words = gp->bitblt.tx ;            dst   = dadr ;            while(words--){                if(n>=24){                    d      = sbuf>>8 ;                    sbuf <<= 24 ;                    n     -= 24 ;                } else {                    d      = sbuf ;                    sbuf   = *src++ ;                    d      = (d | (sbuf >> n))>>8 ;                    sbuf <<= 24-n ;                    n     += 32-24 ;                }                if(d!=color){                    dst[0] = (BYTE)(d>>16) ;                    dst[1] = (BYTE)(d>>8 ) ;                    dst[2] = (BYTE)(d) ;                }                dst = dst + 3 ;            }            sadr   = _AddAdr(sadr, gp->bitblt.slbytes) ;            dadr   = _AddAdr(dadr, gp->bitblt.dlbytes) ;        }    }    return GL_Ok ;}

⌨️ 快捷键说明

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