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