📄 bbp422.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 16#define BitSft 4int_GL_bbputYUV422(GL_WP *gp){ long doffs ; int sbitp,dbitp,words,lines ; char *sadr ; sadr = (char *)gp->bitblt.soffs ; sbitp = gp->bitblt.sbitp ; doffs = gp->bitblt.doffs ; dbitp = gp->bitblt.dbitp ; lines = gp->bitblt.ty ; if(gp->bitblt.tx<=0||lines<=0) return GL_Ok ; AdjAccAdr32(sadr,sbitp) ; AdjAccOffs32(doffs,dbitp) ; words = ((gp->bitblt.tx<<BitSft) + dbitp)>>5 ; if((gp->bitblt.logic&GL_TRANS)==0){ if(sbitp==dbitp){ while(lines-->0){ register DWORD *src ; register DWORD *dst ; register DWORD d, o ; register int tx ; tx = gp->bitblt.tx ; src = (DWORD *)sadr ; dst = _AddAdr(gp->hwork.VRAMadr[gp->hwork.page][0],doffs) ; if(words>0){ if(dbitp>0){ d = *src ; o = *dst ; *dst = ( d & 0x0000ff00 ) | ( o & 0xff000000 ) | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ; src++ ; dst++ ; tx-- ; } while(tx>=2){ *dst++ = *src++ ; tx -= 2 ; } } if(tx>0){ d = *src ; o = *dst ; *dst = ( d & 0xff000000 ) | ( o & 0x0000ff00 ) | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ; } sadr = _AddAdr(sadr, gp->bitblt.slbytes) ; doffs += gp->bitblt.dlbytes ; } } else { while(lines-->0){ register DWORD *src ; register DWORD *dst ; register DWORD d, o ; register int tx ; tx = gp->bitblt.tx ; src = (DWORD *)sadr ; dst = _AddAdr(gp->hwork.VRAMadr[gp->hwork.page][0],doffs) ; d = src[0] ; if(dbitp>0){ o = *dst ; *dst = ((d>>16) & 0x0000ff00 ) | ( o & 0xff000000 ) | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ; tx-- ; dst++ ; } while(tx>=2){ o = src[1] ; src++ ; tx -= 2 ; *dst = ((d&0x0000ff00)<<16) | ((o>>16) & 0x0000ff00) | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ; dst++ ; d = o ; } if(tx>0){ o = *dst ; *dst = (( d & 0x0000ff00 )<<16) | ( o & 0x0000ff00 ) | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ; } sadr = _AddAdr(sadr, gp->bitblt.slbytes) ; doffs += gp->bitblt.dlbytes ; } } } else { DWORD color = gp->bitblt.bcolor ; if(sbitp==dbitp){ while(lines-->0){ register DWORD *src ; register DWORD *dst ; register DWORD d, o ; register int tx ; tx = gp->bitblt.tx ; src = (DWORD *)sadr ; dst = _AddAdr(gp->hwork.VRAMadr[gp->hwork.page][0],doffs) ; if(words>0){ if(dbitp>0){ d = *src ; if(d!=color){ o = *dst ; *dst = ( d & 0x0000ff00 ) | ( o & 0xff000000 ) | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ; } src++ ; dst++ ; tx-- ; } while(tx>=2){ d = *src++ ; if(d!=color) *dst = d ; dst++ ; tx -= 2 ; } } if(tx>0){ d = *src ; if(d!=color){ o = *dst ; *dst = ( d & 0xff000000 ) | ( o & 0x0000ff00 ) | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ; } } sadr = _AddAdr(sadr, gp->bitblt.slbytes) ; doffs += gp->bitblt.dlbytes ; } } else { while(lines-->0){ register DWORD *src ; register DWORD *dst ; register DWORD d, o ; register int tx ; tx = gp->bitblt.tx ; src = (DWORD *)sadr ; dst = _AddAdr(gp->hwork.VRAMadr[gp->hwork.page][0],doffs) ; d = src[0] ; if(dbitp>0){ if(d!=color){ o = *dst ; *dst = ((d>>16) & 0x0000ff00 ) | ( o & 0xff000000 ) | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ; } tx-- ; dst++ ; } while(tx>=2){ o = src[1] ; src++ ; tx -= 2 ; if(d!=color&&o!=color){ *dst = ((d&0x0000ff00)<<16) | ((o>>16) & 0x0000ff00) | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ; } else if(d!=color||o!=color){ register DWORD b = *dst ; if(d!=color){ *dst = ( ( d & 0x0000ff00 ) << 16 ) | ( b & 0x0000ff00 ) | ( ( ( (d&0x00ff00ff)+(b&0x00ff00ff) )>>1)& 0x00ff00ff ) ; } else { *dst = ( (o>>16) & 0x0000ff00 ) | ( b & 0xff000000 ) | ( ( ( (o&0x00ff00ff)+(b&0x00ff00ff) )>>1)& 0x00ff00ff ) ; } } dst++ ; d = o ; } if(tx>0){ if(d!=color){ o = *dst ; *dst = (( d & 0x0000ff00 )<<16) | ( o & 0x0000ff00 ) | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ; } } sadr = _AddAdr(sadr, gp->bitblt.slbytes) ; doffs += gp->bitblt.dlbytes ; } } } return GL_Ok ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -