Einzelnen Beitrag anzeigen

OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#3

Re: DirectX Vertex Darstellung

  Alt 2. Sep 2003, 09:20
Du musst den IDirect3DVertexBuffer8 als Managed Resource erstellen, heißt bei der Erstellung gibst du als Pool D3DPOOL_MANAGED an. Dann übernimmt Direct3D die komplette Verwaltung, aber dafür ist er nicht so gut geeignet für dynamische Daten. Dafür müsstest du einen anderen Pool nehmen, und in dem Fall müsstest du immer, wenn ein Device Lost ist, die Daten neu reinkopieren. Genau das macht Direct3D aber auch im Managed Pool, nur halt automatisch. Das hängt damit zusammen, dass bei einem Device Lost das Gerät (heißt die Grafikkarte) ihren Speicher "verliert", in dem der Vertexbuffer seine Daten hält.

In jedem Fall ist es FALSCH, d.h. nicht gerade performanceträchtig, diese Kopieraktion in der Render-Funktion (oder in einer beliebigen anderen Funktion, die pro Frame aufgerufen wird) durchzuführen. Wenn du WRITE_ONLY nimmst, heißt das, du kannst die Vertices NICHT auslesen, musst sie also alle selbst erzeugen und kannst sie nicht verändern (sondern nur neu schreiben). Die Vertices werden bei DrawPrimitive benötigt. Dir muss im übrigen klar sein, dass es relativ ineffizient ist, ständig den Buffer zu locken etc. Beschreibe am besten nochmal genauer, was du mit den Vertices machen willst und wie und wann.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat