Ich habe einen Speicherort von DirectX erhalten, in dem meine Eckpunktdaten gespeichert sind. Eine sehr bequeme Möglichkeit, mit Vertex-Informationen umzugehen, ist die Verwendung eines std :: vector & lt; & gt; einer Struktur, die Vertex-Informationen enthält.
Da ich einen Zeiger auf einen großen Puffer habe, könnte ich einen std :: Vektor verwenden, um die Elemente im Puffer zu verwalten? Das Konstruieren eines std :: vectors bewirkt regelmäßig, dass es eine eigene Adresse hat, was ich nicht wirklich will. Könnte ich irgendwie die Operatorplatzierung verwenden?
Ja, du kannst. Verwenden Sie benutzerdefinierten Zuordner . In dieser Zuweisungsadresse des DirectX-Speichers.
Hier ist ein vollständiges Beispiel basierend auf einer Antwort von überzeugende Beispiele für benutzerdefinierte C ++ - STL-Zuordner? . Diese Lösung verwendet eine neue Platzierung im Zuordner.
%Vor% Die Elemente von std::vector
werden dynamisch auf dem Heap (mit new
by std::vector
selbst) so zugeordnet, dass sie im Speicher immer zusammenhängend sind. Wenn Ihre Struktur also vertex
ist, ist die Verwendung von std::vector<vertex>
nicht das, was Sie wollen, da die Elemente des Vektors nicht in Ihrem großen Puffer liegen.
Sie könnten jedoch std::vector<vertex*>
verwenden, wie zum Beispiel:
Tags und Links c++ vector memory-address facade