📄 cbbm16.c
字号:
/*#define _DEBUG 1*//************************************************************************* * 2D Graphics Library * * ALL RIGHTS RESERVED, COPYRIGHT (C) FUJITSU LIMITED 1993-2002 * * LICENSED MATERIAL - PROGRAM PROPERTY OF FUJITSU LIMITED * *************************************************************************/#include <stdio.h>#include "gl.h"#include "defhook.h"extern DWORD (*_GL_LogicTable[])(DWORD,DWORD) ;/* BitBLT mask for 4 bits x 1 plane */const WORD BitBLTMask4Table[16] = { 0x0000, 0x000f, 0x00f0, 0x00ff, 0x0f00, 0x0f0f, 0x0ff0, 0x0fff, 0xf000, 0xf00f, 0xf0f0, 0xf0ff, 0xff00, 0xff0f, 0xfff0, 0xffff} ;intBitBLTMask16(GL_WP *gp){ int i, n, lines, width , dbitp ; DWORD mask, image, d, o ; DWORD (*trns1)(DWORD, DWORD) ; BYTE *dadr, *dst ; int bx,bbx,by; DWORD *ip; DWORD color ; DWORD imagemask[4] ;#ifdef _DEBUGputs("BitBLTMask16\r") ;#endif if(gp->bitblt.tx==0) return GL_Ok ; lines = gp->bitblt.ty ; if(lines==0) return GL_Ok ; trns1 = _GL_LogicTable[gp->bitblt.logic] ; bx = (gp->bitblt.dx - gp->bitblt.bx) & 0x1f; bbx = 32-bx; by = gp->bitblt.dy - gp->bitblt.by; ip = (DWORD *)gp->bitblt.tilep; color = gp->bitblt.color ; color |= color << 4 ; color |= color << 8 ; color |= color << 16 ; dadr = (BYTE *)gp->hwork.VRAMadr[gp->hwork.page][0] + gp->bitblt.doffs ; dbitp = gp->bitblt.dbitp ;#ifdef _DEBUGprintf("w=%d l=%d ip=%08X c=%08X dadr=%08X dbitp=%d\r\n", gp->bitblt.tx, lines, ip, color,dadr, dbitp) ;#endif while(lines--){ AdjAccAdr32(dadr, dbitp) ; dst = dadr ; image = ip[by++&0x1f]; if(bx) image = (image<<bx) | (image>>bbx); mask = 0 ; i = 0 ; n = 8 ; width = gp->bitblt.tx ; if(dbitp){ i-- ; n -= dbitp >> 2 ; width += dbitp >> 2 ; }#ifdef _DEBUGprintf("i=%d n=%d\r\n", i, n) ;#endif do { DWORD m = image >> 32-n ; mask = ((DWORD)BitBLTMask4Table[m>>4]<<16)|BitBLTMask4Table[m&0x0f] ; image =(image>>32-n)|(image<<n); if(width<8) goto last_word ; width -= 8 ; imagemask[i&3] = mask ; o = VR_UW(dst) ; d = (*trns1)(color, o) ; d = d & mask | o & ~mask ; VW_W(dst, d) ; dst += 4 ; n = 8 ; } while(++i<4) ; for(;;){ mask = imagemask[i++&3] ; if(width<8) break ; width -= 8 ; o = VR_UW(dst) ; d = (*trns1)(color, o) ; d = d & mask | o & ~mask ; VW_W(dst, d) ; dst += 4 ; } last_word: if(width){ mask &= (long)0x80000000 >> width*4-1 ; o = VR_UW(dst) ; d = (*trns1)(color,o) ; d = d & mask | o & ~mask ; VW_W(dst, d ); } dadr += gp->bitblt.dlbytes ; } return GL_Ok ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -