I know that I have not made a blog-post in ages and the reasons are varied. Too busy with life, moved to a new apartment in a different place in Tokyo and an unrelenting workload from the university. But I would like to start posting again in the blog introducing a new category of posts. Namely a development journal for the project I have been working on in all my free time for almost a year now. And if one adds up the many sub-projects that got encompassed into it then that would make it a good 3 years of my life. The project’s name is “Makoto GUI Engine”.
The Makoto Engine is basically a mix of a GUI library and a 3D engine. It will enable programmers to develop hardware accelerated GUI for their software via an intuitive and easy-to-use API. Moreover it will introduce some new and hopefully useful 3D GUI elements (widgets) that a programmer can utilize in order to make a project more modern and easy to use. The purpose of this project is to:
- Be a modern library with the needs of nowadays programmers and end-users in mind
- Be multi-platform by employing openGL
- Offer a complete, easy to use and intuitive API that will allow users to:
- create hardware accelerated 2D/3D GUI for their software
- provide fully customizable elements(widgets). The programmer will have full control of how every single GUI element looks
- add unique 3D elements(widgets) in their GUI increasing the usability and the options provided to the end-users
- easily transfer their projects between different platforms by having consistent API among all supported platforms
- easily transfer their project between different compilers due to ABI consistency.
Below you can see a rendering by the engine of its own name using the Consolas font.
An additional requirement that I myself have set for the project is to have as little external dependencies as possible except for openGL itself. The reason is that the Makoto Engine started as an amalgamation of numerous even older projects of mine into one greater project. I started it out of love for learning new things, experimenting and above all creating. This, at times, includes reinventing the wheel but that is I believe a part of the learning process. Not to mention that having done so the engine will consist of modules that are developed so that they can work with each other and not just be tweaked into working after messing with other people’s code. Some of the old projects that eventually became a part of the engine are among others a .3ds file parser, a .ttf font parser, triangulation algorithms e.t.c. So far the engine is totally independent of any other library and I hope to keep this so. Of course I can not foresee the future or the needs the project might have in the long run, needs that may require the use of an external library.
Going into a bit more detailed explanation about the engine’s development. It is written exclusively in the C language because of the portable ABI it provides even between different compilers. Furthermore I, as the main author and maintainer of the engine, am really familiar with C and so it was a natural choice. Moreover every language existing out there has bindings for C and so if, and hopefully when, bindings have to be made for any another language that will be possible and easy to accomplish. C is the lowest common denominator and that is why it has been chosen.
One might wonder why the name makoto or what does it mean? Well having lived in Japan for the last 1.7 years of my life and with another 1.5 years ahead of me I have taken a liking to some of the Kanji letters (chinese characters) used here. My most favorite in particular is called makoto and in Japanese it means faith, fidelity, trust, confidence e.t.c. I like its meaning and its shape and well since the conception and beginning of development started in Japan I deemed it was a nice name to go with. Below you can see a rendering of that very kanji by the engine using the free and beautiful Sword Kanji true type font.
At the moment many different parts of the engine are being developed simultaneously in all my free time (and sometimes even multi-tasking when doing other things). The hierarchy of the 2D GUI elements of the engine has been created, a system of signals generated from the OS and their propagation to the elements, fonts system, engine native 3d models file , basic 3D elements and more.
Even though the original API is written in C, at the same time I have developed a scripting language, the Makoto-Go, that makes it a lot easier and a lot less error-prone to develop software using the engine. The language syntax is still being worked on but its main goal is to be useful, have clear syntax and offer maximum control of the engine while providing� additional error checking for the user-programmer.
As far as the distribution of the engine is concerned, the Makoto Engine will be free for non-commercial use but not open-source. Commercial license will be available for a minor fee. I have been asked by some friends of mine why did I not want to make it open-source? The answer is pretty simple. At the particular moment in time I do not think that the best thing for the Makoto Engine would be to be open-source. Furthermore when a person devotes literally years of his life in a project it is natural to expect to gain something out of it in the future. Making it open-source would warrant me unable to do so. Of course in the world of software things change, and ways to make a living out of open-source software are constantly popping up, so I can not rule out anything for the far future.
Below you can observe the positioning system of the engine at work, where with just a few lines of code the elements are positioned accordingly. In this case the goal was to form a game-like menu. Since the 3D elements are not mature yet, this is only an example with 2D elements. You will notice that the elements appear to be a tad-bit plain but that is only temporary and will be fixed in the future. The point of the screenshot was to showcase successful positioning.
Of course while working on a project such as this one you have to consider the potential end-users and especially in the case of an engine like this, my fellow programmers who want to easily create nice GUI for their software. So who should use the Makoto Engine?
- Someone who needs to create beautiful, fully customizable GUI easily and quickly without wasting time or getting lost writing pages of code for something really simple
- Someone who wants to incorporate fast, reliable, hardware accelerated and unique GUI in their software
- Someone who would like to use 3D GUI elements in their software in order to increase usability and not just for the usual eye candy effect that 3D elements have been used for in the past
Naturally the Makoto Engine is not meant for everyone. So far the major reason that one should not try to use the engine is because it does not conform to the native look and feel of the respective Operating system it is running on. At the moment I do not plan to make it do so. The default look and feel of the engine will be consistent across all platforms and the elements are all going to be fully customizable as mentioned above. So if you are making applications whose requirement is to have the native look and feel of your target Operating System then you are better off using any of the other great GUI engines out there.
This concludes the first of the development journals of the Makoto Engine. Some of the information is of course subject to change since it is a constant work in progress. After all those months of development, even if it is only in my free time I do have a lot to write about so I am certain that there will be a lot more posts related to the development of the engine. Till next time!