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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

21

16.03.2013, 12:45

&Vertices_sortiert_VECTOR ist ein Pointer auf den vector selbst und nicht dessen Inhalt...

22

16.03.2013, 15:33

Wenn du einen aktuellen Compiler hast: myVector.data() (http://en.cppreference.com/w/cpp/container/vector/data)
Ansonsten: &myVector[0]
Lieber dumm fragen, als dumm bleiben!

lfp

Frischling

  • »lfp« ist der Autor dieses Themas
  • Private Nachricht senden

23

16.03.2013, 16:17

&Vertices_sortiert_VECTOR ist ein Pointer auf den vector selbst und nicht dessen Inhalt...

aber wenn ich stattdessen den ursprünglichen Array ( VERTEX Vertices_sortiert [10000] ) verwende, also VertexBuffer->Lock(0,0,(void**)(&Vertices_sortiert), D3DLOCK_NOSYSLOCK);, dann übergebe ich doch auch nur einen Pointer und es funktioniert ?( Oder versteh ich das falsch?
In der msdn heißt es: VOID* pointer to a memory buffer containing the returned vertex data

Also müssen wir doch eh nur einen Pointer auf den vector und nicht den Inhalt des vectors angeben?

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

24

16.03.2013, 16:23

Zugriff auf das Interne Array des std::vector erhältst du über dessen data( ) ( s.o.) Methode. Das ist dann ein Pointer auf den Anfang des Arrays vom Typ des Inhalts (musst du dann eventuell noch casten).
:love: := Go;

lfp

Frischling

  • »lfp« ist der Autor dieses Themas
  • Private Nachricht senden

25

16.03.2013, 16:27

Zugriff auf das Interne Array des std::vector erhältst du über dessen data( ) ( s.o.) Methode. Das ist dann ein Pointer auf den Anfang des Arrays vom Typ des Inhalts (musst du dann eventuell noch casten).

hmmm... das sieht jetzt so aus:

C-/C++-Quelltext

1
VertexBuffer->Lock(0,0,(void**)(Vertices_sortiert_VECTOR.data()), D3DLOCK_NOSYSLOCK);


Führt zu ner Zugriffsverletzung...

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

26

16.03.2013, 17:02

Naja, du schreibst mit der Methode Lock( ) ja auch in den std::vector. Was auch geht, aber er muss dazu die richtige Größe haben. Den std::vector selbst kannst du mit der resize( ) Methode auf eine Größe setzen.
:love: := Go;

lfp

Frischling

  • »lfp« ist der Autor dieses Themas
  • Private Nachricht senden

27

16.03.2013, 17:02

Eine neue Funktion

Da euch meine .obj-Laden-Funktion scheinbar sehr verwirrt und es an einem gemeinsamen Code fehlt, über den wir diskutieren hab ich mal ne neue, übersichtlichere und vorallem kürzere Funktion geschrieben:

C-/C++-Quelltext

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
29
30
31
32
33
34
void letstestsomevectorclass(LPDIRECT3DDEVICE9 D3DDevice){
    vector <VERTEX> testvector;
    VERTEX testvertex;
    LPDIRECT3DVERTEXBUFFER9 testVertexBuffer;
    #define MyFVF (D3DFVF_XYZ | D3DFVF_DIFFUSE)

    D3DDevice->CreateVertexBuffer(3*sizeof(VERTEX), 0, MyFVF, D3DPOOL_MANAGED, &testVertexBuffer, NULL);
    
    
    testVertexBuffer->Lock(0,0,(void**)(   -?-   ), D3DLOCK_NOSYSLOCK);

    testvertex.x = 5;
    testvertex.y = 5;
    testvertex.z = 1;
    testvertex.Color = RGB(100, 100, 100);

    testvector.push_back(testvertex);

    testvertex.x = 0;
    testvertex.y = 0;
    testvertex.z = 1;
    testvertex.Color = RGB(100, 100, 100);

    testvector.push_back(testvertex);

    testvertex.x = 10;
    testvertex.y = 0;
    testvertex.z = 1;
    testvertex.Color = RGB(100, 100, 100);

    testvector.push_back(testvertex);

    testVertexBuffer->Unlock();
}


Die Fragestellung sollte klar sein:

Zeile 10: -?- :this: was kommt da rein

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

28

16.03.2013, 17:09

Schau dir noch mal die Synopsis der Lock( ) Methode an sie erwartet einen Zeiger auf einen Zeiger. Die data( ) Methode liefert jedoch einen Zeiger auf das erste Element im internen Array des std::vector.

Edit:
Und beutze doch am besten C++ Casts. :D
:love: := Go;

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

29

16.03.2013, 17:11

Schau dir bitte mal an, was der dritte Parameter von Lock überhaupt macht...

lfp

Frischling

  • »lfp« ist der Autor dieses Themas
  • Private Nachricht senden

30

16.03.2013, 17:32

Schau dir bitte mal an, was der dritte Parameter von Lock überhaupt macht...

hab ich doch schon:

In der msdn heißt es: VOID* pointer to a memory buffer containing the returned vertex data

Werbeanzeige