Release 2020.05 is the third nCine release.



Breaking Changes

  • Removed flipX() and flipY() sprite methods
    • They have been superseded by setFlippedX() and setFlippedY()
  • Removed setOpaqueTexture() sprite method
    • You can achieve the same result with the general setBlendingEnabled(false)
  • The Matrix4x4<T>::scale() static method has been renamed to Matrix4x4<T>::scaling()
  • The dataPath() and savePath() methods of IFile have been moved to the new FileSystem class
    • The access() method of IFile have been superseded by the more powerful query methods of the FileSystem class
    • The nc.application.datapath() Lua function is now nc.fs.get_datapath()
  • The children() method of a SceneNode now returns a nctl::Array

New Features

  • Scene nodes support anchor points and non-uniform scaling
    • There is a new apptest_anchor application that shows all new node features
  • Drawable nodes support custom alpha blending factors
  • Nuklear integration for fully skinnable user interfaces
  • You can now embed the whole engine inside a Qt5 widget by choosing the Qt5 desktop backend
    • If the Qt Gamepad library is available it will be used for gamepad input events
  • Touch events are supported on desktop through the SDL2 and Qt5 backends
    • They now also provide information about touch pressure
  • The FileSystem class has been added to help you query and manipulate paths, files, and directories
    • It comes with a new apptest_filebrowser application that shows an ImGui based file browser
  • ImGui and Nuklear integrations support custom fonts loading
  • Added a new unclamped three channels ColorHdr class
  • The IAppEventHandler class now receives onSuspend() and onResume() events


  • The logging system is initialized earlier and can be used inside onPreInit()
  • The Android asset manager is initialized earlier and can be used inside onPreInit()
  • Handling of windows resizing events has been fixed
  • Emscripten applications react to window resizing and fullscreen events
  • Emscripten applications can now load and save local files
  • Sprite flipping methods now take a status flag
  • The version of the integrated Tracy has gone from v0.5 to v0.6.3
  • The version of the integrated ImGui has gone from v1.73 to v1.76
  • Deletion of children scene nodes upon parent destruction has been made optional
  • The Matrix4x4<T> can now translate, rotate and scale in place, avoiding a full matrix multiplication
    • It can now also be multiplied on the right side of a vector
  • Automatic sprite batching is now available on Emscripten
    • You can choose the fixed batch size with a variable in the AppConfiguration class
  • Added support for Google ANGLE libraries on Windows
  • Sorting of render commands is now stable
    • If two commands have the same material sorting key then a secondary key based on node creation time is used
  • All kind of hashmap and hashset containers can now correctly use const char * as key type
  • Added two low-level classes to save textures as Png or WebP images
  • It is now possible to set the swap interval on all desktop backends with IGfxDevice::setSwapInterval()
  • The new String::append(const char *) overload will prevent allocating a string object when appending
  • Visiting the scenegraph should be faster as children are now stored in an array instead of a list
  • The new unordered remove methods of arrays will remove elements faster when preserving order is not required
  • The debug overlay interface has now a node inspector to query and modify nodes in the scene
  • Android Gradle Plugin, Build Tools, compileSDKVersion and targetSDKVersion have all been updated to newer versions


  • The Emscripten port compiles with upstream LLVM WebAssembly backend
  • Some minor fixes in the color classes code
  • Culling of drawable nodes works with negative scaling factors
  • Scene nodes are now correctly transformed before children thus eliminating any update delay with nodes chains
  • Caching of TextNode boundaries does not introduce a one frame delay on update
  • The Lua stack is now cleaned after a failure in calling a function
    • Previously the stack would easily overflow if some callbacks were not defined
  • String lenght is now updated if a string is truncated when using a formatting method
  • Fixed OpenGL FBO wrapper class when dealing with reading and drawing buffers


This release is packaged together with:

The Android libraries have been compiled with NDK r21b for armeabi-v7a, arm64-v8a and x86_64.