clock_t cInit = clock(), cBS, cGBB, cCF, cSR, cSpB, cDT, cSpE, cES, cFL ;
if( SUCCEEDED( m_pDev->BeginScene() ))
{
cBS = clock() ;
m_pDev->GetBackBuffer( 0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuf );
cGBB = clock() ;
m_pDev->ColorFill( m_pSurf, &m_SurfRT, 0x00000000 );
cCF = clock() ;
m_pDev->StretchRect( m_pSurf, NULL, pBackBuf, NULL, D3DTEXF_LINEAR );
cSR = clock() ;
m_pSprite->Begin( D3DXSPRITE_ALPHABLEND );
cSpB = clock() ;
m_pFontTC->DrawText( m_pSprite, sTC, -1, &m_SurfRT, DT_CENTER | DT_VCENTER | DT_SINGLELINE,
D3DCOLOR_XRGB( 255, 255, 255 ));
cDT = clock() ;
m_pSprite->Flush() ;
cFL = clock() ;
m_pSprite->End() ;
cSpE = clock() ;
m_pDev->EndScene() ;
cES = clock() ;
}
else
{
OutputDebugString( L"CoreD3D9::UpdateAndRender >> m_pDev->BeginScene error\n" );
return -1 ;
}
m_pDev->Present( NULL, NULL, NULL, NULL );
clock_t cNow = clock() ;
memset( &d3dpp, 0, sizeof( D3DPRESENT_PARAMETERS ));
d3dpp.Windowed = TRUE ;
d3dpp.hDeviceWindow = m_hWnd;
d3dpp.BackBufferWidth = m_nWidth;
d3dpp.BackBufferHeight = m_nHeight;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD ;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN ;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE ;
If I remove the drawing text code, the delay will take place from the Present() function call. So if the text drawing included, the delay will take place on Flush() ( or End(), if the Flush() is comment out). Also, I just don't understand why delay happens totally random, it doesn't come up every time, but just once a while only. -- All other function calls take pretty much no time --
After a bit search on Google, seems like either function has to deal with the hardware / 3D-card, so it means sometime between got locked up for a long time.
Just need some help to find out where the problem is, the hardware, D3D, or my coding?
Thanks for help