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

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

?? xslgpe.cpp

?? X-scale 27x 平臺
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
			m_CursorSize.y = cY;
			m_CursorHotspot.x = xHot;
			m_CursorHotspot.y = yHot;

			andPtr = (UCHAR*)pMask->Buffer();
			xorPtr = (UCHAR*)pMask->Buffer() + (cY * pMask->Stride());

			// store OR and AND mask for new cursor
			for (row = 0; row < cY; row++)
			{
				andLine = &m_CursorAndShape[cX * row];
				xorLine = &m_CursorXorShape[cX * row];

				for (col = 0; col < cX / 8; col++)
				{
					bAnd = andPtr[row * pMask->Stride() + col];
					bXor = xorPtr[row * pMask->Stride() + col];

					for (bitMask = 0x0080, i = 0; i < 8; bitMask >>= 1, i++)
					{
						andLine[(col * 8) + i] = bAnd & bitMask ? 0xFF : 0x00;
						xorLine[(col * 8) + i] = bXor & bitMask ? 0xFF : 0x00;
					}
				}
			}
		}
	}

	return	S_OK;
}

SCODE	XSLGPE::MovePointer(INT xPosition, INT yPosition)
{
	DEBUGMSG(GPE_ZONE_CURSOR, (TEXT("XSLGPE::MovePointer(%d, %d)\r\n"), xPosition, yPosition));

	CursorOff();

	if (xPosition != -1 || yPosition != -1)
	{
		// compute new cursor rect
		m_CursorRect.left = xPosition - m_CursorHotspot.x;
		m_CursorRect.right = m_CursorRect.left + m_CursorSize.x;
		m_CursorRect.top = yPosition - m_CursorHotspot.y;
		m_CursorRect.bottom = m_CursorRect.top + m_CursorSize.y;

		CursorOn();
	}

	return	S_OK;
}

void	XSLGPE::WaitForNotBusy(void)
{
	DEBUGMSG (GPE_ZONE_INIT, (TEXT("XSLGPE::WaitForNotBusy\r\n")));
	return;
}

int		XSLGPE::IsBusy(void)
{
	DEBUGMSG (GPE_ZONE_INIT, (TEXT("XSLGPE::IsBusy\r\n")));
	return	0;
}

void	XSLGPE::GetPhysicalVideoMemory(unsigned long *physicalMemoryBase, unsigned long *videoMemorySize)
{
	DEBUGMSG (GPE_ZONE_INIT, (TEXT("XSLGPE::GetPhysicalVideoMemory\r\n")));

	*physicalMemoryBase = m_pvFlatFrameBuffer;
	*videoMemorySize = m_cbScanLineLength * m_cyPhysicalScreen;
}

#ifdef	DD_ENABLE
void	XSLGPE::GetVirtualVideoMemory(unsigned long *virtualMemoryBase, unsigned long *videoMemorySize)
{
	DEBUGMSG (GPE_ZONE_INIT, (TEXT("XSLGPE::GetVirtualVideoMemory\r\n")));

	*virtualMemoryBase = m_VirtualFrameBuffer;
	*videoMemorySize = m_cbScanLineLength * m_cyPhysicalScreen;
}
#endif	// DD_ENABLE

SCODE	XSLGPE::WrappedEmulatedLine (GPELineParms *lineParameters)
{
	SCODE	retval;
	RECT	bounds;
	int		N_plus_1;				// Minor length of bounding rect + 1

	// calculate the bounding-rect to determine overlap with cursor
	if (lineParameters->dN)			// The line has a diagonal component (we'll refresh the bounding rect)
	{
		N_plus_1 = 2 + ((lineParameters->cPels * lineParameters->dN) / lineParameters->dM);
	}
	else
	{
		N_plus_1 = 1;
	}

	switch(lineParameters->iDir)
	{
		case 0:
			bounds.left = lineParameters->xStart;
			bounds.top = lineParameters->yStart;
			bounds.right = lineParameters->xStart + lineParameters->cPels + 1;
			bounds.bottom = bounds.top + N_plus_1;
			break;
		case 1:
			bounds.left = lineParameters->xStart;
			bounds.top = lineParameters->yStart;
			bounds.bottom = lineParameters->yStart + lineParameters->cPels + 1;
			bounds.right = bounds.left + N_plus_1;
			break;
		case 2:
			bounds.right = lineParameters->xStart + 1;
			bounds.top = lineParameters->yStart;
			bounds.bottom = lineParameters->yStart + lineParameters->cPels + 1;
			bounds.left = bounds.right - N_plus_1;
			break;
		case 3:
			bounds.right = lineParameters->xStart + 1;
			bounds.top = lineParameters->yStart;
			bounds.left = lineParameters->xStart - lineParameters->cPels;
			bounds.bottom = bounds.top + N_plus_1;
			break;
		case 4:
			bounds.right = lineParameters->xStart + 1;
			bounds.bottom = lineParameters->yStart + 1;
			bounds.left = lineParameters->xStart - lineParameters->cPels;
			bounds.top = bounds.bottom - N_plus_1;
			break;
		case 5:
			bounds.right = lineParameters->xStart + 1;
			bounds.bottom = lineParameters->yStart + 1;
			bounds.top = lineParameters->yStart - lineParameters->cPels;
			bounds.left = bounds.right - N_plus_1;
			break;
		case 6:
			bounds.left = lineParameters->xStart;
			bounds.bottom = lineParameters->yStart + 1;
			bounds.top = lineParameters->yStart - lineParameters->cPels;
			bounds.right = bounds.left + N_plus_1;
			break;
		case 7:
			bounds.left = lineParameters->xStart;
			bounds.bottom = lineParameters->yStart + 1;
			bounds.right = lineParameters->xStart + lineParameters->cPels + 1;
			bounds.top = bounds.bottom - N_plus_1;
			break;
		default:
			DEBUGMSG(GPE_ZONE_ERROR,(TEXT("Invalid direction: %d\r\n"), lineParameters->iDir));
			return E_INVALIDARG;
	}

	// check for line overlap with cursor and turn off cursor if overlaps
	if (m_CursorVisible && !m_CursorDisabled &&
		m_CursorRect.top < bounds.bottom && m_CursorRect.bottom > bounds.top &&
		m_CursorRect.left < bounds.right && m_CursorRect.right > bounds.left)
	{
		CursorOff();
		m_CursorForcedOff = TRUE;
	}

	// do emulated line
	retval = EmulatedLine (lineParameters);

	// se if cursor was forced off because of overlap with line bouneds and turn back on
	if (m_CursorForcedOff)
	{
		m_CursorForcedOff = FALSE;
		CursorOn();
	}

	return	retval;

}

SCODE	XSLGPE::Line(GPELineParms *lineParameters, EGPEPhase phase)
{
	DEBUGMSG (GPE_ZONE_INIT, (TEXT("XSLGPE::Line\r\n")));

	if (phase == gpeSingle || phase == gpePrepare)
	{

		if ((lineParameters->pDst != m_pPrimarySurface))
		{
			lineParameters->pLine = EmulatedLine;
		}
		else
		{
			lineParameters->pLine = (SCODE (GPE::*)(struct GPELineParms *)) WrappedEmulatedLine;
		}
	}
	return S_OK;
}

SCODE	XSLGPE::BltPrepare(GPEBltParms *blitParameters)
{
	RECTL	rectl;

	DEBUGMSG (GPE_ZONE_INIT, (TEXT("XSLGPE::BltPrepare\r\n")));

	// default to base EmulatedBlt routine
	blitParameters->pBlt = EmulatedBlt;

	// see if we need to deal with cursor
	if (m_CursorVisible && !m_CursorDisabled)
	{
		// check for destination overlap with cursor and turn off cursor if overlaps
		if (blitParameters->pDst == m_pPrimarySurface)	// only care if dest is main display surface
		{
			if (blitParameters->prclDst != NULL)		// make sure there is a valid prclDst
			{
				rectl = *blitParameters->prclDst;		// if so, use it
			}
			else
			{
				rectl = m_CursorRect;					// if not, use the Cursor rect - this forces the cursor to be turned off in this case
			}

			if (m_CursorRect.top < rectl.bottom && m_CursorRect.bottom > rectl.top &&
				m_CursorRect.left < rectl.right && m_CursorRect.right > rectl.left)
			{
				CursorOff();
				m_CursorForcedOff = TRUE;
			}
		}

		// check for source overlap with cursor and turn off cursor if overlaps
		if (blitParameters->pSrc == m_pPrimarySurface)	// only care if source is main display surface
		{
			if (blitParameters->prclSrc != NULL)		// make sure there is a valid prclSrc
			{
				rectl = *blitParameters->prclSrc;		// if so, use it
			}
			else
			{
				rectl = m_CursorRect;					// if not, use the CUrsor rect - this forces the cursor to be turned off in this case
			}
			if (m_CursorRect.top < rectl.bottom && m_CursorRect.bottom > rectl.top &&
				m_CursorRect.left < rectl.right && m_CursorRect.right > rectl.left)
			{
				CursorOff();
				m_CursorForcedOff = TRUE;
			}
		}
	}

#ifdef CLEARTYPE
	if (((blitParameters->rop4 & 0xffff) == 0xaaf0 ) && (blitParameters->pMask->Format() == gpe8Bpp))
	{
	    switch (m_colorDepth)
	    {
	    case 16:
	 	blitParameters->pBlt = (SCODE (GPE::*)(struct GPEBltParms *)) ClearTypeBlt::ClearTypeBltDst16;
		return S_OK;
	    case 24:
		blitParameters->pBlt = (SCODE (GPE::*)(struct GPEBltParms *)) ClearTypeBlt::ClearTypeBltDst24;
		return S_OK;
	    case 32:
		blitParameters->pBlt = (SCODE (GPE::*)(struct GPEBltParms *)) ClearTypeBlt::ClearTypeBltDst32;
		return S_OK;
	    default:
		break;
	    }
	}
#endif //CLEARTYPE
	
	// see if there are any optimized software blits available
	EmulatedBltSelect02(blitParameters);
	EmulatedBltSelect08(blitParameters);
	EmulatedBltSelect16(blitParameters);

	return S_OK;
}

SCODE	XSLGPE::BltComplete(GPEBltParms *blitParameters)
{
	DEBUGMSG (GPE_ZONE_INIT, (TEXT("XSLGPE::BltComplete\r\n")));

	// see if cursor was forced off because of overlap with source or destination and turn back on
	if (m_CursorForcedOff)
	{
		m_CursorForcedOff = FALSE;
		CursorOn();
	}

	return S_OK;
}

INT		XSLGPE::InVBlank(void)
{
	static	BOOL	value = FALSE;
	DEBUGMSG (GPE_ZONE_INIT, (TEXT("XSLGPE::InVBlank\r\n")));
	value = !value;
	return value;
}


ULONG	XSLGPE::GetGraphicsCaps()
{
	if (m_pMode)
	{
#ifdef CLEARTYPE
		if (m_pMode->Bpp >= 16)		// if in 16bpp mode, return GCAPS_GRAY16 to denote that we support anti-aliased fonts
		{
			return	GCAPS_CLEARTYPE | GCAPS_GRAY16;
		}
#else
		if (m_pMode->Bpp == 16)
		{
		        return GCAPS_GRAY16;
		}
#endif
	}
	return	0;
}


#ifndef	DD_ENABLE	// if not a DDraw driver, then include dummy versions of these function
void	RegisterDDHALAPI(void)
{
	return;	// no DDHAL support
}

void HALInit()
{
	DEBUGMSG( 0,(TEXT("HALInit: Stub, Shouldn't have come in hereX\n")));
	RETAILMSG( 1,(TEXT("HALInit: Stub, Shouldn't have come in hereX\n")));
}
#endif //DD_SUPPORT

ULONG *APIENTRY DrvGetMasks(DHPDEV dhpdev)
{
	return gBitMasks;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情一区二区三区四区| 亚洲成va人在线观看| 欧美精品777| 91麻豆免费观看| 91久久精品国产91性色tv | 亚洲国产日韩av| 亚洲精品国久久99热| 1024国产精品| 亚洲午夜久久久久久久久电影网 | 婷婷综合五月天| 午夜精品影院在线观看| 奇米777欧美一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅| 奇米精品一区二区三区在线观看 | 国产福利一区二区三区在线视频| 狠狠色丁香婷婷综合| 国产精品亚洲第一| 精品国产91乱码一区二区三区| 欧美一区二区三区视频| 欧美精品一区二区三区视频| 国产日韩av一区| 亚洲人成在线观看一区二区| 亚洲一区二区免费视频| 蜜桃视频在线观看一区二区| 国产成人精品影视| 91福利视频网站| 欧美成人官网二区| 18成人在线观看| 麻豆国产精品视频| jiyouzz国产精品久久| 欧美色爱综合网| 国产亚洲综合色| 亚洲一区免费在线观看| 国产一区二三区好的| 91麻豆免费看| 久久精品夜色噜噜亚洲a∨| 亚洲精品五月天| 国内精品第一页| 欧美绝品在线观看成人午夜影视| 久久一区二区三区四区| 一区二区三区美女| 岛国av在线一区| 欧美一区二区三区白人| 日韩毛片视频在线看| 麻豆国产精品视频| 欧美日韩一区久久| 亚洲视频在线一区| 精品一区二区在线免费观看| 欧美视频一二三区| 最新中文字幕一区二区三区 | 国产高清精品在线| 日韩一级在线观看| 亚洲一区二区三区视频在线播放 | 欧洲av一区二区嗯嗯嗯啊| www久久久久| 亚洲va欧美va人人爽| 99久免费精品视频在线观看| 久久综合九色综合97_久久久| 亚洲成人在线观看视频| 91热门视频在线观看| 中文字幕av一区二区三区免费看| 美洲天堂一区二卡三卡四卡视频| 欧美色倩网站大全免费| 亚洲精品欧美二区三区中文字幕| 国产精品自在欧美一区| 欧美电影精品一区二区| 日本最新不卡在线| 欧美久久久影院| 亚洲丰满少妇videoshd| 欧美三级一区二区| 亚洲综合成人网| 在线观看欧美精品| 亚洲一区视频在线| 欧美体内she精高潮| 一区二区三区免费网站| 日本道色综合久久| 亚洲资源中文字幕| 欧美日韩一区二区三区四区| 亚洲一区视频在线观看视频| 欧美日韩亚洲综合在线 | 韩国精品在线观看| 精品精品国产高清a毛片牛牛| 天天做天天摸天天爽国产一区| 欧美人与性动xxxx| 奇米精品一区二区三区四区 | 亚洲男人电影天堂| 91亚洲大成网污www| 有码一区二区三区| 欧美喷潮久久久xxxxx| 日韩电影在线免费观看| 日韩欧美国产午夜精品| 黑人巨大精品欧美一区| 欧美国产精品一区| 欧美在线观看一区二区| 亚洲成人av福利| 日韩女优制服丝袜电影| 国产精品一区二区不卡| 亚洲欧美另类久久久精品 | 欧美成人精品3d动漫h| 国产91对白在线观看九色| 1000部国产精品成人观看| 在线观看av一区二区| 麻豆国产欧美一区二区三区| 中文字幕欧美国产| 在线观看一区日韩| 国内精品在线播放| 亚洲激情校园春色| 欧美岛国在线观看| 91丝袜美腿高跟国产极品老师| 亚洲高清一区二区三区| 久久久亚洲高清| 欧美丝袜自拍制服另类| 懂色av一区二区夜夜嗨| 亚洲午夜久久久久久久久电影院| 精品1区2区在线观看| 日本韩国一区二区三区视频| 麻豆久久久久久| 一区二区三区在线高清| 日韩免费一区二区| 色综合天天在线| 丁香婷婷综合色啪| 精品一区二区三区视频| 亚洲精品国产一区二区精华液| 精品蜜桃在线看| 欧美性视频一区二区三区| 国产91清纯白嫩初高中在线观看| 香蕉成人伊视频在线观看| 亚洲三级免费观看| 欧美极品另类videosde| 日韩欧美一级二级三级久久久| 色婷婷国产精品| 国产精品一区二区不卡| 日本大胆欧美人术艺术动态| 亚洲丝袜自拍清纯另类| 久久天天做天天爱综合色| 91精品国产综合久久婷婷香蕉| 91在线视频18| caoporen国产精品视频| 国产激情偷乱视频一区二区三区| 五月天激情小说综合| 亚洲美女一区二区三区| 亚洲欧洲日韩综合一区二区| 久久久亚洲精华液精华液精华液| 欧美变态tickle挠乳网站| 9191久久久久久久久久久| 欧美性感一类影片在线播放| 色婷婷综合久久久久中文一区二区| 韩日欧美一区二区三区| 国精产品一区一区三区mba桃花 | 欧美精品一区二区三区高清aⅴ | 成人中文字幕在线| 欧美美女直播网站| 日本久久一区二区三区| 欧美综合亚洲图片综合区| 92国产精品观看| 欧美午夜精品久久久久久超碰 | 久久综合狠狠综合久久激情| 制服丝袜亚洲精品中文字幕| 5月丁香婷婷综合| 宅男在线国产精品| 日韩三级免费观看| 欧美成人三级电影在线| 欧美精品一区二区三区四区| 国产三级一区二区| 国产精品久久精品日日| 亚洲欧洲日韩综合一区二区| 亚洲女同女同女同女同女同69| 自拍偷在线精品自拍偷无码专区| 国产精品久久久久aaaa| 亚洲国产综合色| 精品一区二区在线免费观看| 国产精品一卡二卡| 99精品国产99久久久久久白柏| 96av麻豆蜜桃一区二区| 欧美日韩国产免费一区二区 | 亚洲国产综合视频在线观看| 日日夜夜精品视频天天综合网| 日韩av午夜在线观看| 激情综合五月天| 成人午夜精品一区二区三区| 91女厕偷拍女厕偷拍高清| 欧美日韩成人在线| 久久久99精品久久| 一区二区三区在线视频观看| 日韩高清一区二区| 福利一区二区在线观看| 欧美亚一区二区| 久久久影视传媒| 亚洲精品成a人| 韩国av一区二区三区在线观看| 99久久精品国产导航| 91精品国产91久久综合桃花| 国产喷白浆一区二区三区| 亚洲国产三级在线| 高清国产一区二区| 91超碰这里只有精品国产| 亚洲素人一区二区| 国产一区二三区好的| 在线播放91灌醉迷j高跟美女| 国产日韩欧美一区二区三区乱码|