Entwickler-Ecke

Multimedia / Grafik - *DX9*: VertexBuffer aus dynam. Array -> leerer Screen


DX - Mo 18.08.03 21:55
Titel: *DX9*: VertexBuffer aus dynam. Array -> leerer Screen
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 user profile iconTino: Code- durch Delphi-Tags ersetzt.


KarlKoch - Mo 18.08.03 23:11

Deine CopyMemory stimmt nicht. Du darfst nicht @vertices kopieren, sondern du musst beim ersten Element anfangen und dann count Vertices kopieren, also

Delphi-Quelltext
1:
CopyMemory(pVertices, @vertices[0], sizeof(THUDVertex) * verticecount);                    

karlkoch

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.


DX - Di 19.08.03 07:01

Danke für die schnelle Antwort, ich probier's gleich heute nachmittag aus.

MfG
Thomas


DX - Di 19.08.03 16:37

:D Das funzt! Vielen Dank!