Finalspace
Lt. Junior Grade
- Registriert
- Sep. 2009
- Beiträge
- 369
Hallo,
ich möchte euch mein aktuelles Projekt an dem ich seit einiger Zeit arbeite vorstellen:
Eine super einfache stressfreie Platform Abstraktionsschicht für C in nur einer einzigen Header-Datei.
Der Hauptfokus ist Spiel -und Simulationsprogrammierung, daher ist das Standardverhalten man bekommt ein Fenster und einen OpenGL Rendering Context - ähnlich wie GLUT.
Die API ist einfach gestrickt und enthält nur gut strukturierte abstrahierte Platformfunktionen, ohne irgendwas zu verstecken.
Was ist eine Platform-Abstraktionsschickt?
Ein Set an Funktionen um Betriebssystemabhängige Dinge zu verarbeiten, z.b. Fenster erstellen, Datei laden, Speicher erzeugen, Pfad auslesen/zusammenbauen, Thread erzeugen, usw.
Warum eine Platform Abstraktionsschicht, obwohl es schon etliche gibt?
- Es gibt keine einzige von den brauchbaren die ohne Libs oder DLL´s auskommen
- Bei vielen muss man peinlich genau aufpassen, das die passende LIB zur C-Runtime mit korrekter Einstellung passt
- Viele sind aufgeblaßen und machen deutlich mehr als nur die Platform zu abstrahieren
- Keine oder schlechte Kontrolle über Speicher
- Es gibt keine brauchbaren Einzel-Datei-Header-Bibliotheken welche die Platform abstrahieren
- Ich habe keine Lust mehr Platformspezifischen Code jedesmal aufs neue zu schreiben
- Debuggen bei Platform spezifischen Problemen ist nur bedingt oder gar nicht möglich
Lösung/Idee:
- Es ist in C/89 geschrieben und 100% C++ kompatibel, daher ist es sehr leicht neue Platformen/Compiler zu integrieren
- Es gibt nur eine Header Datei die man einbinden muss und das wars
- Es ist komplett Open-Source und kann daher beliebig in jedem Projekt verwendet und angepasst werden
- Es wird kein Code versteckt, alles ist erreichbar und gut gekennzeichnet
- Einfache und leicht verständliche API, die keine große Dokumentation brauch
- Erzeugt keinen direkten Speicher (Das ist dem User überlassen)
- Nutzt nur reine Betriebssystemsfunktionen, vermeidet daher C Runtime wo es nur geht
- C-Runtime Bibliothek ist nicht zwingend erforderlich
- Arbeitet gut mit anderen Bibliotheken zusammen, z.b. (ImGUI, Box2D, etc.)
- Features könnnen nach Bedarf komplett deaktiviert werden (Window, OpenGL, etc.)
- Ich möchte ohne große Mühe jede Funktion debuggen können
- Ich möchte mehr über programmierung von Nicht-Windows Betriebssysteme erfahren (X11, Linux, Unix etc.)
Features:
- Erstellung/Konfiguration eines einzelnen optionalen Fensters
- Erstellung eines optionalen OpenGL Rendering Kontext auf dem Fenster
- Speicher erzeugen/freigeben
- Zeit-Operationen
- Threading
- Datei und Pfad Funktionen
- Atomische Operationen
- Dynamische Bibliotheken laden (.dll / .so)
- Konsolen ein/ausgabe
Aktueller Stand / Geplant:
- Im Moment ist das ganze noch nicht wirklich vollständig, aber es ist benutzbar und funktioniert einwandfrei
- Einige API-Aufrufe gefallen mir noch nicht, da muss ich noch ein wenig drüber nachdenken, z.b. bei (fpl_ListFilesBegin, fpl_ListFilesNext, etc.)
- Bisher nur x86 und x64 für Windows
- Support für Direct2D/3D/Vulcan (Nur die reine Initialisierung)
- Audio-Ausgabe (DirectSound, ALSA)
- Automatisiertes Testing
- Dokumentation und mehr Beispiele
- Mehr Unterstützung für Platformen (Linux/Unix, vielleicht Android mal schauen)
- Mehr Pre-Processor Optionen um Features rauszukompilieren (Manche nutzen z.b. lieber C++ STL oder ähnliches)
- Hilfsfunktionen komplett in eigene Bibliothek auslagern, welche keine direkten Platform spezifikationen haben z.b. (fpl_ExtractFileName, fpl_RemoveEmptyDirectory)
- Speicher Management vollständigt dem User überlassen. Im Moment wird noch an einer Stelle (Platform Eingabe Ereignisse Queue) Speicher über fpl_AllocateMemory erzeugt.
- C-Runtime komplett abschaltbar zu machen ist nicht ganz zu einfach, wie ich es mir vorgestellt habe - daher muss ich mir hier noch was überlegen oder den Support dafür komplett fallen lassen
Probleme:
- Die Biliotheken verträgt sich nicht mit anderen Platform-Abstraktions-Bibliotheken wie z.b. (SDL, SFML, GLUT, GLFW, etc.),
da alle Platform Bibliotheken immer magisches Zeug mit Einstiegspunkten machen, sich daher alle in die Quere kommen.
Quellcode:
https://github.com/f1nalspace/final_game_tech
Feedback:
Was haltet ihr davon? Was kann man tun um es noch besser zu machen? Fehlt noch etwas wichtiges?
Gerne sind jegliche konstruktive Kommentare erwünscht, aber nutzlose Hasskommentare werden sofort gemeldet.
Grüße,
Final
ich möchte euch mein aktuelles Projekt an dem ich seit einiger Zeit arbeite vorstellen:
Eine super einfache stressfreie Platform Abstraktionsschicht für C in nur einer einzigen Header-Datei.
Der Hauptfokus ist Spiel -und Simulationsprogrammierung, daher ist das Standardverhalten man bekommt ein Fenster und einen OpenGL Rendering Context - ähnlich wie GLUT.
Die API ist einfach gestrickt und enthält nur gut strukturierte abstrahierte Platformfunktionen, ohne irgendwas zu verstecken.
Was ist eine Platform-Abstraktionsschickt?
Ein Set an Funktionen um Betriebssystemabhängige Dinge zu verarbeiten, z.b. Fenster erstellen, Datei laden, Speicher erzeugen, Pfad auslesen/zusammenbauen, Thread erzeugen, usw.
Warum eine Platform Abstraktionsschicht, obwohl es schon etliche gibt?
- Es gibt keine einzige von den brauchbaren die ohne Libs oder DLL´s auskommen
- Bei vielen muss man peinlich genau aufpassen, das die passende LIB zur C-Runtime mit korrekter Einstellung passt
- Viele sind aufgeblaßen und machen deutlich mehr als nur die Platform zu abstrahieren
- Keine oder schlechte Kontrolle über Speicher
- Es gibt keine brauchbaren Einzel-Datei-Header-Bibliotheken welche die Platform abstrahieren
- Ich habe keine Lust mehr Platformspezifischen Code jedesmal aufs neue zu schreiben
- Debuggen bei Platform spezifischen Problemen ist nur bedingt oder gar nicht möglich
Lösung/Idee:
- Es ist in C/89 geschrieben und 100% C++ kompatibel, daher ist es sehr leicht neue Platformen/Compiler zu integrieren
- Es gibt nur eine Header Datei die man einbinden muss und das wars
- Es ist komplett Open-Source und kann daher beliebig in jedem Projekt verwendet und angepasst werden
- Es wird kein Code versteckt, alles ist erreichbar und gut gekennzeichnet
- Einfache und leicht verständliche API, die keine große Dokumentation brauch
- Erzeugt keinen direkten Speicher (Das ist dem User überlassen)
- Nutzt nur reine Betriebssystemsfunktionen, vermeidet daher C Runtime wo es nur geht
- C-Runtime Bibliothek ist nicht zwingend erforderlich
- Arbeitet gut mit anderen Bibliotheken zusammen, z.b. (ImGUI, Box2D, etc.)
- Features könnnen nach Bedarf komplett deaktiviert werden (Window, OpenGL, etc.)
- Ich möchte ohne große Mühe jede Funktion debuggen können
- Ich möchte mehr über programmierung von Nicht-Windows Betriebssysteme erfahren (X11, Linux, Unix etc.)
Features:
- Erstellung/Konfiguration eines einzelnen optionalen Fensters
- Erstellung eines optionalen OpenGL Rendering Kontext auf dem Fenster
- Speicher erzeugen/freigeben
- Zeit-Operationen
- Threading
- Datei und Pfad Funktionen
- Atomische Operationen
- Dynamische Bibliotheken laden (.dll / .so)
- Konsolen ein/ausgabe
Aktueller Stand / Geplant:
- Im Moment ist das ganze noch nicht wirklich vollständig, aber es ist benutzbar und funktioniert einwandfrei
- Einige API-Aufrufe gefallen mir noch nicht, da muss ich noch ein wenig drüber nachdenken, z.b. bei (fpl_ListFilesBegin, fpl_ListFilesNext, etc.)
- Bisher nur x86 und x64 für Windows
- Support für Direct2D/3D/Vulcan (Nur die reine Initialisierung)
- Audio-Ausgabe (DirectSound, ALSA)
- Automatisiertes Testing
- Dokumentation und mehr Beispiele
- Mehr Unterstützung für Platformen (Linux/Unix, vielleicht Android mal schauen)
- Mehr Pre-Processor Optionen um Features rauszukompilieren (Manche nutzen z.b. lieber C++ STL oder ähnliches)
- Hilfsfunktionen komplett in eigene Bibliothek auslagern, welche keine direkten Platform spezifikationen haben z.b. (fpl_ExtractFileName, fpl_RemoveEmptyDirectory)
- Speicher Management vollständigt dem User überlassen. Im Moment wird noch an einer Stelle (Platform Eingabe Ereignisse Queue) Speicher über fpl_AllocateMemory erzeugt.
- C-Runtime komplett abschaltbar zu machen ist nicht ganz zu einfach, wie ich es mir vorgestellt habe - daher muss ich mir hier noch was überlegen oder den Support dafür komplett fallen lassen
Probleme:
- Die Biliotheken verträgt sich nicht mit anderen Platform-Abstraktions-Bibliotheken wie z.b. (SDL, SFML, GLUT, GLFW, etc.),
da alle Platform Bibliotheken immer magisches Zeug mit Einstiegspunkten machen, sich daher alle in die Quere kommen.
Quellcode:
https://github.com/f1nalspace/final_game_tech
Feedback:
Was haltet ihr davon? Was kann man tun um es noch besser zu machen? Fehlt noch etwas wichtiges?
Gerne sind jegliche konstruktive Kommentare erwünscht, aber nutzlose Hasskommentare werden sofort gemeldet.
Grüße,
Final
Zuletzt bearbeitet: