Hallo,
Ich verzweifle hier gleich, dabei gibt es bestimmt eine ganz einfache Lösung für mein Prob. Also versuche mich gerade ein bisschen in DirectX 9 einzufinden und habe mir eine Klasse THUDObject erstellt. Diese soll einfache HUD-Elemente o.ä. (e.g. Fadenkreuz) auf den fertig gerenderten Screen legen. Für den Anfang soll die Klasse aber erstmal ein buntes Viereck zeichnen. Wenn ich nun die Vertices fest als
Delphi-Quelltext
1:
| Vertices = array[0..3] of TCustomVertex; |
definiere und dann per CopyMemory in meinen vb kopiere, klappt alles wunderbar. Ich möchte aber die Möglichkeit offenhalten, HUD-Elemente mit unterschiedlicher Vertexanzahl zu benutzen. Also habe ich meine Vertices als
Delphi-Quelltext
1:
| Vertices = array of TCustomVertex; |
deklariert. In der Methode AddVertex passiert dann folgendes:
Delphi-Quelltext
1: 2: 3:
| VerticeCount := VerticeCount + 1; SetLength(Vertices, VerticeCount); Vertices[VerticeCount-1].x := blablabla |
Eigentlich sollte das klappen, aber das Bild bleibt leider schwarz. Was mache ich da falsch? Hier mal noch der Code der VB-Erstellungs-Proc und der Render-Proc:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure THUDObject.CreateVB(); var PVertices: Pointer; i : Integer; begin pD3DDevice.CreateVertexBuffer(sizeof(THUDVertex) * verticecount, 0, D3DFVF_HUDVERTEX, D3DPOOL_DEFAULT, VertexBuffer, nil); VertexBuffer.Lock(0, sizeof(Vertices), PVertices, 0); CopyMemory(pVertices, @vertices, SizeOf(vertices)); VertexBuffer.Unlock; end;
procedure THUDObject.Draw; begin if VertexBuffer <> nil then begin pD3DDevice.SetStreamSource(0, VertexBuffer, 0, sizeof(THUDVertex)); pD3DDevice.SetFVF(D3DFVF_HUDVERTEX); pD3DDevice.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); end; end; |
Bin für jede Hilfe dankbar!
MfG
Thomas
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.