Seite 2 von 2
Verfasst: 29.11.2007 21:01
von Kaeru Gaman
> Ich möchte die Grafik auch nicht doppelt im Videoram haben, deshalb wollte ich ja direkt bei der Ausgabe ansetzen.
das wird dir aber fett auf die performance gehen,
wenn du die konvertierung in jedem frame vornehmen musst.
da würde ich dringend von abraten, denn video-ram ist heutzutage weniger ein mangel als busbreite.
ok, busbreite ist auch kein wirklicher mangel...
aber es macht einen gewaltigen unterschied, ob du die daten zig mal pro sekunde hin und her shiften willst,
oder nur einmal umrechnest und dafür halt ein paar KB VRam opferst...
ansonsten schließe ich mich rings an...
arbeite den code einfach mal durch, dann wirst du schon dahintersteigen.
was tut man, wenn wiederholtes aufrufen einen unschönen effekt hat?
nicht wiederholt aufrufen, so einfach ist das.
Verfasst: 30.11.2007 14:16
von Sebastian
Danke für Deine Antwort!
Natürlich weiß ich, dass ich den Algorithmus nicht wiederholen muss, jedoch wollte ich ja die Daten nicht doppelt im VRam haben. Aber Du hast mir die Frage beantwortet, ich muss die Daten dann doppelt haben. Das macht jedoch bei 4096 Tiles x2 schon eine Menge. Was passiert denn wenn ich über das VRam hinausgehe? Werden die Daten dann ins Ram geschrieben und bedeutet dies große Geschwindigkeitseinbußen?
Verfasst: 30.11.2007 14:32
von Laurin
Sebastian hat geschrieben:Was passiert denn wenn ich über das VRam hinausgehe? Werden die Daten dann ins Ram geschrieben und bedeutet dies große Geschwindigkeitseinbußen?
Die Grafik wird dann in den RAM ausgelagert. Es könnte aber auch sein, dass ältere Grafiken aus dem VRAM fliegen um Platz für neue zu schaffen.
Btw, du kannst mir nicht erzählen, dass du 8192 Tiles gleichzeitig anzeigen will. Halte doch nur die im RAM, die aktuell und in der nächsten Minute wahrscheinlich dargestellt werden (Level-Gebiete vorausladen, schon besuchte Level-Gebiete aus dem RAM entfernen).
Ma ne Hochrechnung:
Tiles: 32px*32px@24 bpp (24 Bits = 3 Bytes)
32 * 32 * 3 * 4096 * 2 = 25165824 Bytes = 24576 Kilobytes = 24 Megabytes
24 MB dürften in jede halbwegs aktuelle Grafikkarte reinpassen.
Verfasst: 30.11.2007 20:46
von Sebastian
Deine Rechnung stimmt natürlich. Ich arbeite jedoch mit eine Tilegröße von 64x64 hinzu kommen noch Hintergrundgrafiken usw. Ich möchte mit der Programmierung jedoch auch Rechner, die vor etwa 8 Jahren aktuell waren ansprechen. Daher finde ich die Idee mit kleineren Leveleinheiten recht gut. Ich werde mir das auf jeden Fall zu Herzen nehmen. Eigentlich peinlich, dass ich darauf nicht gekommen bin. Vielen Dank Euch allen für Eure Hilfe! Es hat mir sehr geholfen!
Verfasst: 01.12.2007 12:31
von Kaeru Gaman
> Ich möchte mit der Programmierung jedoch auch Rechner, die vor etwa 8 Jahren aktuell waren ansprechen.
dann würde ich dir grundsätzlich zu 256farb raten.
viele monitore/grakas haben keinen 24bit mode, müssen also 32bit benutzen, das bedeutet 4byte pro pix.
bei 256farb (= 8bit) brauchst du nur 1byte pro pix.
die meisten alten games die mit 4-16MB Grakas klarkommen,
benutzen 8bit, max 16bit grafix.
die erstellung wird etwas schwieriger,
musst halt schaun, was fürn pixel-proggi du benutzen kannst,
um ne einheitliche palette für alle grafix hinzubekommen,
aber von der platzersparnis her lohnt sich der mehraufwand.
außerdem kann es sein (weiß ich nicht genau) dass du dieselben sprites
mit unterschiedlichen paletten darstellen kannst.
wenn du also eine farbige und eine s/w-palette hast,
brauchst du die grafix nur einmal und alles ist wölkchen...
und noch was allgemeines...
schwarzweiße tiles als FogOfWar sieht zwar kultig aus, aber tut nicht unbedingt not.
experimentier mal mit den RGB-Sprite und Alpha-Sprite funktionen für overlays,
damit kann man auch schon viel anstellen.
Verfasst: 02.12.2007 17:15
von Sebastian
Ich arbeite gerade an einem Leveleditor und hatte mir gedacht, dass ich die Funktion einbaue, dass man inaktive Layer s/w schalten kann, um eine bessere Übersicht zu erhalten. Wie ist es denn möglich verschiedene Paltetten auf eine Grafik in PB anzuwenden?
Verfasst: 04.12.2007 16:08
von Kaeru Gaman
musst du mal rumprobieren, ich hab kein beispiel parat.
ob das überhaupt geht, weiß ich nicht, war nur so ne vermutung...
aber mit UsePalette() kann man (konnte man zumindest früher)
festlegen, von welcher 256farb-bmp die interne palette benutzt werden soll.
natürlich kann auf einem 8bit screen nur eine einzige palette verwendet werden,
also müßtest du für so einen trick 8bit sprites auf nem 16bit screen darstellen.
allerdings gibt es für sowas wie du vorhast noch einen viel einfacheren weg:
lege über die inaktiven tiles doch einfach ein bitraster,
bei dem schachbrettartig nur jedes 2te pixel transparent ist.
dafür brauchst du nur ein einziges sprite für alle,
und für nen editor ist es allemal ausreichend.
...das ist der klassische einfache FoW aus AOE-zeiten...
Verfasst: 05.12.2007 21:15
von Sebastian
Genau diese Idee hatte ich auch schon, aber ich hatte mir gedacht, dass es doch bestimmt eine elegantere Lösung geben muss.