Can You Copy a ID3D10DepthStencilView To a ID3D10DepthStencilView

Started by
3 comments, last by 21st Century Moose 9 years, 8 months ago

Hi.

Im trying to copy a depth buffer to another depth buffer of the same size and dims with

Device->CopyResource and I get this.

D3D10: ERROR: ID3D10Device::CopyResource: Cannot invoke CopyResource when the destination Resource was created with the D3D10_BIND_DEPTH_STENCIL BindFlags set. [ RESOURCE_MANIPULATION ERROR #285: COPYRESOURCE_INVALIDDESTINATIONSTATE ]

Is there a way around this.

How else can I copy my Depth buffer.

And why the hell can't you do this.

Advertisement

D3D10_BIND_DEPTH_STENCIL textures can only be used in the output-merger stage, so if you want to write values into it, you would have to got through a rendering pass... However, you should never need to copy a depth/stencil texture to another. Why don't you just use the source texture as the depth/stencil buffer directly, instead of copying it? Or why don't you just use a normal texture as the destination?

According to the D3D11 documentation (I know you're using D3D10, bear with me) at http://msdn.microsoft.com/en-us/library/windows/desktop/ff476392%28v=vs.85%29.aspx there is a restriction on CopyResource:

You can't use an Immutable resource as a destination. You can use a depth-stencil resource as either a source or a destination provided that the feature level is D3D_FEATURE_LEVEL_10_1 or greater. For feature levels 9_x, resources created with the D3D11_BIND_DEPTH_STENCIL flag can only be used as a source for CopyResource.

So your way around it is to switch to D3D11 and use the appropriate feature level to enable this. Any particular reason why you're using D3D10 instead of 11 with feature levels?

Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls.

oops.

after posting this I went and read some more articles and realised I don't need to copy the depth buffer if I need to copy the Depth buffer Why not just

use the other depth buffer and not have 2 of the same. Man I wasted a good half a day on trying nothing lol.

and as for feature level when I started my project my video card was only dx 10 no more Now I have a new card Im not to sure if I can from my code base.

my code base follows Frank D. LUNA Introduction to 3d game programming with dx 10 way of set up.

How much work would be involved in that unsure. I would Like to.

What I was trying to do was stop my glowing objects from showing through the terrain when blocked by a hill.

My first try was to render the whole terrain again to the glow map but this added 15 milliceconds to the render time thats far to much.

then I thought I could use a multi render target to out put to both glow render target and sceene for terrain that worked but my lightning could be seen through the terrain

because there was no depth map thats what triggered me to try to copy the 2 depth maps and now its 4 hours later.

Thats a case of to long at the computer.

I would Like to here any advice on a update to dx 11.

Thanks All. and I forgot to say it only adds 3 milliseconds to the render time cool.

I've done a few updates of D3D10 code to 11.

The good news is that the APIs are incredibly similar - aside from the obvious change from 10 to 11 in the interface names, there are only two major differences that you really need to be concerned about:

  • A lot of methods that were on the ID3D10Device interface are now on an ID3D11DeviceContext interface. ID3D11Device still exists but that's mostly used for creating resources; ID3D11DeviceContext is mostly used for setting state, operating on resources, etc.
  • Most Set calls now hold references to the objects involved which mostly means you need to unbind buffers, views, states, etc before destroying them.

Aside from that you can pretty much mentally translate from one API to the other without huge difficulty.

Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls.

This topic is closed to new replies.

Advertisement