Ich hab ein kleiens Programm geschrieben das einen Boden aus meherern Dreiecken generiert. Beim initialiserin übergibt man die anzahl der X und Z Quadrate und es erstellt dasrau die Vertices. Also wenn man z. B. 2x2 übergibt werden 8 Dreiecke (für jedes Quadrat 2) also 24 Vertices erstellt.
Zueerst haben ich diese dann mit DrawPrimitivesUP angeziegt. Bei einer Feldgröße von 100 mal 100 hatte ich aber nur noch 14 Frames.
Also hab ich versucht das alles in einen VertexBuffer zu schreiben:
|
Quellcode
|
1
2
3
4
5
6
7
8
|
if(FAILED(m_lpD3DDevice->CreateVertexBuffer(sizeof(TexturedVertex)*m_Size*6, 0, D3DFVF_TEXTUREDVERTEX, D3DPOOL_MANAGED, &m_lpVB, NULL)))
{
Error("VertexBuffer konnte nicht erstellt werden!");
}
void* pVertices=NULL;
m_lpVB->Lock(0, 0, &pVertices, 0);
memcpy(pVertices, m_BodenVertices, sizeof(TexturedVertex)*m_Size*6);
m_lpVB->Unlock();;
|
Bei einer geringen Feldgröße (10x10) funktioniert alles wunderbar. Aber wenn ich ein Feld von 10x100 erstellen möchte, funktioniert es nicht mehr, das Programm stürtz bei dem memcpy Befehl ab. Durch testen hab ich herausgefunden das das Feld 25x12 noch funktioniert und korrekt dargestellt wird. bei 13x25 gehst schon nicht mehr, auch hier stürtz das programm beim memcpy ab.
Kann es also sein, das der VertexBuffer zu klein ist? Aber dann müsste er doch beim erstellen schon einen Fehler melden.