Here''s some code that may speed up your application (this assumes you have MMX on your CPU)
void DrawMMX( DDSURFACEDESC *dest, BYTE *src, RECT &area, int bpp ){ int w=(area.right-area.left)*bpp/8; int h=area.bottom-area.top; char *sptr=(char*)src; char *dptr=(char*)(unsigned char*)((unsigned char*)dest->lpSurface); DWORD adddpos=dest->lPitch-w*8; DWORD addspos=bpp*(area.right-area.left)-w*8; __asm { mov edx,h mov esi,sptr mov edi,dptr NextLine: mov ecx,w NextPixels: movq mm0,[esi] movq [edi],mm0 add esi,8 add edi,8 dec ecx jnz NextPixels add edi,adddpos add esi,addspos dec edx jnz NextLine emms }}////// EXAMPLE of use://// if ( g_bMMX_Enabled ) { DDSURFACEDESC ddsd; ddsd.dwSize = sizeof(ddsd); if ( DD_OK != g_pDDSPrimary->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL)) { return FALSE; } RECT rc={0,0,CSDScreen::GetWidth(), CSDScreen::GetHeight()}; DrawMMX( &ddsd, CSDScreen::GetDib()->GetBits(), rc, 3 ); g_pDDSPrimary->Unlock( NULL ); }