Why i can't change the depthbufferformat.

Started by
8 comments, last by Evil Steve 15 years, 4 months ago
I update my engine to d3d2007,but when i change the depthbuffer format form D3DFMT_D16 to D3DFMT_D24S8 use setting dialog,it looks no change. even i Createdevice use D3DFMT_D16 and D3DFMT_D24S8,it get same result. directx version :4.09.0000.0904 videovard :NV 8600GTS video driver:2008.8.12 Is it a bug of d3d2007,it works fine in the oldversion. [Edited by - 88er on December 22, 2008 11:08:34 PM]
Advertisement
Quote:Original post by 88er
I update my engine to d3d2007,but when i change the depthbuffer format
form D3DFMT_D16 to D3DFMT_D24S8 use setting dialog,it looks no change.
even i Createdevice use D3DFMT_D16 and D3DFMT_D24S8,it get same result.
What "same result"? What setting dialog are you talking about? Are you calling IDirect3D9::CheckDepthStencilMatch? NVidia cards frequently require that the depth buffer and colour buffer are the same bit depth.
The setting dialog like d3dsample use F2 to Change device.

my application works fine in NV 6600GT,someone side nv8 can't set depthbuffer bit.
Quote:Original post by 88er
The setting dialog like d3dsample use F2 to Change device.

my application works fine in NV 6600GT,someone side nv8 can't set depthbuffer bit.
Define "can't set depthbuffer bit". What happens when you try?
I think nothing happen and no error report.
The picture quality hadn't imporved from D3DFMT_D16 to D3DFMT_D24S8,
no change happen.

sorry for my bad english and thanks anyway.
Quote:Original post by 88er
I think nothing happen and no error report.
The picture quality hadn't imporved from D3DFMT_D16 to D3DFMT_D24S8,
no change happen.

sorry for my bad english and thanks anyway.
Why would you expect to see an improvement? The only thing increasing the depth buffer precision will do is possibly fix any existing issues. It won't make the image any clearer or sharper unless there's problems with it already.

Are there problems with the image currently? If so, what are you setting your near and far clip planes to in your projection matrix (Hint: Near clip must be > 0, and preferably > 0.1 and far clip shouln't be too far, <= 1000.0 for a 16-bit depth buffer)
when two primitives have similar values in the z-buffer cause z-fighting,
it can be solved by set the depthbuffer to D3DFMT_D24S8 in nv6600gt.
But now,in nv8600gt,the depthbuffer seems can't be changed by my application.
Depthbuffer is fixed to 32bits.

In nvidia forums,someone side "Whilst the Geforce is capable of 32-bit color, the Z-Buffer is limited to 24-bit".
Quote:Original post by 88er
when two primitives have similar values in the z-buffer cause z-fighting,
it can be solved by set the depthbuffer to D3DFMT_D24S8 in nv6600gt.
But now,in nv8600gt,the depthbuffer seems can't be changed by my application.
Depthbuffer is fixed to 32bits.

In nvidia forums,someone side "Whilst the Geforce is capable of 32-bit color, the Z-Buffer is limited to 24-bit".
If you look at the DirectX Caps Viewer (Start menu -> DirectX SDK -> Utilities), in DirectX Graphics Adapters -> [Your adapter name] -> D3D Device Types -> HAL -> Adapter Formats -> [Your current adapter format] -> Depth/Stencil Formats, what formats do you see there? Those are the only formats it's valid to use in your current adapter format.

If you put a breakpoint around somewhere, is the new depth buffer format applied?
Dx caps viewer lists D3DFMT_D24S8\D3DFMT_D24X8\D3DFMT_D16\D3DFMT_D32F_LOCKABLE,
I can CreateDevice use every value above(for depthformat) without any error.
But the result looks no different.
Quote:Original post by 88er
Dx caps viewer lists D3DFMT_D24S8\D3DFMT_D24X8\D3DFMT_D16\D3DFMT_D32F_LOCKABLE,
I can CreateDevice use every value above(for depthformat) without any error.
But the result looks no different.
If CreateDevice() succeeds with all of those values, then it's almost certain that the device is using the new depth buffer format.

Why do you expect anything to change? What does your projection matrix setup look like? Are you sure that what you're seeing is a problem with the depth buffer precision? Can we get a screenshot?

This topic is closed to new replies.

Advertisement