2d Leveldarstellung optimieren



  • Siehe auch FAQ.

    Bye, TGGC (Der Held ist zurück)



  • Nagut, dann werd ich es mal umbauen nachdem ich den "Saugen, Müll entsorgen+Flaschen sonst Mord" Zettel abgearbeitet hab und hoffen das es schnell genug geht 😃



  • So ich habs mal umgesetzt, funktionieren tut der Kram.
    Allerdings nicht sooo viel schneller als vorher(eher nen Ticken langsamer), sprich ein scrollen alle 2-3 Pixel statt alle 10 geht immer noch nicht :/.
    Das Problem sind ganz einfach folgende 3 Zeilen in denen das Bild vergrössert wird:

    SDL_Surface* zwischen = zoomSurface(mini_screen, 2, 2, smooth_tiles);
      SDL_BlitSurface(zwischen, 0, screen, 0);                                 
      SDL_FreeSurface(zwischen);
    

    Wenn ich die Tiles hingegen direkt auf den Screen zeichne bin ich richtig fix(und viel zu klein 🤡.

    Und wenn ich Smoothing beim vergrössern aktiviere geht garnix mehr(10 fps wären schon viel ^^) und wenn ich es deaktiviere bin ich vieleicht 5% schneller als mit meiner alten Methode(die allerdings Smoothing an hatte :o ).
    Sone Mini Auflösung das ich nicht mehr vergrössern muss wollte ich eigentlich auch nur ungerne machen, weil ich schon ein paar etwas schönere Bilder einbauen wollte ;).
    Und wenn ich das Chipset erst vergrössere(einmalig beim Level laden laden) und dann die bereits vergrösserten Tiles auf die Screensurface von da aus blitten will, bin ich mit Smoothing auch am Arsch, weil der die Pixel ineinander verschwimmen lässt, was bei Tiles verständlicherweise echt mies ist =[.
    Und viel schneller ist das seltsamerweise auch nicht dann.



  • SDL rechnet beim Skalieren ja immer noch Bitmapweise, d.h. die Last liegt komplett auf der CPU. Evtl. solltest Du die 3D-Beschleunigung deiner Karte nutzen.. Es gibt auch Toolkits, die automatisch die 3D-Features auf 2D-Grafiken abbilden, zB. ClanLib. Damit kann man dann wie gewohnt auf den Bildschirm blitten und herumskalieren, und mit 900 skalierten Tiles pro Bildschirm bekommst Du sicher 100fps hin mit einem aktuellem PC.



  • SDL kann von sich aus skalieren? 😃 Hab ich nirgends gefunden.
    Ich nehm dazu ja auch schon
    sdl_gfx ( http://www.ferzkopp.net/~aschiffler/Software/SDL_gfx-2.0/ ) und das zoomen läuft ohne anti-aliasing auch schnell genug.

    Hauptproblem ist das zoomSurface eine neue surface erstellt beim zoomen und ich damit
    - erst alle Tiles in eine zwischensurface pinseln muss
    - dann zwangsweise eine gezoomte temporäre Surface via zoomSurface erstellen muss
    - diese dann auch nocheinmal auf den Bildschirm ausgeben muss.
    und letztlich noch
    - die temporäre Surface wieder freigeben muss

    Und dabei sind alle 3 surfaces 800*600 Öö
    Wenn ich dem zoomSurface dann auchnoch mit demParameter SMOOTHING_ON, also aktiviertem anti-aliasing starte, dann -> 10 fps



  • Was genau ist das Problem, wenn du beim Laden skalierst?

    Bye, TGGC (Der Held ist zurück)



  • Das ich dann kein anti-aliasing machen kann beim vergrössern, weil ich im Tileset ja mehrere Tiles nebeneinander liegen ( http://www.die-gaming.de/tiles/tilesetaufbau.png ).
    Packe ich die schöngezeichneten Tiles in dann nebeneinander, sind zwischen den Tiles teilweise Striche, weil nicht mehr die pixelgenaue Trennung der einzelnen Tiles eingehalten wurde und die Tiles auch nciht mehr genau aneinander passen.



  • mein tip: grafikprog auf, tileset rein, vergrößern, abspeichern, fertig! 😃
    geloescht



  • Problem dabei:
    Es gibt tausende freier rpgmaker Chipsets die ziemlich genau 100% kompatibel sind im Moment zu meinem Editor.
    Würd ich da jetzt so dran rumbasteln wären die halt nurnoch nach "grafikprog auf, tileset rein, vergrößern, abspeichern, fertig!" kompatibel.
    Vorteil wäre natürlich das man auch mal nicht-verpixelte Chipsets selbst basteln könnte in photoshop oder so und ins Spiel einbauen könnte 😉



  • Dann schreib halt eine Fkt. die es vergrössert, ohne diese Probleme zu verursachen. Die Stunde wirst du ja wohl haben.

    Bye, TGGC (Der Held ist zurück)



  • @dreaddy:
    Naja, irgendwo in den SDL-Sourcen gibt (gab?) es auch eine Skalier-Blit-Funktion, die aber nicht oeffentlich und nicht dokumentiert ist. Evtl. ist die inzwischen wieder verschwunden.

    Aber ich wuerde allgemein fuer solche Sachen OpenGL/DirectX nehmen, da hast Du wie gesagt die Skalierung, Smoothing, Alphablending umsonst.



  • In der SDL gibt es keine Funktion zum Zoomen! Da muss man auf Zusatzbibliotheken zurückgreifen z.B. SDL_gfx, hab aber noch nie damit gearbeitet. Aber was spricht dagegen, das Bild beim laden zu zoomen?
    geloescht



  • geloescht schrieb:

    In der SDL gibt es keine Funktion zum Zoomen! Da muss man auf Zusatzbibliotheken zurückgreifen z.B. SDL_gfx, hab aber noch nie damit gearbeitet. Aber was spricht dagegen, das Bild beim laden zu zoomen?
    geloescht

    Hat er doch schon gesagt! 😕



  • Tileset zerschnippeln, jedes Tile einzeln vergrößern und dann die tiles wieder zusammensetzen. So gibt es keine Streifen an den Tilerändern beim Antialiasen (cooles Wort *grinz*). So würde ich das jetzt machen.
    geloescht



  • geloescht schrieb:

    Tileset zerschnippeln, jedes Tile einzeln vergrößern und dann die tiles wieder zusammensetzen. So gibt es keine Streifen an den Tilerändern beim Antialiasen (cooles Wort *grinz*). So würde ich das jetzt machen.
    geloescht

    Oder wie TGGC schon sagte das alles als Algo automatisieren... 🤡



  • per hand würd ich das natürlich auch nicht machen! was denkst denn du 😃 😉
    geloescht


Anmelden zum Antworten