Missing triangles on ATI, Nvidia works fine

Started by
4 comments, last by highvolt_herb 19 years, 6 months ago
Hi everyone, when rendering the vertex/indexbuffers on my GeForce 5600 System (WinXP MCE), everything works quite fine. When testing the same code with the same models and texture files on 2 different ATI systems (RADEON 9800XL and X700 on WinXP HOME), some triangles are NOT rendered, while other triangles are textured from both sides. I could reduce the geometry to a simple cube (like a skybox) in which all my models are placed. I'm not using D3DX mesh stuff, just parse the X-file and copy into my own geometry structures and vertex/index buffers. At the first glance, this looks like a culling problem. My code uses D3DCULL_CCW. I tried to set D3DCULL_NONE, which does not influence the effect. I currently have no idea, what the problem could be. My ATI Driver is not the very latest one, and of course I will upgrade tomorrow, when I have more bandwidth for the download. But I doubt, that this is the problem, as the same shows on 2 different ATI systems, that's why i suspect, that there is some relation to ATI... Did anyone observe similar problems? I'm just looking for some hints, where I could start my search? Thanks very much, Herb
Advertisement
nVidia ignores the parameters of DrawIndexedPrimitive that indicate the first vertex and the number of vertices. ATI (and REF) require these to be accurate.
Try to make it work as intended using the REF driver. If it works with the REF driver and you see other results using the HAL driver, it's probably the driver's fault.
Hi, thanks for your replies!
Namethatnobodyelsetook, I think you hit the nail: seems that my parameters are not correctly setup, minindex was fixed to 0. It does not work completely, but I'm sure I will find the problem now.
BlackGhost, the tip with the ref device is very good! I still have problems with it, as it reports MaxActiveLights=-1, which brings my program into trouble, which is a little bit confusing, but I will have a closer look at that.
Again, thank you for your help
Herb
1) Using the debug Direct3D runtime with the output level increased and "Maximum Validation" enabled should help narrow down any problems with Draw*Primitive*() parameters.

2) The MaxActiveLights cap is a DWORD which is a 32-bit "unsigned int" so the REF device is reporting that it can have a maximum of 4,294,967,295 active lights rather than -1 active lights.

Simon O'Connor | Technical Director (Newcastle) Lockwood Publishing | LinkedIn | Personal site

Hi Simon, your are 100% right. My mistake was, that I use DWORD for the declaration of MaxActiveLights, but used %d instead of %u in my sprintf() in my logging code.
I also thought, that this -1 could be caused by that signed/unsigned stuff, but was unsure, because the dx caps viewer also reports the MaxActiveLights as -1. Apparently, the DX Caps Viewer has the same bug as my code.
Actually, my code hangs, because I use this number as counter in a loop, and 4.... is really a little high. I did not expect the ref device to report such a high number of lights, but this will be fixed.
Thanks a lot for your help!
Greetings, Herb

This topic is closed to new replies.

Advertisement