Managed Direct3D: DrawIndexedPrimitives schlägt fehl
-
Hallo zusammen,
ich bin grad am umsteigen von XNA auf managed Direct3D und möchte zum warmwerden einen einfachen würfel zeichnen, mit vertex- und indexbuffer, so wie ich es auch schon mit XNA gemacht habe. allerdings erweist sich direct3d als etwas störrisch - device.DrawIndexedPrimitives wirft InvalidCallException. Ich habe meinen rendercode nun schon mehrmals mit verschiedenen tutorials abgeglichen und werde einfach nicht schlau draus. es sollte doch eigentlich alles so stimmen, wie ich es geschrieben habe (?)
hier mal der code
private void InitD3D() { PresentParameters pp = new PresentParameters(); pp.Windowed = true; pp.SwapEffect = SwapEffect.Discard; device = new Device( Manager.Adapters.Default.Adapter, DeviceType.Hardware, this, CreateFlags.HardwareVertexProcessing, pp); } private void InitializeDrawingData() { vertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionColored), 8, device, Usage.WriteOnly, CustomVertex.PositionColored.Format, Pool.Default); int color = Color.ForestGreen.ToArgb(); CustomVertex.PositionColored[] v = new CustomVertex.PositionColored[8]; // ... vertexkoordinaten werden gesetzt ... vertexBuffer.SetData(v, 0, LockFlags.None); short[] indices = { //indices werden gesetzt }; indexbuffer = new IndexBuffer(device, 36 * 2, Usage.WriteOnly, Pool.Default, true); indexbuffer.SetData(indices, 0, LockFlags.None); } protected override void OnPaint(PaintEventArgs e) { device.Transform.World = Matrix.Identity; device.Transform.View = camera.View; device.Transform.Projection = camera.Projection; device.VertexFormat = CustomVertex.PositionColored.Format; device.SetStreamSource(0, vertexBuffer, 0); device.Indices = indexbuffer; device.RenderState.FillMode = FillMode.Solid; device.RenderState.CullMode = Cull.Clockwise; device.Clear(ClearFlags.Target, BackColor, 0.0f, 0); device.BeginScene(); device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 8, 0, 12); device.EndScene(); device.Present(); }
soweit eine vermeintlich simple aufgabe und doch stell ich mich zu blöd an, den fehler zu finden. diese InvalidCallException ist halt etwas fies, weil sie mir keinen genaueren hinweis gibt, wo und bei welchem parameter der fehler auftritt.
hab ich irgendwas vergessen? vertexbuffer ist da und hat daten und ist dem device zugewiesen, genauso der indexbuffer. das sollte doch eigentlich schon reichen, oder?
bitte helft mir, sonst hab ich morgen keine haare mehr
-
Ich hab genau das gleiche gehabt. Wollte C++/CLI mit MDX Programmieren. Ging alles nicht was ich wollte.
Als ich dann das mit C# versucht habe ging wirklich fast alles. Ausser Texturen wollen noch nicht richtig, aber der Rest...Einwandfrei. Ich kanns nur empfehlen.EDIT: Sorry, ists ja, habs nur schnell überflogen
lol
-
Aber mit Managed DirectX wirst du hier auf extrem Taube Ohren stoßen. Hab ich auch schon versucht
-
denjo303 schrieb:
Ich hab genau das gleiche gehabt. Wollte C++/CLI mit MDX Programmieren. Ging alles nicht was ich wollte.
Mit MDX hab ich garkeine Erfahrungen, aber "normales" DirectX (auch Direct3D) geht mit C++/CLI wunderbar. Man schreibt sich den "Managed Wrapper" dann halt selbst, soweit und in der Form wie man ihn braucht
-
was habt ihr gegen MDX? warum selber wrappen, wenn sich jemand anders für euch die mühe gemacht hat
hab den fehler inziwschen auch gefunden - hatte für den indexBuffer den falschen konstruktor benutzt (und an so nem mist hängt man zwei stunden
)