Ich hab ein Spiel mit DX9. Das Spiel erzeugt on-the-fly Texturen und Meshes. Pro Frame z.b. einen Strauß 256er, 512er oder auch mal eins zwei 2048er. All diese Teile entstehen noch komplett auf der CPU, ich bündel sie auf einen 4096er Atlas und Jedes Frame erstelle ich eine neue Textur und befülle sie:
Code: Alles auswählen
d3dDevice->CreateTexture( breite, hoehe, 1, /*flags*/, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &mD3DTextur, NULL);
d3dDevice->CreateOffscreenPlainSurface( breite, hoehe, FMT, D3DPOOL_SYSTEMMEM, &tempsurf, nullptr);
tempsurf->LockRect( &rect, nullptr, D3DLOCK_DISCARD);
copyPixelData(dahin);
tempsurf->UnlockRect();
mD3DTextur->GetSurfaceLevel( 0, &zielSurface);
d3dDevice->UpdateSurface( tempsurf, &srcRect, zielSurface, &dstPoint);
zielSurface->Release();
tempsurf->Release();
Das Problem:
Code: Alles auswählen
TexturUpdate: 14 Fragmente mit MaxGröße 2048² auf 6 Ziel-Atlanten in 406.19ms