.[ ČeskéHry.cz ].
Portování SDL her pro Mac OS X

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Magazín
Zobrazit předchozí téma :: Zobrazit následující téma  

Portujete své hry pro Mac?
Ano.
17%
 17%  [ 4 ]
Ne a nebudu.
60%
 60%  [ 14 ]
Ne, ale plánuju, že někdy budu.
21%
 21%  [ 5 ]
Celkem hlasů : 23

Autor Zpráva
Ladis



Založen: 18. 09. 2007
Příspěvky: 1533
Bydliště: u Prahy

PříspěvekZaslal: 22. srpen 2011, 01:44:51    Předmět: Portování SDL her pro Mac OS X Odpovědět s citátem

Moje staré hry a projekty spousty lidí tady na fóru používají multiplatformní knihovnu SDL. Tak kdyby někoho zajímalo, jak takovou hru naportovat i pro Mac, tak tady je dobrý návod:

www.noquarterarcade.com/xcode-sdl-development-setup

Dnes jsem podle něj za odpoledne naportoval svou hru Becher Rescue (stáhnout pro Mac, web už není; konfigurační soubor je Becher Rescue.txt v [domovská složka]/Library/Application Support, vytvoří se při spuštění hry - správně by to mělo být v podsložce se jménem hry):



Funguje fullscreen i hraní v okně, zvuk a hudba, všechno. Návod je udělán tak, že přímo do složky .app automaticky Xcode kopíruje SDL a SDL_mixer binárky a data hry (návod popisuje použití i dalších knihoven). Výsledná hra pak na cílovém počítači tedy nepotřebuje nainstalovaný SDL framework a další knihovny. Je to pro Mac OS X 10.4 a vyšší, procesory Intel a PowerPC (podporu PowerPC jsem přidal později, k tomu druhé poznámky úplně dole).

Moje poznámky k návodu:
  • Ve verzi pro Mac zrušte přenastavování aktuální složky kvůli hledání dat hry, řešení v návodu to řeší samo.
  • SDL template si vemete ten pro vaší verzi OS X, návod je pro 10.6, takže třeba já s 10.5 zkopíroval obsah TemplatesForXcodeLeopard.
  • Je nutné změnit inklůdy z <GL/gl.h> na <OpenGL/gl.h>, stejně pro glu.h a glext.h, a pak podobně <SDL/SDL_mixer.h> na "SDL_mixer.h"
Kromě těch vybraných inklůdů a zrušení svého přenastavení adresáře v inicializaci hry jsem neměnil jediný řádek kódu! Nebudu zde říkat, jestli má smysl portovat hry i pro Mac, jen chci ukázat, jak je to snadné. Becher Rescue jsem udělal před 8 lety a ohledně multiplatformnosti jsem specifika pro Mac vůbec neřešil, hra cílila jen Windows a Linux.

EDIT: Udělal jsem úpravy pro podporu Maců s procesory PowerPC, takže nová verze teď jede i tam. Moje poznámky:
  • Inklůd pro převodní funkce v SDL: #include <SDL/SDL_endian.h>
  • Je třeba převést všechno, co přečtete z disku a na disk zapíšete (předpokládám, že na disku je to pro Intel x86)).
  • 8bit čísla neřešíte; 16 a 32bit čísla převedete funkcemi SDL_SwapLE16() a SDL_SwapLE32() (na Intelu nic nedělají).
  • Floaty mi SDL_SwapLE32() převádělo blbě, tak jsem vygooglil a použil funkci FloatSwap() odtud.
  • Když jsem uložil screenshot z OpenGL do souboru BMP, byly prohozeně barvy. Tak jsem jen změnil formát ve funkci glReadPixels() na ten s prohozenými barvami (GL_RGB -> GL_BGR).
  • Věci načítané cizími knihovnami neřešíte, ty se o vše postarají samy. Týká se načítání obrázků, audia apod.
  • Mac verze teď ukládá screenshoty do domovské složky.
  • Mac verze má F8 pro zobrazení FPS a F9 pro uložení screenshotu.
Screenshot z 6 let starého notebooku Apple iBook s procesorem PowerPC G4:



EDIT2: Protože už web není, tak soubory nahrány na ulož.to a obrázky na postimg.org. Dále přidány zdrojáky Mac verze (kde je nastaveno v projektu SDL pro Xcode pro OS X 10.5 - pro jiné podle návodu výše). Zdrojáky odpovídají tomu, že to byla moje úplně první C/C++ hra, rok výroby 2003.


Naposledy upravil Ladis dne 4. listopad 2014, 10:41:07, celkově upraveno 7 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Slappy



Založen: 31. 07. 2009
Příspěvky: 169
Bydliště: Zilina

PříspěvekZaslal: 22. srpen 2011, 05:59:04    Předmět: Odpovědět s citátem

Krasa!

SDl je silne v tom, ze bezi aj na doma vyrobenopm kavovare.
Ja som si takto preportoval jednu hru z Win na Linux a nasledne na Wii a Nintendo DS.
Na DSku sice hra nesla [procesor nezvladal] ale bolo to uplne jednoduche!
_________________
Skinovane instalatory pre NSIS a Inno Setup, zdarma pre SK/CZ projekty: www.graphical-installer.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
frca



Založen: 28. 07. 2007
Příspěvky: 1552

PříspěvekZaslal: 22. srpen 2011, 16:36:36    Předmět: Odpovědět s citátem

Pekne, toto me vzdycky zajimalo (hlavne z duvodu portovani MultiRacera).
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Ladis



Založen: 18. 09. 2007
Příspěvky: 1533
Bydliště: u Prahy

PříspěvekZaslal: 22. srpen 2011, 17:37:24    Předmět: Odpovědět s citátem

No tak teď ti stačí jen sehnat počítač Mac nebo aspoň virtuálně ve VMware, pokud ti nevadí, že tam není 3D akcelerace (ale 2D akcelerace tam už je, takže systém běží normálně rychle a ne že laguje psaní i v TextEditu).
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 22. srpen 2011, 18:03:14    Předmět: Odpovědět s citátem

Toto je zrejme opacny extrem oproti tomu co robim ja - port hry z DirectX/C++ do XNA / C#.

Kde uplne vsetok kod musi byt prepisany od piky a to XNA je nakoniec dost odlisne od DirectX temer uplne vo vsetkom (snad s vynimkou zachovania konceptu 3d sceny ako takej).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1533
Bydliště: u Prahy

PříspěvekZaslal: 27. srpen 2011, 22:51:52    Předmět: Odpovědět s citátem

Přidal jsem podporu pro Macy s procesory PowerPC, které jsou narozdíl od Intelů "Big Endian". Více viz konec zeditovaného prvního příspěvku.
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1552

PříspěvekZaslal: 3. listopad 2014, 18:29:32    Předmět: Re: Portování SDL her pro Mac OS X Odpovědět s citátem

Ladis napsal:
Floaty mi SDL_SwapLE32() převádělo blbě, tak jsem vygooglil a použil funkci FloatSwap() odtud.

Toto mi nejde do hlavy. Nedělají ty dvě funkce to samé, jenom jinak? Rád bych to chápal...
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Ladis



Založen: 18. 09. 2007
Příspěvky: 1533
Bydliště: u Prahy

PříspěvekZaslal: 3. listopad 2014, 20:39:35    Předmět: Odpovědět s citátem

Chápat to nemusíš. Prostě jsem zkusil jednu, nefungovala, tak jsem vygooglil druhou. Na výkon to nemá vliv a hráč na zdroják nekouká.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1552

PříspěvekZaslal: 3. listopad 2014, 22:37:05    Předmět: Odpovědět s citátem

- Tatíí, proč je nebe modré?
- Funguje to, nech to bejt...
Smile
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
frca



Založen: 28. 07. 2007
Příspěvky: 1552

PříspěvekZaslal: 22. listopad 2014, 02:02:51    Předmět: Odpovědět s citátem

Btw ten Becher Rescue zkousim ted a pada to. Nechybi v tom app bundle frameworky pro SDL, SDL_mixer apod.?
Edit: Opravdu to bude tim:
kód:

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x000000008fe0105c
Crashed Thread:  0

Dyld Error Message:
  Library not loaded: @executable_path/../Frameworks/SDL_mixer.framework/Versions/A/SDL_mixer
  Referenced from: /Users/vojta/Desktop/Becher Rescue.app/Contents/MacOS/Becher Rescue
  Reason: image not found

_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Ladis



Založen: 18. 09. 2007
Příspěvky: 1533
Bydliště: u Prahy

PříspěvekZaslal: 22. listopad 2014, 17:45:49    Předmět: Odpovědět s citátem

Fakt že jo, Becher Rescue.app\Contents\Frameworks\ je prázdné. No nikde to teď nemám nainstalované, tak smůla.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1552

PříspěvekZaslal: 22. listopad 2014, 18:43:25    Předmět: Odpovědět s citátem

A jeste jeden potencialni problem - soubory nacitas uplne normalne, ale ja jsem musel pouzit tuto silenost, aby to fungovalo a nacitalo spravne z toho *.app, i kdyz to nekdo prejmenuje:
kód:
    char gameDatPathCstr[1024] = {0};
#ifdef __MACOSX__
    {
        // http://stackoverflow.com/questions/8768217/how-can-i-find-the-path-to-a-file-in-an-application-bundle-nsbundle-using-c
        // Get a reference to the main bundle
        CFBundleRef mainBundle = CFBundleGetMainBundle();

        // Get a reference to the file's URL
        CFURLRef gameDatURL = CFBundleCopyResourceURL(mainBundle, CFSTR("game"), CFSTR("dat"), NULL);

        // Convert the URL reference into a string reference
        CFStringRef gameDatPath = CFURLCopyFileSystemPath(gameDatURL, kCFURLPOSIXPathStyle);

        // Get the system encoding method
        CFStringEncoding encodingMethod = CFStringGetSystemEncoding();

        // Convert into a C string
        CFStringGetCString(gameDatPath, gameDatPathCstr, 1023, encodingMethod);
    }
#else
    strncpy(gameDatPathCstr, "game.dat", 1023);
#endif

_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Magazín Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna