Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

12.08.2005, 12:28

Problem beim Updaten eines Vertex im VertexBuffer

Hallo Leute

Mein Plan: ist es ganz einfach EINEN Vertex zu aktualisieren

Vorweg: Wer den Code von Scherfgen kennt (TriBase), dem sollte dies hier ein wenig bekannt vorkommen ;)

So wird bei mir der Vertex dwVertex aktualisiert:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
PDIRECT3DVERTEXBUFFER9 wmVertexBuffer::UpdateVertex(DWORD dwVertex) {
    // Variablen
    HRESULT hResult;
    void *pVertices;

    // Parameter und Variablen prüfen
    if (this->dwMaxVertices <= dwVertex)
        WM_ERROR("Parameterprüfung schlug fehl!!!", 0x00000000);

    // Buffer sperren:
    hResult = this->pVertexBuffer->Lock(dwVertex * this->dwVertexSize, 
        this->dwVertexSize, &pVertices, D3DLOCK_DISCARD);
    if (FAILED(hResult))
        WM_ERROR("Konnte VertexBuffer nicht sperren", 0x0000000);

    // Daten kopieren
    memcpy(pVertices, (BYTE*)(this->pBuffer) + dwVertex*this->dwVertexSize, this->dwVertexSize);

    // Buffer entsperren
    this->pVertexBuffer->Unlock();

    // Werte zurücksetzen
    this->dwFirstVertex = this->dwMaxVertices-1;
    this->dwLastVertex  = 0;

    // - THE END -
    return this->pVertexBuffer;
}


Das Problem ist, dass darauf er nicht mehr rendert bzw. eine wilde Dreieckkonstellation "kreiirt"

Ich hoffe ihr könnt mir da helfen, ich bin meinem Latei leider am Ende

mfg Markus-Lanner

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

12.08.2005, 13:02

Wenn ich das richtig sehe, sperrst Du nur den Teil vom Vertex-Buffer (mit Lock), den Du auch verändern willst. Das ist gut. Dann stimmt aber Deine Adressenberechnung bei memcpy nicht mehr. Bei memcpy brauchst Du dann nix mehr zu dem Zeiger hinzuzuaddieren, weil der Zeiger ja schon genau auf den Vertex zeigt.

3

12.08.2005, 14:10

Versteh ich nicht... Ich hab doch in pVertices "gelockt" und bei memcpy addiere ich nur beim BUFFER nicht mehr bei der Variable pVertices...

mfg Markus-Lanner

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

12.08.2005, 14:16

Oh, Du hast recht. Sorry.
Was ist es denn für ein VB? Dynamisch? D3DPOOL_MANAGED oder D3DPOOL_DEFAULT?

5

12.08.2005, 14:26

Quellcode

1
DWORD dwUsage = D3DUSAGE_WRITEONLY | D3DUSAGE_DYNAMIC; D3DPOOL Pool = D3DPOOL_DEFAULT


mfg Markus-Lanner

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

12.08.2005, 23:06

"For vertex and index buffers, the application discards the entire buffer."[...]
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

7

13.08.2005, 13:06

Sry, aber was genau meinst du damit?

mfg Markus-Lanner

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

13.08.2005, 13:33

Das heißt, dass der gesamte Puffer discarded (mit Müll gefüllt) wird, auch wenn Du nur einen kleinen Teil davon sperrst. Das gilt für D3DLOCK_DISCARD. Also nimm einen managed Puffer und lass das DISCARD weg.

Werbeanzeige