亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? swline.cpp

?? 可用于嵌入式編程學習
?? CPP
字號:
/*

Copyright (c) 1995-2000 Microsoft Corporation.  All rights reserved.

*/
#include "precomp.h"

SCODE GPE::EmulatedLine( GPELineParms *pParms )
{
	int Bpp = EGPEFormatToBpp[pParms->pDst->Format()];
	unsigned long baseMask = (2 << (Bpp-1) )-1;
	int remainingPels;
	unsigned char *Ptr;
	unsigned char *newPtr;
	int i;
	long accum = (long)(pParms->dN) + pParms->llGamma;
	long axstp = (long)(pParms->dN);
	long dgstp = (long)(pParms->dN) - (long)(pParms->dM);
	unsigned char rop2Mark = (unsigned char)(pParms->mix);
	unsigned char rop2Space = (unsigned char)(pParms->mix >> 8);
	unsigned char rop2;
	unsigned long mask;
	long stride = pParms->pDst->Stride();
	unsigned long style = pParms->style;
	int styleState = pParms->styleState;

	DEBUGMSG(GPE_ZONE_LINE,(TEXT("GPE::EmulatedLine\r\n")));
	DEBUGMSG(GPE_ZONE_LINE,(TEXT("Solid color 0x%08x\r\n"),pParms->solidColor));
	DEBUGMSG(GPE_ZONE_LINE,(TEXT("Start X=%d,Y=%d\r\n"),pParms->xStart,pParms->yStart));
	DEBUGMSG(GPE_ZONE_LINE,(TEXT("iDir:%d accum %d axstp %d dgstp %d\r\n"),
		pParms->iDir,accum,axstp,dgstp));
	DEBUGMSG(GPE_ZONE_LINE,(TEXT("Mix: %04x Bpp: %d\r\n"),pParms->mix,Bpp));



	int MajorDPtr = 0;
	int MinorDPtr = 0;
	int MajorDPixel = 0;
	int MinorDPixel = 0;

	if(	pParms->pDst->InVideoMemory() )
	{
		// If we have a pending blt and now attempt a software operation using
		// video memory, the pipeline must be flushed.
		WaitForNotBusy();
	}



	if( Bpp != 24 )
	{
		unsigned long pen[32];
		unsigned long penMask[32];
		int pixelsPerDWord = 32 / Bpp;
		int subPixel;
		unsigned long cache;
		unsigned long D;
		unsigned long P;

		for( i=0; i<pixelsPerDWord; i++ )
		{
			int shift = i*Bpp;			// Pixel 0 is in least significant byte
			if( Bpp < 8 )			// Pixel 0 is in most significant bits of byte
				shift^=(8-Bpp);
			pen[i] = (pParms->solidColor & baseMask)<<shift;
			penMask[i] = baseMask<<shift;
			DEBUGMSG(GPE_ZONE_LINE,(TEXT("DWord Pixel %d pen: %08x penMask: %08x\r\n"),
				i,pen[i],penMask[i]));
		}

		switch( pParms->iDir )
		{
			case 0: MajorDPixel =  1; MinorDPtr =  stride; break;
			case 1: MinorDPixel =  1; MajorDPtr =  stride; break;
			case 2: MinorDPixel = -1; MajorDPtr =  stride; break;
			case 3: MajorDPixel = -1; MinorDPtr =  stride; break;
			case 4: MajorDPixel = -1; MinorDPtr = -stride; break;
			case 5: MinorDPixel = -1; MajorDPtr = -stride; break;
			case 6: MinorDPixel =  1; MajorDPtr = -stride; break;
			case 7: MajorDPixel =  1; MinorDPtr = -stride; break;
			default:
				DEBUGMSG(GPE_ZONE_ERROR,(TEXT("Invalid direction: %d\r\n"),pParms->iDir));
				return E_INVALIDARG;
		}


		Ptr = ((unsigned char *)pParms->pDst->Buffer())
			  + pParms->yStart * stride
			  + (((pParms->xStart * Bpp) >> 5 ) << 2 );

		subPixel = pParms->xStart % pixelsPerDWord;
		
		cache = *(unsigned long *)Ptr;

		for( remainingPels = pParms->cPels; remainingPels; remainingPels-- )
		{
			DEBUGMSG(GPE_ZONE_LINE,(TEXT("Remain:%d Ptr:%08x SubPix:%d cache:%08x\r\n"),
				remainingPels,Ptr,subPixel,cache ));
			
			D = cache;
			P = pen[subPixel];

			if( ( style >> ((styleState++) & 31 ) ) & 1 )
				rop2 = rop2Space;
			else
				rop2 = rop2Mark;

			switch( rop2 )
			{
				case 1:	 D = 0;				break;
				case 2:  D = ~( P | D );	break;
				case 3:	 D = ~P & D;		break;
				case 4:	 D = ~P;			break;
				case 5:	 D = P & ~D;		break;
				case 6:	 D = ~D;			break;
				case 7:	 D = P ^ D;			break;
				case 8:	 D = ~( P & D );	break;
				case 9:	 D = P & D;			break;
				case 10: D = ~( P ^ D );	break;
				case 11: D = D;				break;
				case 12: D = ~P | D;		break;
				case 13: D = P;				break;
				case 14: D = P | ~D;		break;
				case 15: D = P | D;			break;
				case 16: D = 0xffffffff;	break;
				default:
					DEBUGMSG(GPE_ZONE_ERROR,(TEXT("Invalid rop2: %d\r\n"),rop2));
					return E_INVALIDARG;
			}

			mask = penMask[subPixel];

			cache = ( cache & ~mask ) | ( D & mask );

			DEBUGMSG(GPE_ZONE_LINE,(TEXT("Result: P %08x, D %08x, mask %08x, cache %08x\r\n"),
				P, D, mask, cache ));
			

			if( remainingPels == 1 )
			{
				*(unsigned long *)Ptr = cache;
				break;
			}

			newPtr = Ptr;
			newPtr += MajorDPtr;
			subPixel += MajorDPixel;
			if( axstp )		// check for vertical/horizontal
			{
				if( accum < 0 )
				{
					DEBUGMSG(GPE_ZONE_LINE,(TEXT("Straight accum=%d axstp=%d\r\n"),accum,axstp));

					accum += axstp;
				}
				else
				{
					DEBUGMSG(GPE_ZONE_LINE,(TEXT("Diagonal accum=%d dgstp=%d\r\n"),accum,dgstp));
					newPtr += MinorDPtr;
					subPixel += MinorDPixel;
					accum += dgstp;
				}
			}
			if( subPixel < 0 )
			{
				newPtr-=4;
				subPixel += pixelsPerDWord;
			}
			else if( subPixel >= pixelsPerDWord )
			{
				newPtr+=4;
				subPixel -= pixelsPerDWord;
			}

			if( newPtr != Ptr )
			{
				*(unsigned long *)Ptr = cache;
				Ptr = newPtr;
				cache = *(unsigned long *)Ptr;
			}
		}

	}
	else
	{
		unsigned char P0,P1,P2;	// The pen (i.e. solid color), split into three bytes

		// For 24bpp, we do brute force byte-by-byte accesses for each pixel
		switch( pParms->iDir )
		{
			case 0: MajorDPtr =  3; MinorDPtr =  stride; break;
			case 1: MinorDPtr =  3; MajorDPtr =  stride; break;
			case 2: MinorDPtr = -3; MajorDPtr =  stride; break;
			case 3: MajorDPtr = -3; MinorDPtr =  stride; break;
			case 4: MajorDPtr = -3; MinorDPtr = -stride; break;
			case 5: MinorDPtr = -3; MajorDPtr = -stride; break;
			case 6: MinorDPtr =  3; MajorDPtr = -stride; break;
			case 7: MajorDPtr =  3; MinorDPtr = -stride; break;
			default:
				DEBUGMSG(GPE_ZONE_ERROR,(TEXT("Invalid direction: %d\r\n"),pParms->iDir));
				return E_INVALIDARG;
		}

		Ptr = ((unsigned char *)pParms->pDst->Buffer())
			  + pParms->yStart * stride
			  + pParms->xStart * 3;

		P0 = ((unsigned char *)&(pParms->solidColor))[0];
		P1 = ((unsigned char *)&(pParms->solidColor))[1];
		P2 = ((unsigned char *)&(pParms->solidColor))[2];

		for( remainingPels = pParms->cPels; remainingPels; remainingPels-- )
		{
			
			if( ( style >> ((styleState++) & 31 ) ) & 1 )
				rop2 = rop2Space;
			else
				rop2 = rop2Mark;

			switch( rop2 )
			{
				case 1:	 Ptr[0] = 0;				Ptr[1] = 0;				   Ptr[2] = 0;				   break;
				case 2:  Ptr[0] = ~( P0 | Ptr[0] );	Ptr[1] = ~( P1 | Ptr[1] ); Ptr[2] = ~( P2 | Ptr[2] );  break;	
				case 3:	 Ptr[0] = ~P0 & Ptr[0];		Ptr[1] = ~P1 & Ptr[1];	   Ptr[2] = ~P2 & Ptr[2];	   break;	
				case 4:	 Ptr[0] = ~P0;				Ptr[1] = ~P1;			   Ptr[2] = ~P2;			   break;
				case 5:	 Ptr[0] = P0 & ~Ptr[0];		Ptr[1] = P1 & ~Ptr[1];	   Ptr[2] = P2 & ~Ptr[2];	   break;	
				case 6:	 Ptr[0] = ~Ptr[0];			Ptr[1] = ~Ptr[1];		   Ptr[2] = ~Ptr[2];		   break;	
				case 7:	 Ptr[0] = P0 ^ Ptr[0];		Ptr[1] = P1 ^ Ptr[1];	   Ptr[2] = P2 ^ Ptr[2];	   break;		
				case 8:	 Ptr[0] = ~( P0 & Ptr[0] );	Ptr[1] = ~( P1 & Ptr[1] ); Ptr[2] = ~( P2 & Ptr[2] );  break;	
				case 9:	 Ptr[0] = P0 & Ptr[0];		Ptr[1] = P1 & Ptr[1];	   Ptr[2] = P2 & Ptr[2];	   break;		
				case 10: Ptr[0] = ~( P0 ^ Ptr[0] );	Ptr[1] = ~( P1 ^ Ptr[1] ); Ptr[2] = ~( P2 ^ Ptr[2] );  break;	
				case 11: Ptr[0] = Ptr[0];			Ptr[1] = Ptr[1];		   Ptr[2] = Ptr[2];			   break;	
				case 12: Ptr[0] = ~P0 | Ptr[0];		Ptr[1] = ~P1 | Ptr[1];	   Ptr[2] = ~P2 | Ptr[2];	   break;	
				case 13: Ptr[0] = P0;				Ptr[1] = P1;			   Ptr[2] = P2;				   break;
				case 14: Ptr[0] = P0 | ~Ptr[0];		Ptr[1] = P1 | ~Ptr[1];	   Ptr[2] = P2 | ~Ptr[2];	   break;	
				case 15: Ptr[0] = P0 | Ptr[0];		Ptr[1] = P1 | Ptr[1];	   Ptr[2] = P2 | Ptr[2];	   break;		
				case 16: Ptr[0] = 0xff;				Ptr[1] = 0xff;			   Ptr[2] = 0xff;			   break;
				default:
					DEBUGMSG(GPE_ZONE_ERROR,(TEXT("Invalid rop2: %d\r\n"),rop2));
					return E_INVALIDARG;
			}


			Ptr += MajorDPtr;

			if( axstp )		// check for vertical/horizontal
			{
				if( accum < 0 )
				{
					DEBUGMSG(GPE_ZONE_LINE,(TEXT("Straight accum=%d axstp=%d\r\n"),accum,axstp));

					accum += axstp;
				}
				else
				{
					DEBUGMSG(GPE_ZONE_LINE,(TEXT("Diagonal accum=%d dgstp=%d\r\n"),accum,dgstp));
					Ptr += MinorDPtr;
					accum += dgstp;
				}
			}
		}
	}
	
	return S_OK;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕在线观看不卡视频| 1区2区3区国产精品| 国产精品久久久久久久久免费樱桃| 亚洲欧美一区二区三区孕妇| 久久精品999| 色国产综合视频| 久久无码av三级| 午夜电影网亚洲视频| 成人黄色在线看| 国产在线精品视频| 夜夜爽夜夜爽精品视频| 男女男精品视频| 欧美韩国日本一区| 日本成人在线视频网站| 91色婷婷久久久久合中文| 精品国产一区二区亚洲人成毛片| 一二三区精品视频| 成+人+亚洲+综合天堂| xfplay精品久久| 日本 国产 欧美色综合| 91麻豆精品国产91久久久久| 亚洲最快最全在线视频| av午夜精品一区二区三区| 精品一区二区三区在线播放视频| 一个色妞综合视频在线观看| 麻豆国产精品视频| 成人免费视频网站在线观看| 91麻豆国产香蕉久久精品| 欧美综合亚洲图片综合区| 欧美一区二区在线视频| 国产三级一区二区| 亚洲国产精品尤物yw在线观看| 国内精品伊人久久久久av影院| 国内精品久久久久影院一蜜桃| 国产成人综合在线播放| 91麻豆免费在线观看| 欧美猛男gaygay网站| 久久久久久久久久久黄色| 日韩毛片一二三区| 久久精品国产在热久久| 91麻豆swag| 精品久久人人做人人爽| 一区二区免费视频| 国产一区免费电影| 欧美最猛性xxxxx直播| 国产午夜亚洲精品羞羞网站| 亚洲视频网在线直播| 国产一区二区精品在线观看| 欧美在线观看一区二区| 久久久久久久久久久久久女国产乱| 亚洲一区二区三区小说| 成人av片在线观看| 久久亚洲一区二区三区四区| 亚洲国产一区在线观看| 成人精品鲁一区一区二区| 91精品欧美综合在线观看最新| 中文字幕在线观看一区| 国产福利不卡视频| 日韩欧美一区二区在线视频| 亚洲一区免费观看| 99视频国产精品| 国产欧美日韩另类视频免费观看| 日本不卡1234视频| 欧美日韩精品三区| 性欧美疯狂xxxxbbbb| 91热门视频在线观看| 久久精品视频在线免费观看| 免费不卡在线观看| 欧美另类变人与禽xxxxx| 一区二区三区**美女毛片| eeuss鲁一区二区三区| 国产欧美va欧美不卡在线| 韩国av一区二区| 久久女同性恋中文字幕| 国内精品自线一区二区三区视频| 欧美变态tickling挠脚心| 免费人成精品欧美精品| 欧美精品18+| 免费人成黄页网站在线一区二区| 欧美日韩国产成人在线91| 亚洲成人av免费| 欧美久久久影院| 五月天婷婷综合| 欧美一级欧美一级在线播放| 日韩av网站免费在线| 91精品国产美女浴室洗澡无遮挡| 午夜av一区二区三区| 欧美福利一区二区| 日本不卡视频在线观看| 日韩欧美高清一区| 国产一区二区三区高清播放| 久久久久久综合| 不卡视频在线看| 亚洲影院久久精品| 欧美绝品在线观看成人午夜影视| 久久 天天综合| 国产清纯美女被跳蛋高潮一区二区久久w | 国产色婷婷亚洲99精品小说| 成人免费av网站| 一区二区三区四区中文字幕| 欧美精品v日韩精品v韩国精品v| 青青草国产成人99久久| 久久久99免费| 91丨国产丨九色丨pron| 午夜精品福利一区二区三区av| 日韩欧美国产小视频| www.在线欧美| 日韩中文字幕av电影| www久久精品| 在线观看网站黄不卡| 久久99精品久久久久久动态图| 韩国欧美国产1区| 成人激情黄色小说| 精品国精品国产| 亚洲欧洲一区二区在线播放| 国产乱码字幕精品高清av| 国产高清视频一区| 欧美日韩在线播放三区四区| 奇米精品一区二区三区在线观看一| 日本欧美韩国一区三区| 成人中文字幕合集| 一区二区三区中文字幕精品精品| 亚洲成人手机在线| 欧美va在线播放| 在线亚洲一区二区| 国产成人精品一区二| 亚洲第一福利一区| 欧美国产欧美亚州国产日韩mv天天看完整| 在线欧美一区二区| 成人美女视频在线观看| 奇米色777欧美一区二区| 伊人婷婷欧美激情| 中文字幕av一区二区三区免费看| 欧美乱熟臀69xxxxxx| 91啪亚洲精品| av亚洲精华国产精华| 国产激情精品久久久第一区二区 | 久久综合九色欧美综合狠狠| 在线观看免费一区| 99精品热视频| 福利91精品一区二区三区| 麻豆精品国产传媒mv男同| 午夜伦欧美伦电影理论片| 亚洲男女一区二区三区| 国产精品电影一区二区| 色综合中文综合网| 国产欧美日韩麻豆91| 欧美电影影音先锋| 欧美专区日韩专区| 色乱码一区二区三区88| 91在线一区二区| eeuss鲁片一区二区三区在线看| 国产成人精品免费网站| 国产一区激情在线| 国产一区二区在线看| 久久精品72免费观看| 久久精品国产精品亚洲精品| 蜜臀av一级做a爰片久久| 日韩国产欧美一区二区三区| 日韩国产欧美视频| 麻豆极品一区二区三区| 国产真实精品久久二三区| 久久9热精品视频| 国产激情91久久精品导航 | 欧美网站一区二区| 欧美人狂配大交3d怪物一区| 欧美网站大全在线观看| 91精品欧美综合在线观看最新| 欧美一区二区三区四区视频 | 中文字幕亚洲一区二区av在线| 国产精品国产精品国产专区不片| 日本一区二区电影| 亚洲乱码国产乱码精品精98午夜 | 亚洲欧美成aⅴ人在线观看| 一区二区三区中文字幕在线观看| 亚洲一卡二卡三卡四卡无卡久久| 亚洲电影在线播放| 毛片av一区二区| 懂色av一区二区三区蜜臀| 成人国产精品免费观看动漫| 91丨九色丨黑人外教| 欧美日韩高清影院| 久久人人超碰精品| 国产精品理论在线观看| 午夜av电影一区| 国产精品99久| 精品婷婷伊人一区三区三| 精品黑人一区二区三区久久 | 美女mm1313爽爽久久久蜜臀| 国产福利一区二区三区在线视频| 在线精品观看国产| wwwwxxxxx欧美| 亚洲午夜国产一区99re久久| 国产一区欧美二区| 欧美日韩综合在线免费观看| 国产精品无人区| 日本aⅴ精品一区二区三区| 91在线观看污| 日韩精品一区二| 亚洲动漫第一页|