hm... the bitmap stays black. here is my example:

(i only want to render to the bitmap once and not every frame.)

Code:

LPDIRECT3DDEVICE9 device = (LPDIRECT3DDEVICE9)pd3ddev;

LPDIRECT3DSURFACE9 pPreviousRenderTarget;
device->GetRenderTarget(0, &pPreviousRenderTarget);

LPDIRECT3DTEXTURE9 pTargetTexture;
D3DXCreateTexture(device, 512, 512, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pTargetTexture);

((LPDIRECT3DTEXTURE9)mybmap->d3dtex)->Release();
((LPDIRECT3DTEXTURE9)mybmap->d3dtex) = pTargetTexture;
mybmap->flags = 1<<15 | 1<<27;

LPDIRECT3DSURFACE9 pRenderTarget;
pTargetTexture->GetSurfaceLevel(0, &pRenderTarget);

device->SetRenderTarget(0, pRenderTarget);

device->Clear(0, 0, D3DCLEAR_TARGET, 0x00000000, 1, 0);

// draw here

device->SetRenderState(D3DRS_LIGHTING, FALSE);
device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_DISABLE);

device->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);

DVERTEX v[3];

v[0].x = 0;
v[0].y = 0;
v[0].z = 0;
v[0].rhw = 1;
v[0].color = D3DCOLOR_RGBA(255, 255, 255, 0);

v[1].x = 512;
v[1].y = 0;
v[1].z = 0;
v[1].rhw = 1;
v[1].color = D3DCOLOR_RGBA(255, 255, 255, 0);

v[2].x = 512;
v[2].y = 512;
v[2].z = 0;
v[2].rhw = 1;
v[2].color = D3DCOLOR_RGBA(255, 255, 255, 0);

device->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, (LPVOID)v, sizeof(DVERTEX));

D3DXSaveSurfaceToFile("test.jpg", D3DXIFF_JPG, pRenderTarget, 0, 0);
SAFE_RELEASE(pRenderTarget);

device->SetRenderTarget(0, pPreviousRenderTarget);
SAFE_RELEASE(pPreviousRenderTarget);