View RSS Feed

Mattias Gustavsson

C/C++ lib för cross-platform utveckling

Rate this Entry
Jag håller ju som sagt på med att porta min spelmotor till fler plattformar. En av de första saker som kommer upp då, är ju hur man ska göra med den plattformsspecifika koden. Man vill ju att när man skriver sitt spel, då ska man inte behöva bry sig om vilken plattform man kör på - man ska bara kunna använda hjälpfunktioner och -objekt utan att behöva fundera på hur det är implementerat på just den plattform där man kör.

Under den tid som jag jobbat med spel, så har jag varit inblandad i en mängd portningsprojekt, av varierande svårighetsgrad, och en sak har de alla haft gemensamt: det är aldrig så enkelt som man hoppas på. Speciellt klurigt blir det om koden använder mycket #defines för olika konfigurationer. Extra lång tid tar det om plattformsspecifik kod är utspridd över hela kodbasen. Och om koden använder avancerad C++ funktionalitet, så blir det lite klurigare, då olika compilers hanterar saker lite annorlunda.

Så för min spelmotor, vill jag se till att ha ett så tunt plattformslager som möjligt, och att det är enkelt implementerat, utan konstiga tricks eller specialare. Jag vill ha det skrivet i C, eftersom det går snabbare och enklare att porta än C++. Och jag vill att det ska bestå av så lite kod som möjligt, för då blir det enklare att jobba med.

Sen kan man ju alltid bygga mer avancerade funktioner/objekt ovanpå det tunna plattformslagret, för att göra det enklare att använda. Men dessa blir ju då plattformsoberoende, eftersom de bara använder plattformslagret.

Att använda existerande bibliotek känns inte som ett bra alternativ. Ofta har de mer funktionalitet än vad man behöver, och är ofta långt ifrån så minimalistiska som jag vill ha dem. Och det medför ju att när man sen vill porta till en ny plattform, då har man allt det bagaget med sig också, och portningen tar mer tid än vad som borde vara nödvändigt.

Jag har börjat fila på mitt plattformslager - enkelt C interface, med bara just den funktionalitet som krävs av min motor och inget mer. Tanken är att skriva plattformslagret så det är helt fristående, så att det skulle kunna återanvändas av andra som vill skriva en egen motor, men vill börja från ett fungerande plattformslager.

De plattformar jag vill stödja till en början är Windows, OSX, Android och iOS, och senare ev. även Linux och kanske Dreamcast(!).

I nästa inlägg hoppas jag kunna visa lite kod :-)

Submit "C/C++ lib för cross-platform utveckling" to Digg Submit "C/C++ lib för cross-platform utveckling" to del.icio.us Submit "C/C++ lib för cross-platform utveckling" to StumbleUpon Submit "C/C++ lib för cross-platform utveckling" to Google

Taggar: Ingen Lägg till/redigera taggar
Kategorier
Uncategorized

Comments