Ganbatte Engine Progress Report 1
After a long time it’s finally time again to write about the great progress I made with the development of my Engine. As written in some post before I’m working on an Engine called Ganbatte Engine.
Ganbatte is an Japanese word and means something like “do your best”, that’s exactly what I’m trying with this really large, long-term project.
But now lets talk about the technical site of the project.
As you can see from the diagram above the project is quite complex right now.
The GanbatteEngine instance contains the PluginManager. It’s up to the Plugin Manager to load the implementation of the different system at runtime. The [..]CoreSystems define just the interfaces to use the functionality but doesn’t contains the actual functionality.
The Implementation gets loaded at runtime. Everything in the diagram shown in blue is the actual implementation of the CoreSystem it belongs to. Because of the way I choose to organize it’s easy to change the Implementation or add new System without the need to Recompile the engine which is just using the Interface which are defined in the [..]CoreSystem.
What is done?
That’s a good question and the most important.
Everything you can see in the diagram is actually implemented. Only the GraphicsSystem is in Progress in the moment.
The pluginSystem is the current core of the engine, because from the begging on my plan was to make the Engine less aware of the actual implementation of the systems.
In think this decision and the time I spend to implement the system and the abstraction will pay back at some point. Especially when developing a game based on the engine I always have the possibility to add different implementations for the UnitTests I’m doing. This makes it possible to use an empty GraphicsSystem so UnitTests can run actual game code without using GPU resources and the need to change any implementation code.
D3D11 Graphics System
As you can see from the picture below the GraphicsSystem is coming along quite nicely. The GraphicsSystem is implemented in D3D11, this means it’s running on TP (Technical Preview) software. D3D11 isn’t finally yet, because of this I have to implement a lot on my own, for example it not yet contains an Effect Framework, so I had to implement one on my own. This is the first time I have worked without the D3DX Effect Framework and now I know how great the Effect Framework is. It’s so much work to to write an Effect Framework. My system is quite simple because I only plan to use my effect framework until the D3DX Effect Framework for D3D11 gets released.
I currently doesn’t support the dynamic linkage feature of D3D11, sine this is dependent on the Hardware support and as we all now there is no D3D11 Hardware normal persons can buy. [at the moment]
Implemented are the following Features. I have support for the EffectFramework, Vertex- and Index- and Constant Buffers.
Win32 Window System
The Window System is complete and ready.
Input System
The Core part of the InputSystem is ready. As the System itself is divided in modules, every InputProvider. A InputProvider is responsible to query the States from the different InputDevices. Actually only one InputProvider is implemented, a DirectInput based Provider for Keyboard Input.
Log System
Currently only a very simple Log System is implemented. In some time I will replace it with a new threadsafe implementation but for the moment it’s enough.
ContentManager
The ContentManager Core System is implemented and two ContentLoaders are implemented. The ContentLoader are responsible for loading the file of a specific type. The decision which ContentLoader should be used is based on the file Extension. Every ContentLoader as to tell which extension it supports.
The implemented ContentLoaders are a FxLoader, it is responsible for loading Shaders from .fx files.
The DDSLoader task is to load DDS texture from the file.
Résumé
A lot is already done but much more is coming.
Some work has to go those “Low-Level” components before I can start implementing High-Level Components based on them. (SceneManager, Lightning-Systems, Shader-Management, Mesh-Support …. just to name some that have to deal with the Graphics portion of the engine)
Also missing is complete support for Audio which has to be added some time.
So a lot of work and time will be spend on this project in the future.
