Last frame not cleared

Started by
7 comments, last by jollyjeffers 17 years, 10 months ago
Hello! I am currently working on a breakout clone. I use DirectX 9 and for drawing 2D I use mainly LPD3DXSPRITE functionality. I compile under Visual C++ Express Edition. So, when I run the program everything works fine as expected. But on my brothers' machines it looks like this: It seems that the last frame is not cleared properly. We checked for DirectX version, I compiled under debug and release mode, but the problem still occurs. Any ideas why?
The Wild Wild West - Desperado!
Advertisement
Have you tried running via the reference rasterizer? (specify D3DDEVTYPE_REF in your CreateDevice() call).

Whenever things start to look different between PC's/configurations you need to check it against the ref-rast... usually it'll determine which is the correct one. Bare in mind that just because yours looks correct doesn't mean its actually correct [wink]

hth
Jack

<hr align="left" width="25%" />
Jack Hoxley <small>[</small><small> Forum FAQ | Revised FAQ | MVP Profile | Developer Journal ]</small>

You're not using the debug runtimes are you? I suspect that Clear() is failing for some reason (Perhaps specifying to clear a z-buffer when there isn't one attached). The debug runtimes will highlight this my clearing the backbuffer to either green or magenta each frame.
Quote:Original post by jollyjeffers
Have you tried running via the reference rasterizer?


I have checked reference rasterizer on my pc and it works ok.

The Wild Wild West - Desperado!
Quote:Original post by Evil Steve
You're not using the debug runtimes are you?

I think I am not using them. But how do I determine for sure or where can I switch between them? Aren't they automatically used when I compile in release mode?

Quote:Original post by Evil Steve
I suspect that Clear() is failing for some reason

I checking all return values (so also Clear()) for errors and write them to a log file. Even my brothers' log files look exactly the same like at my PC. (also the formats like dpeth stencil format, back buffer format etc. are exactly the same)


And btw.: I have splitted my DirectX functionality into a *.dll which is used by the game, which I always provided in the actual form t my brothers.

The Wild Wild West - Desperado!
Quote:Original post by WildWest
Quote:Original post by Evil Steve
You're not using the debug runtimes are you?

I think I am not using them. But how do I determine for sure or where can I switch between them? Aren't they automatically used when I compile in release mode?
Your actual application doesn't know if its using the debug runtimes; rather its a switch in the DirectX control panel. See the "DirectX Debugging" link in my signiture.

However, that wont work for your brothers machine - the debug runtimes are only available when the SDK is also installed, so you can debug yours but not his. It's still a "best practice" to run against the debug runtimes whenever you're doing any DX programming [smile]


What sort of hardware configuration are we looking at? It is quite possible that you're trying to use a feature that isn't supported by your brothers hardware. As soon as you try using unsupported features you're in a world of trouble - best case is you'll get an error, but worst case is it'll silently fail and you'll get undefined results similar to what you're describing.

With that in mind, are you enumerating any/every feature you make use of?

hth
Jack

<hr align="left" width="25%" />
Jack Hoxley <small>[</small><small> Forum FAQ | Revised FAQ | MVP Profile | Developer Journal ]</small>

Quote:Original post by jollyjeffers
With that in mind, are you enumerating any/every feature you make use of?


This is out of my log file:
...
INFO: CGraphics::Initialize() : Direct3D object created.
INFO: CGraphics::Initialize() : Fullscreen mode.
INFO: CGraphics::Initialize() : Backbuffer Format: D3DFMT_X8R8G8B8.
INFO: CGraphics::Initialize() : Depth stencil format: D3DFMT_D24X8.
INFO: CGraphics::Initialize() : Hardware t&l.
INFO: CGraphics::Initialize() : Pure Device.
INFO: CGraphics::Initialize() : Direct3D initialized.
...

You can see the modes I use. All of them are enumerated.

Now, I will follow your debug link ;-)


Last post was me. ;-)
The Wild Wild West - Desperado!
hmm, thats not necessarily full enumeration. You need to examine the device caps (GetDeviceCaps() giving you a D3DCAPS9) for various texture blending and vertex processing properties. Without knowing more about your code/algorithms its difficult to say any more than that.

Are you using the fixed-function or programmable pipeline?

Jack

<hr align="left" width="25%" />
Jack Hoxley <small>[</small><small> Forum FAQ | Revised FAQ | MVP Profile | Developer Journal ]</small>

This topic is closed to new replies.

Advertisement