Jump to content
  • Advertisement
Sign in to follow this  
RipeTomatoe

[C++ DirectX9] Render to Texture

This topic is 2341 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Let's just jump straight into 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);
};


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
Advertisement
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

You're performing rendering operations outside of a begin/end-scene pair.


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
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

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


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
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
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!