|
|

楼主 |
发表于 2006-6-1 11:34:00
|
显示全部楼层
Re: 能提高D3DXLoadSurfaceFromSurface的执行速度?
测试的时候发现一些问题!
测试代码如下:
IDirect3DSurface9 *pBackSurface=NULL;
IDirect3DSurface9 *pLockSurface=NULL;
//m_D3DDev->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&pBackSurface);
m_D3DDev->GetRenderTarget(0, &pBackSurface);
D3DSURFACE_DESC pDesc;
pBackSurface->GetDesc(&pDesc);
D3DDISPLAYMODE d3ddisplaymode;
m_D3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddisplaymode);
char strInfo[512];
DWORD m_iCount = GetTickCount();
memset(strInfo,0,sizeof(strInfo));
sprintf(strInfo,"----------------------Begin:%d\n",0);
OutputDebugStringA(strInfo);
// D3DPOOL_DEFAULT D3DPOOL_SYSTEMMEM
m_D3DDev->CreateOffscreenPlainSurface(pDesc.Width,pDesc.Height,d3ddisplaymode.Format,D3DPOOL_SYSTEMMEM,&pLockSurface,NULL);
memset(strInfo,0,sizeof(strInfo));
sprintf(strInfo,"CreateOffscreenPlainSurface:%d\n",GetTickCount() - m_iCount);
OutputDebugStringA(strInfo);
RECT m_Rect;
SetRect(&m_Rect,0,0,pDesc.Width,pDesc.Height);
//m_D3DDev->StretchRect(pBackSurface,&m_Rect,pLockSurface,&m_Rect,D3DTEXF_NONE);//D3DTEXF_POINT;D3DTEXF_NONE;D3DTEXF_LINEAR
//m_D3DDev->StretchRect(pBackSurface,NULL,pLockSurface,NULL,D3DTEXF_LINEAR);//D3DTEXF_POINT;D3DTEXF_NONE;D3DTEXF_LINEAR
//D3DXLoadSurfaceFromSurface(pLockSurface, NULL, NULL, pBackSurface, NULL, NULL, D3DX_FILTER_NONE, 0);
m_D3DDev->GetRenderTargetData(pBackSurface,pLockSurface);
memset(strInfo,0,sizeof(strInfo));
sprintf(strInfo,"-D3DXLoadSurfaceFromSurface:%d\n",GetTickCount() - m_iCount);
OutputDebugStringA(strInfo);
D3DLOCKED_RECT d3dlr;
if (D3D_OK == pLockSurface->LockRect(&d3dlr,NULL,D3DLOCK_DONOTWAIT))//D3DLOCK_NO_DIRTY_UPDATE|D3DLOCK_DONOTWAIT|D3DLOCK_NOOVERWRITE|D3DLOCK_READONLY))
{
memset(strInfo,0,sizeof(strInfo));
sprintf(strInfo,"-------------------LockRect:%d\n",GetTickCount() - m_iCount);
OutputDebugStringA(strInfo);
pLockSurface->UnlockRect();
}
D3DXSaveSurfaceToFile(TEXT("f:\\test555.bmp"),D3DXIFF_BMP,pLockSurface,NULL,NULL);
memset(strInfo,0,sizeof(strInfo));
sprintf(strInfo,"------------------------End:%d\n",GetTickCount() - m_iCount);
OutputDebugStringA(strInfo);
if (pBackSurface) pBackSurface->Release();
if (pLockSurface) pLockSurface->Release();
输出信息为:
----------------------Begin:0
CreateOffscreenPlainSurface:0
-D3DXLoadSurfaceFromSurface:109
-------------------LockRect:109
------------------------End:125
----------------------Begin:0
CreateOffscreenPlainSurface:0
-D3DXLoadSurfaceFromSurface:125
-------------------LockRect:125
------------------------End:125
----------------------Begin:0
CreateOffscreenPlainSurface:0
-D3DXLoadSurfaceFromSurface:125
-------------------LockRect:125
------------------------End:125
----------------------Begin:0
CreateOffscreenPlainSurface:0
-D3DXLoadSurfaceFromSurface:109
-------------------LockRect:125
------------------------End:125
----------------------Begin:0
CreateOffscreenPlainSurface:0
-D3DXLoadSurfaceFromSurface:110
-------------------LockRect:125
------------------------End:125
----------------------Begin:0
CreateOffscreenPlainSurface:0
-D3DXLoadSurfaceFromSurface:109
-------------------LockRect:109
------------------------End:109
----------------------Begin:0
CreateOffscreenPlainSurface:0
-D3DXLoadSurfaceFromSurface:109
-------------------LockRect:109
------------------------End:125
----------------------Begin:0
CreateOffscreenPlainSurface:0
-D3DXLoadSurfaceFromSurface:125
-------------------LockRect:125
------------------------End:125
----------------------Begin:0
CreateOffscreenPlainSurface:0
-D3DXLoadSurfaceFromSurface:109
-------------------LockRect:109
------------------------End:109
----------------------Begin:0
CreateOffscreenPlainSurface:0
-D3DXLoadSurfaceFromSurface:110
-------------------LockRect:125
------------------------End:125
----------------------Begin:0
CreateOffscreenPlainSurface:0
-D3DXLoadSurfaceFromSurface:109
-------------------LockRect:125
------------------------End:125 |
|