Skip to content
Daniel Grace edited this page May 24, 2019 · 3 revisions

Opengine is an opinionated, code-first game engine.

Opinionated

Opengine is opinionated in that it has some very strong guiding principles that will not be violated and are also different than many other engines. The largest four are: it uses Vulkan (and only Vulkan); it uses glTF (and not other formats, at least first-party); it is desktop-only; and it uses a principle of "optional hiding."

Being Vulkan-only allows the engine design to warp to Vulkan's improved level of control. Also supporting OpenGL, for instance, would require compromises that other engines have already made, so use those if you want that.

Being glTF-only means that we can fully support the format. No more situations where 40 formats are partially supported and you need to find which format can successfully import animations and textures at the same time.

Being desktop only means that we can assume that we have a fairly high level of power available. We can be built on lwjgl without also having to pull in other libraries for other platforms. We can also expose window movement events and other things that only really happen on desktop.

With optional hiding, you can easily choose to use a "default solution" for many many things -- model loading, shaders, text rendering, physics, etc. -- but you can also completely override any and every aspect of the game if that element is critical to get "perfect."

Code First

There are lots of engines that are GUI-first, such as Unity and Unreal Engine. To make a game you're expected to drag and drop for as much of your logic as possible, and only delve into programming when necessary.

There are also "frameworks" and "libraries" that give you the basics and don't do anything all that complicated (libgdx).

There's a relative dearth of things somewhere in between.

With Opengine you are expected to write code. There is no first-party editor and likely never will be for most things (any first-party editors would be for very narrow things that then wrote json or xml that you could load from code). But Opengine also takes the philosophy that if you want a default implementation for some common feature, you should have that. Spend time polishing the parts of the game that actually matter to your game -- don't write a sub-par version of literally everything.

Clone this wiki locally