Archived

This topic is now archived and is closed to further replies.

Klaatu

Direct3D and Hardware acceleration

Recommended Posts

I''ve been tracking a "weird" problem for about two weeks. Using DirectX 9, I nad several instances where a back buffer would not present to the screen after the primitives were rendered. It appeared like a timing issue since I could get the missing primitives to display if I "refreshed" the screen through an application mechanism. I''m using an NVidia TNT2 card; I have updated the drivers to the latest; I updated the DirectX SDK to the "summer" version; the device is created as D3DDEVTYPE_HAL. Yet, the problem(s) remained. For no apparent reason, I toned down the Hardware acceleration in Windows display properties applet to a setting that says "Disable all DirectDraw and Direct3D accelerations....". Now, the display problems no longer exist. What gives? Have I sacrificed performance to solve a problem? Gort...Klaatu, Barada Nikto!

Share this post


Link to post
Share on other sites
See below for snippet:

// Create the vertex buffer.
if( FAILED(pDirect3DDevice->CreateVertexBuffer(
numverts*sizeof(CUSTOMVERTEX), // length
D3DUSAGE_SOFTWAREPROCESSING | D3DUSAGE_WRITEONLY,// usage
D3DFVF_CUSTOMVERTEX, // vertex format
D3DPOOL_DEFAULT, // memory class
&pDirect3DVb, // ptr to intf.
NULL))) // reserved


Gort...Klaatu, Barada Nikto!

Share this post


Link to post
Share on other sites
I''ve noticed this on other nVidia cards (might happen on ATI, but we all have nVidia at work). Some polygons flicker, drawn sometimes, not other times. If you force Windows to pause by clicking on the title bar of the window, the image always looks perfect. It may be D3D, or it may be nVidia''s driver. I''ve never seen it in a small enough app to send to either nVidia or MS for an investigation.

Share this post


Link to post
Share on other sites
quote:
Original post by Klaatu
I''ve been tracking a "weird" problem for about two weeks. Using DirectX 9, I nad several instances where a back buffer would not present to the screen after the primitives were rendered. It appeared like a timing issue since I could get the missing primitives to display if I "refreshed" the screen through an application mechanism.

Just to make sure I understand: The back-buffer isn''t presented at all (i.e. the frame is skipped) or the presentation is delayed until you force it in some way?

Muhammad Haggag

Share this post


Link to post
Share on other sites
As best I can tell, the frame is presented but never appears on the screen. To debug this, I created a function that would build a bitmap of the back buffer an instant before the Present() method is called. The bitmap contains a perfect image. The image, however, never makes it to the screen. I can force it to the screen with another function that basically recreates the image via a toolbar button. It''s almost like the I/O is getting blocked for some reason. And as I said, the problem disappears if I turn down the hardware acceleration within Windows XP.

Gort...Klaatu, Barada Nikto!

Share this post


Link to post
Share on other sites