VertexBuffer.GetData<T> Bug?!

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von φConst.

    VertexBuffer.GetData<T> Bug?!

    Guten Abend,
    ich meine einen Bug reproduziert zu haben.

    Und zwar geht es um die Methode "GetData" des VertexBuffers.
    Ich nahm an, dass die Größe des Arrays identisch zur Anzahl der zu ladenden Vertices zu sein hat.
    Soll heißen: GetData nimmt die Parameter buffer[], startIndex und count an.

    Das Problem jedoch: Wenn ich startIndex exemplarisch 256 setze und count = 16, muss ich ein Array generieren mit der Größe 256+16=272!
    Es werden redundant diese 255 Elemente geladen ( denen anbei auch noch die Standardwerte zugewiesen sind).

    Gibt es eine Möglichkeit wirklich nur die Elemente zu laden, die ich auch im Rahmen von startIndex und count definiert habe und demzufolge ein Array mit der Größe dieses Spektrums?
    Lieben Dank!
    Und Gott alleine weiß alles am allerbesten und besser.
    @φConst Kannst Du mal ein Stück Code posten, das diesen Effekt reproduziert?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So wie ich das sehe musst die die Überladung verwenden, die als ersten Parameter offsetInBytes verwendet:
    github.com/MonoGame/MonoGame/b…ertexBuffer.OpenGL.cs#L87
    github.com/MonoGame/MonoGame/b…rtexBuffer.DirectX.cs#L97
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    C#-Quellcode

    1. VertexPositionTexture[] vertices = new VertexPositionTexture[index.Count];
    2. verticesBuffer.GetData<VertexPositionTexture>(VertexPositionTexture.VertexDeclaration.VertexStride * index.Index, vertices, 0, index.Count, VertexPositionTexture.VertexDeclaration.VertexStride);


    Ich versuche es damit.

    EDIT: @jvbsl Ja, exakt das war es!

    C#-Quellcode

    1. ​ VertexPositionTexture[] vertices = new VertexPositionTexture[COUNT * 4 + 4];
    2. verticesBuffer.GetData<VertexPositionTexture>(VertexPositionTexture.VertexDeclaration.VertexStride * START, vertices, 0, COUNT * 4 + 4, VertexPositionTexture.VertexDeclaration.VertexStride);
    Und Gott alleine weiß alles am allerbesten und besser.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „φConst“ ()