Seite 1 von 1

Direct3d9 auf Directx 11 Grafikkarte

Verfasst: 12.03.2010, 13:38
von DeRaaZuul
Guten Morgen ,
ich programmiere zur Zeit ein kleines Spiel und wollte es jetzt auf meiner Directx 11 Grafikkarte testen.Mein Spiel benutzt eigentlich nur Rechtecke auf die eine Textur geklebt wird.
Wenn ich es jetzt starte , wird bei einigen Rechtecken nur die hälfte angezeigt , Einige fehlen komplett und der Bildschirm flackert.Mein Spiel benutzt DirectX 9 für die Ausgabe und lief auf meiner Geforce 8600 GT ohne irgendwelche Probleme.Als System benutze ich Windows 7 und meine jetzige Karte ist eine Ati 5770.
Hat vllt jemand eineIdee wo ich anfangen könnte nach den Fehler zu suchen? Die Debug-Runtime habe ich auf Max gestellt und diese zeigte auch keine Fehler an, ausser zum Schluß das nicht aller Speicher freigegeben wurde.Wenn ich sie eine Stufe niedriger Stelle kommt der Fehler : Failed to create driver indexbuffer.Allerdings gibt mir CreateIndexBuffer,Lock,Unlock kein Fehler aus?!Den IndexBuffer erstelle ich mit :

Code: Alles auswählen

D3DUSAGE_WRITEONLY, D3DFMT_INDEX16,D3DPOOL_MANAGED
.
PS: Culling ist natürlich aus ;-)

Re: Direct3d9 auf Directx 11 Grafikkarte

Verfasst: 12.03.2010, 14:30
von Krishty
„Failed to create driver indexbuffer“ am Anfang kommt auf jeder ATI-Karte, ist harmlos.

Hast du schonmal das Ref-Device oder Software-Vertexprocessing aktiviert? Damit kannst du zumindest checken, ob es ein Treiberfehler ist.

Gruß, Ky

Re: Direct3d9 auf Directx 11 Grafikkarte

Verfasst: 12.03.2010, 15:04
von DeRaaZuul
Wenn ich auf Software-Vertexprocessing stelle , ist der Fehler immer noch da , schaltet ich dann noch die Ref-Device an , bekomme ich bei DrawIndexedPrimitive und ClearScene fehler.

Re: Direct3d9 auf Directx 11 Grafikkarte

Verfasst: 12.03.2010, 15:07
von Schrompf
DeRaaZuul hat geschrieben: schaltet ich dann noch die Ref-Device an , bekomme ich bei DrawIndexedPrimitive und ClearScene fehler.
.. und wie lauten die?

Re: Direct3d9 auf Directx 11 Grafikkarte

Verfasst: 12.03.2010, 15:43
von DeRaaZuul
Sorry musste gerade schnell weg und konnte den Fehler nicht ausführlich beschreiben.Wenn ich die Device auf Ref stelle bekomme ich den Fehler :
-Zugriffsverletzung beim Lesen an Position 0x0000000c.
Unbehandelte Ausnahme bei 0x002ce593 in V3.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x0000000c.

Wenn ich auf Software-Vertexprocessing stelle , bekomme ich den Fehler :
-Invalid index in the index stream: 1116
-IDirect3DDevice9::DrawIndexedPrimitive failed: D3DERR_INVALIDCALL

Re: Direct3d9 auf Directx 11 Grafikkarte

Verfasst: 12.03.2010, 16:41
von Dirk Schulz
Hi,

das klingt alles sehr danach, dass dein Vertex-Layout/Index-Buffer nicht zusammen passt. Was bei nVidia noch durchgeht, führt auf ATI-Karten zu Fehldarstellungen.

Das flackern kommt dann höchstwahrscheinlich daher, dass die Grafikkarte nicht-initialisierte Vertizes verarbeitet.

Also prüfen, ob deine Vertexstruktur gleich dem VertexLayout ist, dass du DirectX lieferst; dass die Anzahl der Indizes deines Indexbuffers richtig ist (abhängig von der Anzahl der Vertices und dem PrimitiveType).


Falls du den Fehler nicht findest, kannst du hier ja mal den entsprechenden Code hinschreiben, viele Augen sehen mehr als zwei. :D

Re: Direct3d9 auf Directx 11 Grafikkarte

Verfasst: 13.03.2010, 02:20
von DeRaaZuul
Dirk Schulz hat geschrieben:Hi,

das klingt alles sehr danach, dass dein Vertex-Layout/Index-Buffer nicht zusammen passt. Was bei nVidia noch durchgeht, führt auf ATI-Karten zu Fehldarstellungen.

Das flackern kommt dann höchstwahrscheinlich daher, dass die Grafikkarte nicht-initialisierte Vertizes verarbeitet.

Also prüfen, ob deine Vertexstruktur gleich dem VertexLayout ist, dass du DirectX lieferst; dass die Anzahl der Indizes deines Indexbuffers richtig ist (abhängig von der Anzahl der Vertices und dem PrimitiveType).


Falls du den Fehler nicht findest, kannst du hier ja mal den entsprechenden Code hinschreiben, viele Augen sehen mehr als zwei. :D
Super das hat mich auf die richtige Spur geführt :) Bei DrawIndexedPrimitive war der Feher.Ich dachte immer NumVertices soll die Anzahl der Vertices sein die tatsächlich gerendert werden ,also wenn nur 3 Vertices gebraucht werden soll der Wert auch 3 sein.Nach langem suchen in der SDK weiss ich jetzt aber das der Wert immer so groß sein soll , wie die Gesamtzahl aller Vertices die im Buffer drin sind.
Danke an alle für eure super schnelle und wie immer sehr kompetente Hilfe!

Re: Direct3d9 auf Directx 11 Grafikkarte

Verfasst: 26.01.2011, 10:32
von gamer1208
Hallo zusammen,

ich würde hier gerne noch einmal einhaken:

Ich versuche gerade ebenfalls mit DrawIndexedPrimitive meinen Mesh zu rendern. Wenn ich nur den VertexBuffer render ohne Index dann klappt das auch. Nur mit der Methode DrawIndexedPrimitive klappt es nicht. Es liegt vermutlich an den Parametern der Methode.

Auch nach mehreren Definitionen ist mir immer noch nicht ganz klar was da als Parameter rein muss.

DrawIndexedPrimitive( D3DPT_TRIANGLELIST, // PrimitiveType
0, // BaseVertexIndex (Der Wert wird auf jeden Index addiert.)
0, // MinIndex (Einfach der kleinste Index der verwendet wird. )
4, // NumVertices (Die Anzahl der benutzten Vertice. Oder auch der ganze Vertex Buffer)
0, // StartIndex (Index im IndexBuffer bei dem begonnen wird)
2 ); // PrimitiveCount (Anzahl der Dreiecke die gezeichnet werden sollen. z.B. Anzahl der genutzten Vertices / 3)

BaseVertexIndex und StartIndex sind mir ziemlich klar.
Beim MinIndex handelt es sich doch um den kleinsten Index im IndexBuffer (z.B. Index Buffer steht [4,1,3] --> MinIndex wäre dann 1 ?)
NumVertices ist so stumpf wie es sich anhört. Einfach die Anzahl der zu zeichnenen Vertices ?
PrimitiveCount . Die Anzahl der Dreiecke. Kann ich dort dann nicht einfach die Anzahl der Verices im VertexBuffer / 3 rechnen ?!

So interpretiere ich momentan die Parameter. Trotzdem zeichnet die Methode bei mir nichts. Sind meine Annahmen so richtig ?

Vielen Dank und Gruß

-gamer1208-

Re: Direct3d9 auf Directx 11 Grafikkarte

Verfasst: 26.01.2011, 12:19
von Krishty
Ist sonderbar, sich nach einem Jahr in einen Thread einzuhaken, an dem man nicht teilgenommen hat … aber vielleicht kann ja ein Moderator ein eigenes Thema draus machen ;)
gamer1208 hat geschrieben:PrimitiveCount . Die Anzahl der Dreiecke. Kann ich dort dann nicht einfach die Anzahl der Verices im VertexBuffer / 3 rechnen ?!
Nein, weil bei indizierten Modellen Vertices doppelt genutzt werden können – darum führt man ja überhaupt erst Indizes ein. Du solltest die Anzahl der Indizes im Index Buffer ÷ 3 angeben.

Beim Rest kann ich leider nicht helfen; D3D9 liegt bei mir zu weit zurück. Schonmal PIX probiert? Da kannst du sehen, wie viele Vertices gerendert werden und wo die Geometrie auf dem Bildschirm landet.

Re: Direct3d9 auf Directx 11 Grafikkarte

Verfasst: 26.01.2011, 13:22
von gamer1208
Vielen Dank Krishty, denke dass da schon der Fehler liegt, bzw. lag. Kann es leider erst heute Abend testen.