Sign in to follow this  
RipeTomatoe

[C++ DirectX9] Render to Texture

Recommended Posts

RipeTomatoe    100
Let's just jump straight into code:

[code]void beginRender(void)
{
pd3dDev->GetRenderTarget(0, &pBackBuffer);
pRenderTexture->GetSurfaceLevel(0, &pRenderSurface);
pd3dDev->SetRenderTarget(0, pRenderSurface);
pd3dDev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
pd3dDev->Clear(0, NULL, D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
pd3dDev->BeginScene();
};
void endRender(void)
{
pd3dDev->EndScene();
//Do RTT
effect->SetTexture("Screen", pRenderTexture);
effect->SetTechnique(effect->GetTechniqueByName("BlackAndWhite"));
pd3dDev->SetRenderTarget(0, pBackBuffer);
pd3dDev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(100, 0, 0), 1.0f, 0);
pd3dDev->Clear(0, NULL, D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
pd3dDev->BeginScene();
setUIVertDecl();
pd3dDev->SetTexture(0, pRenderTexture);
pd3dDev->SetStreamSource(0, pRenderVB, 0, sizeof(VERTEX2D));
UINT cPasses;
effect->Begin(&cPasses, 0);
for(UINT i = 0; i < cPasses; i++)
{
effect->BeginPass(i);
pd3dDev->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);
effect->EndPass();
}
effect->End();
pd3dDev->SetTexture(0, NULL);
pd3dDev->EndScene();
pd3dDev->Present(NULL, NULL, NULL, NULL);
mouseState.x = mouseState.y = 0;
SetCursorPos(wWidth/2,wHeight/2);
};[/code]

So basically this code works flawlessly on my laptop, but when I try and run it on my desktop the texture is black. I've experimented with the shader and the shader is working fine. The scene itself renders fine when I don't save it to a texture. I'm really stumped on this one, if anyone needs more code snippets I'll be happy to show some more.

Thanks in advance,
Daniel (Ripe)

Share this post


Link to post
Share on other sites
gfxgangsta    806
Are you running with the Direct3D debug version or retail version?

Open "DirectX Control Panel" program, go to Direct3D 9 tab, then make sure this one is selected:

"Use Debug Version of Direct3D 9"

Then check visual studio's output window to see if it indicates any errors on your desktop.

It's also a good idea to check the HRESULT return value of Direct3D function calls. Check which one is failing.

Share this post


Link to post
Share on other sites
RipeTomatoe    100
[quote name='Hodgman' timestamp='1329877500' post='4915369']
You're performing rendering operations outside of a begin/end-scene pair.
[/quote]

Well I moved around my begin and end scene pair, and it still works on my laptop, but not my desktop. I know that the clear command is working because the texture gets the colour. However it seems like nothing is rendered onto that texture.

Share this post


Link to post
Share on other sites
RipeTomatoe    100
I finally got the DirectX debugger to show up (I accidently enabled the 64-bit one, instead of the 32-bit one) and it is showing me warning's about ignoring redundant SetSamplerStates, and SetRenderStates. I assume this code is actually in the d3dxmesh class, because I never call those functions in my code.

This is the only error I get now

[code]Direct3D9: (ERROR) :Invalid flag D3DCLEAR_ZBUFFER: no zbuffer is associated with device. Clear failed.[/code]


it also doesn't like any depth stencil code.

I'm really stumped at this. It's now showing, but since it doesn't have depth everything is stacked on each other.

Share this post


Link to post
Share on other sites
RipeTomatoe    100
OK, so it's all working now, I don't really know what I changed, but it's working, and I'm going to test it on more machines to make sure it's a good thing. Thanks for all your help guys!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this