The Machinery — April 2022 (version 2022.4)

We are deep at work on a bunch of bigger features spanning all the way from a new improved document editing model, to support for handling very large worlds. Unfortunately they aren’t ready to be rolled out just yet, but rest assured they are well worth waiting for.

In the meantime we still have the April release for you with a some smaller features and bunch of fixes and improvements.

If you are already running The Machinery, this new release should pop up in your Downloads tab. Otherwise, get it from our download page and have a look at this quick introduction video. We are also working on a book about The Machinery. Note that the book is still a work in progress.

If you find bugs in this release or have requests for specific features, post them to our issue tracker. For more general discussions, hit us up on GitHub discussions or Discord.

Key highlights in this release are:

Euler Angle Ordering

The Machinery now allows rotation Euler angles to be specified in any axis order. This lets you use the axis order that is most natural for the object you are working with. To select a particular axis order, right click on the Rotation field label in the properties editor:

Selecting a Euler angle axis order.

Selecting a Euler angle axis order.

Note that, internally, the angles are still represented by quaternions, not Euler angles. This means, for example, that you can’t set the rotation around an axis to 1000 degrees, because there is no way of representing multiple full rotation “turns” using quaternions. (The quaternion rotation of an object that has made a full turn is identical to that of an object that hasn’t rotated at all.)

Mesh Shader Support

The Machinery now has support for Mesh Shaders when running on Turing powered Nvidia GPUs through the VK_NV_mesh_shader Vulkan extension.

Rendering using a mesh shader is possible by writing a shader that implements the two new stages task_shader and mesh_shader and submitting a draw call with the tm_renderer_draw_type set to TM_RENDERER_DRAW_TYPE_MESH or TM_RENDERER_DRAW_TYPE_MESH_INDIRECT.

Support for Mesh Shaders should be considered an early preview. We are currently not shipping with any examples of how to use them, and we have no plans of building features that exclusively dependent on them.

Community Contributions

  • Thanks to Tisten for multiple fixes:
    • More info in the Truth Inspector’s Prototype Relationship #940
    • Fixed a write access violation error in light culling #939
    • Bug fix for “import from project” #937
    • As well as a number of smaller bug fixes.
  • Thanks to tlein for multiple fixes:
    • Fixed the assimp include path in the VSCode c_cpp_properties.json file #936
    • Fix improving the cross platform compilation of the task system #943
    • Adds the ability to sync the color theme with the OS color theme #934
  • Thanks to matias-eduardo for improving the canvas component #941
  • Thanks to jamesmintram for fixes to the animation blend UI #925

Entity Graphs

  • Added support for generic graph node connectors.
  • The Sequence node now grows dynamically as you add new connectors.
  • Added runtime errors when a required connector isn’t valid. #1225
  • Added In Editor node for detecting if the graph is running in the editor.

Graph Editor

  • Fix for “propagate to prototype” not working correctly after creating a subgraph that consists of instantiated nodes.

Entity System

  • We have added fixed stages. There is first, pre update, update, post update, last stage. After each stage a Engines or Systems Commands are executed. Within a Stage you can still order your Engines, Systems with .phase, .[before/after]_me . Note that there is also a setup and shutdown stage. These stages are only executed once: At the beginning and at the end of the Entity Context Lifetime.


  • Only the Reload Event is now triggered when an Entity Graph is Reloaded. #1237
  • Assets won’t be propagated if the Simulation is paused. #1237

Entity Tree

  • Fix for clones not being named correctly when duplicated via the Entity Tree context Menu. #1243
  • Fix for erroneously showing Removed From Instance for components in some specific prototype chains. #1234
  • Moved “Create Prototype from Entity” out of the “‘Advanced” sub context menu.

Docking System

  • The code for managing workspaces has been broken out from docking.c into at new workspaces.c

The Truth

  • Fixed a performance issue where tick_version() could cause significant stalls if a lot of objects were changed in one operation. #1258

Creation Graphs

  • Simplified setup for GPUSim systems spawning into other GPUSim systems by splitting out indirect dispatch arguments for emitter spawning into its own argument section.
  • Better dirty version tick mechanism when propagating through multiple graph instances.


  • Added ability to request a RenderDoc capture from the render graph API
  • Vulkan: VK_ACCESS_SHADER_READ_BIT are now always set for images created with TM_RENDERER_IMAGE_USAGE_UAV usage flag.
  • Vulkan: Fix for incorrectly requesting blend capabilities even for non normalized integer image formats in vk_image_usage_to_format_features().
by The Machinery Team