PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Exception bei Debug Version von DirectX


PatkIllA
2007-10-31, 17:32:36
Ich wollte mit Visualstudio einen VertexShader debuggen, aber ich habe schon vorher ein Problem.
Ich habe das DirectX SDK vom Novmber 2007 drauf und im Controlpanel die Debug Version von DirectX ausgewählt.
Allerdings fliegt untenstehende Exception, die nur dann auftritt, wenn ich die Debug Version wähle. Mit der Retailversion läuft das Programm.
Microsoft.DirectX.Direct3D.InvalidCallException wurde nicht behandelt.
Message="Fehler in der Anwendung."
Source="Microsoft.DirectX.Direct3D"
ErrorCode=-2005530516
ErrorString="D3DERR_INVALIDCALL"
StackTrace:
bei Microsoft.DirectX.Direct3D.Device.DrawIndexedPrimitives(PrimitiveType primitiveType, Int32 baseVertex, Int32 minVertexIndex, Int32 numVertices, Int32 startIndex, Int32 primCount)
bei D3D_Renderer.D3DTileRenderer.Render(Device dev, Effect effect) in X:\D3D Renderer\D3D Renderer\3D\D3DTileRenderer.cs:Zeile 284.
bei D3D_Renderer.D3DSceneLayerRenderer.Render(Device dev, Effect effect) in X:\D3D Renderer\D3D Renderer\3D\D3DSceneRenderer.cs:Zeile 27.
bei D3D_Renderer.D3DSceneRenderer.Render(Device dev, Effect effect) in X:\D3D Renderer\D3D Renderer\3D\D3DSceneRenderer.cs:Zeile 47.
bei D3D_Renderer.ExampleForm.Render() in X:\D3D Renderer\D3D Renderer\3D\ExampleForm.cs:Zeile 170.
bei D3D_Renderer.Program.Main(String[] args) in X:\D3D Renderer\D3D Renderer\Program.cs:Zeile 60.
bei System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()

Demirug
2007-10-31, 17:47:57
Die Debug Version prüft genauer als die Retail. Und das alte MDX wirft eine Exception wenn ein FehlerCode zurück kommt. Du solltest unmanaged debbuging in deinem Projekt aktivieren dann bekommst den Grund für den Fehler angezeigt.

PatkIllA
2007-11-01, 10:49:28
Das nicht verwaltete Codedebuggen hat mich auch nicht weiter gebracht. Dann kommt nur:
Eine nicht behandelte Ausnahme des Typs "Microsoft.DirectX.Direct3D.InvalidCallException" ist in Microsoft.DirectX.Direct3D.dll aufgetreten.

Zusätzliche Informationen: Error in the application.
Die Samples laufen aber, also scheint es doch wohl an mir zu liegen;)
Gibt es vielleicht irgendwas, was man beim Initialisieren des Devices beachten muss?
Oder ist das Problem doch eher beim Shader zu suchen? Allerdings habe ich das gleiche Problem auch schon beim einfachsten Shader, der nur die Vertices transformiert und die Textur samplet.

Demirug
2007-11-01, 12:10:15
Eigentlich sollten da mehr Fehlermeldungen komme. Oder hast du noch VS 2003? Mit einem externen Debugmonitor(z.B. DebugView) sollte es auf jeden Fall gehen.

Das Problem liegt darin das die Pipeline für den draw call nicht richtig gesetzt ist oder du bei dem Drawcall selbst ungültige Parameter benutzt. Die Möglichkeiten sind aber zu vielfällig um da ohne die Fehlermeldung genaueres zu sagen.

PatkIllA
2007-11-01, 12:24:10
DebugView war das richtige Stichwort:
[1984] Direct3D9: (ERROR) :Stream 0 does not have required number of vertices
Hatte da als numVertices die Anzahl der Indexes angegeben.
Kaum macht man es richtig klappt es auch. :)