[PROJEKT] FooFX - Game Engine
Verfasst: 01.09.2011, 18:55
Moin,
um der Aufbruchstimmung und dem Trend in der Projektsparte zu fördern bzw. fortzusetzen, habe ich mich entschlossen eines meiner aktuellen Projekte vorzustellen. Nein, es ist nicht die Engine, die ich schon oft im Irc erwähnt habe, diese Engine werde ich wohl aus Scham wegen meinem C++-Code bzw. Drang zur Perfektion nie Open Source veröffentlichen. Auf der anderen Seite wird diese Engine aber auch kommerziell genutzt und ist nicht ganz nutzlos.
Beschreibung: Bei FooFX handelt es sich um meine langjährig konzipierte funktionale Game Engine, die komplett in Haskell entwickelt wird. Aufgrund der unterschiedlichen Paradigmen sind andere Konzepte nötig, die die Engine gestalten. FooFX an sich ist erstmal als Multimedia-Framework und Game Engine definiert, allerdings können durchaus Komponenten aus wissenschaftlichen Simulationen sowie Compiler-Bau enthalten sein.
Sprache: Haskell
Aktueller Release: Noch nicht veröffentlicht
Nächster Release: Version 0.1.0 im Oktober/September, je nach Gefühl
Plattformen:Linux( Höchste Priorität ), MacOSX/Windows( Geringe Priorität )
Über längere Zeit sind folgende Features geplant:
[*] Abstrahierte Rendering-Modul:
Dieses Modul ist wie Haskell selber sehr abstrakt und hat letztendlich nicht mehr viel mit einer spezifischen API oder einem spezifischen System zu tun. Ich will hier zum Beispiel Template Haskell( wie in C++, nur wesentlich mächtiger ) nutzen, um dynamisch zur Compilezeit Renderer generieren zu können. Beispielsweise müsste der Entwickler mit einer Pipeline angeben, wie sein Renderer aussehen soll:
type DeferredRenderer = (Renderables -> Framebuffer) -> (Lighting -> Framebuffer -> Framebuffer) -> (PostEffects -> Framebuffer -> Framebuffer) -> Framebuffer
Das würde zum Beispiel im abstrakten Sinne einen Deferred Renderer implementieren. Ich habe den Code vereinfacht geschrieben, damit er auch für Non-Haskeller lesbar ist. :) Ich bin noch nicht so weit mit den Konzepten für das abstrahierte Rendering-Modul, allerdings möchte ich ein bestimmtes Konzept verfolgen: Das Modul arbeitet nicht auf Basis von Typen bzw. bestimmten Strukturen, sondern arbeitet auf Basis von abstrakten Datentypen, die einfach nur bestimmte Verhaltensweisen implementieren. Es wird nicht von Funktion A angefordert, dass Parameter B eine Texture sein muss, sondern dass sich B wie eine Texture verhalten muss. Allerdings wird dies nur die oberste Schicht sein.
[*] System-Module:
Das System-Modul ist die Basis aller anderen Module und implementiert Basis-Objekt Verhalten sowie Multithreading. Ich möchte möglichst versuchen, dass jedes Modul der Engine multithreaded ist und auch dynamisch Single-Threaded laufen kann. Außerdem ist hier ein Feature untergebracht, dass relativ viele Datentypen per Template-Haskell in XML schreiben kann. Alle Daten in der Engine werden in XML gespeichert sein.
Außerdem enthält dieses Modul eher Haskell-untypische Features wie ein Event-System oder Exceptions.
[*]Algorithm-Module:
Das Algorithm-Module implementiert zum einen einfache Algorithmen auf Bilder bzw. Collision Detection und Vector/Matrizzen/Quaternionen-Mathematik. Außerdem ist einfache OpenCL Unterstützung geplant.
[*]Graphics-Module:
Das Graphics-Module setzt auf einem selbstentwickeltem OpenGL 4.1 Wrapper auf. Das Grafik-Modul baut auf modernen Techniken auf und wird ausschließlich OpenGL 4.1 nutzen. Ansonsten recht unspektakulär. Materialien sowie Effekte werden in XML gespeichert, wie der Rest auch.
Ich möchte nochmal darauf hinweisen, dass aktuell nocht nichts implementiert ist. Ich möchte diesen Thread für Anregungen und Feedback nutzen und natürlich auch Werbung für die beste Sprache der Welt machen.
Ich werde jetzt täglich immer etwas an FooFX weiterarbeiten und regelmäßig Bericht erstatten.
um der Aufbruchstimmung und dem Trend in der Projektsparte zu fördern bzw. fortzusetzen, habe ich mich entschlossen eines meiner aktuellen Projekte vorzustellen. Nein, es ist nicht die Engine, die ich schon oft im Irc erwähnt habe, diese Engine werde ich wohl aus Scham wegen meinem C++-Code bzw. Drang zur Perfektion nie Open Source veröffentlichen. Auf der anderen Seite wird diese Engine aber auch kommerziell genutzt und ist nicht ganz nutzlos.
Beschreibung: Bei FooFX handelt es sich um meine langjährig konzipierte funktionale Game Engine, die komplett in Haskell entwickelt wird. Aufgrund der unterschiedlichen Paradigmen sind andere Konzepte nötig, die die Engine gestalten. FooFX an sich ist erstmal als Multimedia-Framework und Game Engine definiert, allerdings können durchaus Komponenten aus wissenschaftlichen Simulationen sowie Compiler-Bau enthalten sein.
Sprache: Haskell
Aktueller Release: Noch nicht veröffentlicht
Nächster Release: Version 0.1.0 im Oktober/September, je nach Gefühl
Plattformen:Linux( Höchste Priorität ), MacOSX/Windows( Geringe Priorität )
Über längere Zeit sind folgende Features geplant:
[*] Abstrahierte Rendering-Modul:
Dieses Modul ist wie Haskell selber sehr abstrakt und hat letztendlich nicht mehr viel mit einer spezifischen API oder einem spezifischen System zu tun. Ich will hier zum Beispiel Template Haskell( wie in C++, nur wesentlich mächtiger ) nutzen, um dynamisch zur Compilezeit Renderer generieren zu können. Beispielsweise müsste der Entwickler mit einer Pipeline angeben, wie sein Renderer aussehen soll:
type DeferredRenderer = (Renderables -> Framebuffer) -> (Lighting -> Framebuffer -> Framebuffer) -> (PostEffects -> Framebuffer -> Framebuffer) -> Framebuffer
Das würde zum Beispiel im abstrakten Sinne einen Deferred Renderer implementieren. Ich habe den Code vereinfacht geschrieben, damit er auch für Non-Haskeller lesbar ist. :) Ich bin noch nicht so weit mit den Konzepten für das abstrahierte Rendering-Modul, allerdings möchte ich ein bestimmtes Konzept verfolgen: Das Modul arbeitet nicht auf Basis von Typen bzw. bestimmten Strukturen, sondern arbeitet auf Basis von abstrakten Datentypen, die einfach nur bestimmte Verhaltensweisen implementieren. Es wird nicht von Funktion A angefordert, dass Parameter B eine Texture sein muss, sondern dass sich B wie eine Texture verhalten muss. Allerdings wird dies nur die oberste Schicht sein.
[*] System-Module:
Das System-Modul ist die Basis aller anderen Module und implementiert Basis-Objekt Verhalten sowie Multithreading. Ich möchte möglichst versuchen, dass jedes Modul der Engine multithreaded ist und auch dynamisch Single-Threaded laufen kann. Außerdem ist hier ein Feature untergebracht, dass relativ viele Datentypen per Template-Haskell in XML schreiben kann. Alle Daten in der Engine werden in XML gespeichert sein.
Außerdem enthält dieses Modul eher Haskell-untypische Features wie ein Event-System oder Exceptions.
[*]Algorithm-Module:
Das Algorithm-Module implementiert zum einen einfache Algorithmen auf Bilder bzw. Collision Detection und Vector/Matrizzen/Quaternionen-Mathematik. Außerdem ist einfache OpenCL Unterstützung geplant.
[*]Graphics-Module:
Das Graphics-Module setzt auf einem selbstentwickeltem OpenGL 4.1 Wrapper auf. Das Grafik-Modul baut auf modernen Techniken auf und wird ausschließlich OpenGL 4.1 nutzen. Ansonsten recht unspektakulär. Materialien sowie Effekte werden in XML gespeichert, wie der Rest auch.
Ich möchte nochmal darauf hinweisen, dass aktuell nocht nichts implementiert ist. Ich möchte diesen Thread für Anregungen und Feedback nutzen und natürlich auch Werbung für die beste Sprache der Welt machen.
Ich werde jetzt täglich immer etwas an FooFX weiterarbeiten und regelmäßig Bericht erstatten.