Im trying to make a Windows-app, intended for moving desktop background (based on following code: http://www.pouet.net/topic.php?which=7440&page=2#c340591). It makes ListBox draw icons into memory buffer and after combines result with own background image. To scroll it i redraw all that with defined frequency, but it takes alot of CPU time and i feel that im doing smth in a very inefficient way.
Please, help me optimize my code. Here it is:
d3ddev->BeginScene();
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, 0xff00ff00, 0.0f, 0);
// background
d3ddev->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1);
d3ddev->SetTexture(0, pic);
d3ddev->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
d3ddev->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
d3ddev->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE);
d3ddev->SetRenderState(D3DRS_LIGHTING, FALSE);
d3ddev->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
color = D3DCOLOR_ARGB(255, 255, 255, 255);
spr->Begin(D3DXSPRITE_ALPHABLEND);
spr->Draw(pic, NULL, NULL, &position, color);
spr->End();
// desktop icons
d3ddev->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1);
d3ddev->SetTexture(0, tex);
d3ddev->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
d3ddev->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD);
d3ddev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
d3ddev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
d3ddev->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, fgv, sizeof(FgVertex));
d3ddev->EndScene();
d3ddev->Present(NULL, NULL, NULL, NULL);
ValidateRgn(hwnd, NULL);
It runs each time i need to move background on 1 pixel. - Maybe its better to move viewport instead of redrawing sprite?
- Can u advice what to do and what to read? Its my first attempt to use DirectX.
- Maybe some code examples?
Thanks.