📄 bbp888.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 + -