⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mqcpat.blt

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 BLT
字号:
#if defined( CHECK_8BPP ) || defined( CHECK_16BPP )
SCODE MQGC::CPATBlt( GPEBltParms *pBltParms )
{
	DEBUGMSG(GPE_ZONE_MQEMUL1,(TEXT("CPBlt\r\n")));

	ROTATE_PARAMS(pBltParms);
	
	geINIT( pBltParms->pDst );

	ULONG	wh, ulCmd;

	m_ulDestXY = (pBltParms->prclDst->top << 16) | pBltParms->prclDst->left;
	wh = ((pBltParms->prclDst->bottom << 16) | pBltParms->prclDst->right)
				- m_ulDestXY;
	m_ulDestXY += ((MQGCSurf *)(pBltParms->pDst))->m_ulTopLeft;
	ulCmd = m_ulRop3 | DO_BITBLT;

	m_lpPattern = (PULONG)m_pBrush->Buffer();	// set pattern buffer pointer

	(this->*m_pPatternSetup)(pBltParms,&ulCmd);	// load mono pattern and adjust
												// offset

	geWAITCMDFIFO( 3 );
	geREG(WIDTH_HEIGHT, wh);
	geREG(DEST_XY, 		m_ulDestXY);
	SET_GE_DEST_STRIDE(m_ulDestStride);
	geREG(DRAW_CMD,		ulCmd);

	geTERMINATE();
	
	ROTATE_PARAMS_BACK(pBltParms);
	
	RETURN_CPATBLT;
}
#endif	//CHECK_s

#if 0
SCODE MQGC::CPATBlt24( GPEBltParms *pBltParms )
{
	// Does not supported in the GE
	DEBUGMSG(GPE_ZONE_MQEMUL1,(TEXT("CPBlt24-E\r\n")));
	RETURN_CPATBLT24;
}
#endif

#ifdef CHECK_24BPP
SCODE MQGC::CPATBlt32( GPEBltParms *pBltParms )
{
	DEBUGMSG(GPE_ZONE_MQEMUL1,(TEXT("CPBlt32\r\n")));

	ROTATE_PARAMS(pBltParms);
	
	geINIT( pBltParms->pDst );

	ULONG	height, ulCmd, WH, destXY, i;

	m_ulDestXY = (pBltParms->prclDst->top << 16) | pBltParms->prclDst->left;
	m_ulWidthHeight = ((pBltParms->prclDst->bottom << 16)
							| pBltParms->prclDst->right) - m_ulDestXY;
	m_ulDestXY += ((MQGCSurf *)(pBltParms->pDst))->m_ulTopLeft;
	ulCmd = m_ulRop3 | DO_BITBLT;
	m_lpPattern = (PULONG)m_pBrush->Buffer();
	height = m_ulWidthHeight >> 16;

	if (height > 4)
	{
		if (m_ulRop3 == 0xF0UL)
		{
			// ONLY handle (single ROP) Pattern Blt
			// Do pattern blt at width x 8 lines first
			ULONG width = m_ulWidthHeight & 0xFFFF;
			destXY = m_ulDestXY;
			WH = (width | 0x40000UL);
			for (i=2; i > 0; i--)
			{	
				PatternSetup16BPP(pBltParms,&ulCmd);
				geWAITCMDFIFO( 3 );
				geREG(WIDTH_HEIGHT, WH);
				geREG(DEST_XY, 		destXY);
				SET_GE_DEST_STRIDE(m_ulDestStride);
				geREG(DRAW_CMD,		ulCmd);
				destXY += 0x40000UL;
				if (height <= 8)
					WH = m_ulWidthHeight - 0x40000UL;
			}
			// Do SRCCOPY using width x 8 lines pattern
			if (height > 8)
			{
				geWAITCMDFIFO( 3 );
				geREG(SRC_XY,		m_ulDestXY);
				geREG(CLIP_LeftT,   m_ulDestXY);
				geREG(CLIP_RightB,	(m_ulDestXY + m_ulWidthHeight - 0x10001UL));

				// SRCCOPY from first line until last line is filled
				WH = 0x80000UL;				
				for( i=0x80000UL;
						(int)i < (int)(m_ulWidthHeight & 0xFFFF0000UL); )
				{
					geWAITCMDFIFO( 3 );
					geREG(WIDTH_HEIGHT,	 (WH | width));
					geREG(DEST_XY, 		(m_ulDestXY + i));
					SET_GE_DEST_STRIDE(m_ulDestStride);
					geREG(DRAW_CMD,		(DO_BITBLT | CLIP_ENABLE | 0xCCUL));
					i += WH;
					WH <<= 1;
				}
			}
		}
		else    // Do pattern blt at width x 4 lines at a time.
		{	
			// Set Pattern Offset
			m_ulDestXY |=
				((((m_ulDestXY & 0x0FFFUL) - pBltParms->pptlBrush->x)
					& 0x7UL) << 13)
				| (((((m_ulDestXY >> 16) & 0x0FFFUL) - pBltParms->pptlBrush->y)
					& 0x7UL) << 29);

			// Start color pattern blt
			for (i = 2; i > 0; i-- )
			{
				destXY = m_ulDestXY;
				(this->*m_pPatternSetup)( pBltParms, &ulCmd );
				for (WH = m_ulWidthHeight; TRUE; destXY += 0x80000UL)
				{
					geWAITCMDFIFO( 3 );
					if ((WH >> 16) > 0x4UL)
						geREG(WIDTH_HEIGHT, (0x40000UL | (WH & 0xFFFFUL)));
					else
						geREG(WIDTH_HEIGHT, WH);
					// Execute pattern blt
					geREG(DEST_XY, 		destXY);
					SET_GE_DEST_STRIDE(m_ulDestStride);
					geREG(DRAW_CMD,		ulCmd);
					if ((WH >> 16) > 0x8UL)
						WH -= 0x80000UL;
					else
						break;
				}
				m_ulDestXY += 0x40000UL;		
				m_ulWidthHeight -= 0x40000UL;
			}
		}
		geTERMINATE();
		
		ROTATE_PARAMS_BACK(pBltParms);
		
		RETURN_CPATBLT32;
	}
	PatternSetup16BPP(pBltParms,&ulCmd);
	geWAITCMDFIFO( 3 );
	geREG(WIDTH_HEIGHT, m_ulWidthHeight);
	geREG(DEST_XY, 		m_ulDestXY);
	SET_GE_DEST_STRIDE(m_ulDestStride);
	geREG(DRAW_CMD,		ulCmd);

	geTERMINATE();
	
	ROTATE_PARAMS_BACK(pBltParms);
	
	RETURN_CPATBLT32;
}
#endif	//CHECK_24BPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -