Direct3d9 auf Directx 11 Grafikkarte

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
DeRaaZuul
Beiträge: 15
Registriert: 19.03.2008, 00:25

Direct3d9 auf Directx 11 Grafikkarte

Beitrag 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 ;-)
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Direct3d9 auf Directx 11 Grafikkarte

Beitrag 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
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
DeRaaZuul
Beiträge: 15
Registriert: 19.03.2008, 00:25

Re: Direct3d9 auf Directx 11 Grafikkarte

Beitrag 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.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Direct3d9 auf Directx 11 Grafikkarte

Beitrag von Schrompf »

DeRaaZuul hat geschrieben: schaltet ich dann noch die Ref-Device an , bekomme ich bei DrawIndexedPrimitive und ClearScene fehler.
.. und wie lauten die?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
DeRaaZuul
Beiträge: 15
Registriert: 19.03.2008, 00:25

Re: Direct3d9 auf Directx 11 Grafikkarte

Beitrag 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
Dirk Schulz
Establishment
Beiträge: 130
Registriert: 01.03.2009, 14:21
Alter Benutzername: frittentuete

Re: Direct3d9 auf Directx 11 Grafikkarte

Beitrag 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
DeRaaZuul
Beiträge: 15
Registriert: 19.03.2008, 00:25

Re: Direct3d9 auf Directx 11 Grafikkarte

Beitrag 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!
gamer1208
Beiträge: 5
Registriert: 26.01.2011, 09:54

Re: Direct3d9 auf Directx 11 Grafikkarte

Beitrag 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-
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Direct3d9 auf Directx 11 Grafikkarte

Beitrag 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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
gamer1208
Beiträge: 5
Registriert: 26.01.2011, 09:54

Re: Direct3d9 auf Directx 11 Grafikkarte

Beitrag von gamer1208 »

Vielen Dank Krishty, denke dass da schon der Fehler liegt, bzw. lag. Kann es leider erst heute Abend testen.
Antworten