Skip to content

Kengine 4.1

Choose a tag to compare

@phisko phisko released this 21 May 14:22

This version adds an extensible OpenGL deferred rendering system.
Default shaders are provided, but these are absolutely not state of the art, as graphics programming is not my specialty. They include (poor quality) shadow maps and (pretty decent) volumetric lighting/god rays.

OpenGLSystem preview

Systems have also been added to load 3D models, be they standard (.obj/.fbx/etc. loaded with the assimp library) or in MagicaVoxel's .vox format. The AssImpSystem also supports skeletal animation, although it has not been optimized at this point.

Performance has also been enhanced by the avoidance of runtime memory allocation, using putils::string, putils::vector and putils::function instead of their standard counterparts.

Features:

  • Added serialization
  • Made it possible to add/update entities during iteration
  • Added OpenGLSystem
  • Added PolyVoxSystem (used to generate meshes from voxel volumes)
  • Added MagicaVoxelSystem (used to load .vox model files)
  • Added AssImpSystem (used to load any other model file and skeletal animations)
  • Added SelectedComponent and HighlightComponent
  • Added ImGuiEntityEditorSystem and ImGuiEntitySelectorSystem

Major changes:

  • The SfSystem is no longer built as a plugin and is automatically linked if the option to build it is enabled

Minor changes:

  • kengine is no longer simply a CMake "interface library" but a full fledged static/shared library depending on your platform
  • The ImGuiAdjustableManager has become a System
  • Added pitch to GraphicsComponent
  • Component IDs are now printed, which may help with debugging an Entity's mask

Optimizations:

  • Used putils::string, putils::vector and putils::function instead of their standard counterparts. These have the advantage of never performing memory allocation.
  • Compilation times have been reduced thanks to being a "normal" library

Fixes:

  • Stopped using execution policies as they are not available on gcc
  • Fixed BehaviorComponent and BehaviorSystem which had not been updated to new API
  • Various fixes in scripting systems

What's coming next

The first thing I want to sort out is proper handling of object sizes in the OpenGLSystem. This was fairly simple with SFML as images were all loaded with the same default size. OpenGL introduces the fact that models may be created with different sizes, meaning that getting them to render properly and have their TransformComponent's size reflect reality implies playing around with the GraphicsComponent and TransformComponent sizes. This is not optimal.

I'm hoping to come up with a satisfactory solution for this soon enough and make a small release when that time comes. After that, I plan to implement a few toy projects with the engine in its current state to see what may be missing. One obvious thing is a menu system (and generally 2D rendering in OpenGL), so that may not be too far down the line.