Habt ihr euch schon mal UpdateSurface angeschaut?
-
Kann das sein, dass das extrem langsam ist? 10000 Surfaces in 25ms haut mich nicht gerade vom Hocker. Mein geliebtes CopyRects hat das Ganze in weniger als 2 ms bewerkstelligt. Das gibt es aber in D3D9 nicht mehr.
Was kann ich tun?Aufruf:
lpDevice->UpdateSurface(minimapFogSurface, &source, minimapSurface, &dest);
Erstellen der Surfaces:
if (FAILED(lpDevice->CreateOffscreenPlainSurface((UINT)Interface::MINIMAP_TILE, (UINT)Interface::MINIMAP_TILE, format, D3DPOOL_SYSTEMMEM, &minimapFogSurface, NULL))) return false; if (FAILED(D3DXLoadSurfaceFromFile(minimapFogSurface, NULL, NULL, _T("Grafik/Menu/MinimapFog.bmp"), NULL, D3DX_FILTER_NONE, 0, NULL))) return false; --- if (FAILED(lpDevice->CreateOffscreenPlainSurface(200, 200, format, D3DPOOL_DEFAULT, &minimapSurface, NULL))) return false;
-
10000 Bilder in 2 ms kopieren? Hast Du dich da sicher nicht vertippt? Selbst wenn die Bilder klein sind kommt mir das irgendwie ultraschnell vor.
Zur Frage:
ka
-
Naja die Bilder sind nur 3x3 Pixel groß
Auf jeden Fall ist es jetzt mindestens 15mal so lahm.
Warum haben die das CopyRects überhaupt entfernt?! Was gibt es für Alternativen? StretchRect ist auch nur minimal schneller. Benutze ich die Funktionen falsch?EDIT: Ok, 10.000 war falsch, ich hab ganz vergessen, dass ich nur immer jede 4te Zeile pro Frame zeichne, also 2.500
-
Sehe ich das richtig, das du UpdateSurface 10000 mal für Rechtecke der Größe 3X3 Pixel aufrufst? Das ist schon 'ne ziemlich dumme Idee! Du solltest die 300x300 Pixel (überhaupt komische Größen...) mit einem Aufruf updaten!
Bye, TGGC (Der Held ist zurück)
-
Kannst du das bitte etwas genauer erklären? Ich muss doch irgendwie meine minimapSurface zusammensetzen, dann blitte ich natürlich schon die ganze Surface auf einen Schlag in den BackBuffer.
Aber ich muss doch das Bild aus den einzelnen Tiles aufbauen.
-
Erstens glaube ich nicht, das sich alle 300x300 Punkte der Minimap gleichzeitig ändern und zweitens glaube ich nicht, das UpdateSurface dazu gedacht ist, Bilder (bzw. Texturen) "zusammenzukopieren".
Was ändert sich denn an der Minimap alles? Stell doch die Einheiten einfach durch Pointsprites o.ä. dar, oder wieviele Tausende hast du?
Bye, TGGC (Der Held ist zurück)
-
Die Einheiten sind Sprites, die sind kein Problem. Es geht darum, anzuzeigen, ob ein Gebiet erkundet (Terrainfarbe) oder nicht erkundet (schwarz) ist. Und das kann sich für jedes Tile ändern...
-
Na der Fog ändert sich doch noch langsamer! Ausserdem kannst du den mit 'ner Textur mit Alpha unabhängig von der Minimap machen. Da würde dann evtl. sogar 100x100 Pixel reichen.
Bye, TGGC (Der Held ist zurück)
-
Du meinst die Textur immer wieder anpassen und ihr nach und nach an den erkundeteten Stellen die transparente Farbe verpassen? Kann ich das mit UpdateTexture() machen?