Skip to main content
Background Image

June 2020 - December 2021

Table of Contents

June 2020 - December 2021

Breaking Changes

  • The nctl::Array and nctl::StaticArray subscript operator will not grow the array size
  • The return type of the createAppEventHandler function has been changed to a unique pointer
  • The SceneNode query methods for drawing and updating have been prefixed with is, for example isEnabled()
  • The setWidth() and setHeight() methods of the BaseSprite class have been removed
  • The errorToString() function of the LuaDebug namespace has been renamed to correct a typo
  • The parameters order of LuaStateManager::runFromMemory() has changed
  • The default line height of a TextNode object is now its font line height instead of the base
  • The AnimatedSprite class now stores RectAnimation objects instead of smart pointers
  • The type alias declarations for hash containers with string keys have been removed
  • The run() method of the LuaStateManager class has been renamed to runFromFile()
  • The onFrameEnd() callback is now invoked before the OpenGL buffers swap
  • The assign() method of nctl::String will now always truncate the destination
    • The new replace() method wil behave like the old assign() method
  • Pushing an element beyond the capacity of an array will now cause a fatal assert
  • Popping an element from an empty array will now cause a fatal assert
  • Retrieving a front or a back element from an empty array will now cause a fatal assert
  • Retrieving a front or a back element from an empty list will now cause a fatal assert

New Features

  • The engine now supports custom memory allocators
    • All containers have been updated to allow the specification of an allocator
    • Unique pointers support custom deleters in a compressed pair
    • A new apptest_allocators application has been added to test the four included allocator types
    • You can set a name for an allocator and it will be used in Tracy too
  • The FileSystem API now supports Android asset FileSystem
  • It is now possible to load textures, sounds and fonts from memory buffers
  • There is a new loading API for resources as textures, sounds, and fonts
    • The user can create empty resources and load data at a later time
    • Data can be loaded inside a resource multiple times
    • Failed loads will never result in a fatal assert nor modify a resource
    • A texture can be loaded from uncompressed texels and audio from PCM samples
    • A new apptest_loading application has been added to test the enhanced loading capabilities
  • Sprites can be created without a texture, they will be rendered in solid color with a simpler shader
  • TextNode objects can be created without assigning a Font
  • AudioBufferPlayer can be created without assigning an AudioBuffer
  • It is now possible to move construct or move assign resource and node classes
  • A clone() method has been added to node classes to perform an object copy
  • A new onTextInput event has been added to receive UTF-8 characters
  • It is now possible to query and set the window position on all desktop backends
  • There is now an onPostUpdate() callback that you can use to access the node transform for the current frame
    • It is also possible to change it inside the callback by using SceneNode::setWorldMatrix()
  • The nctl::String class will now automatically reallocate memory to expand its capacity and never truncate by default
    • The old behavior is still available by specifying the nctl::StringMode::FIXED_CAPACITY option
  • The template project files are now part of the engine
    • You only need a simple CMakeLists.txt file for your project
  • You can save a texture from video memory to RAM and then from RAM to disk as a PNG or WebP image
  • On desktop platforms the IGfxDevice provides a flashWindow() method to make the taskbar flash
  • nCine can now run on a Raspberry Pi
    • Various fixes to better support OpenGL ES features and older CMake versions
  • It is now possible to disable the scripting API while retaining the Lua integration

Improvements

  • The version of the integrated Tracy has been updated to v0.7.8
  • The version of the integrated ImGui has been updated to v1.86
  • The version of the integrated Google Test has been updated to v1.11.0
  • The version of the integrated Google Benchmark has been updated to v1.6.1
  • All containers now split the allocation phase from object construction
    • Creating a container will only reserve memory for the elements
    • Inserting or removing elements will trigger construction and destruction
  • On Android unfound libraries will not be linked anymore to the game library
    • The Java activity will not load the nCine or OpenAL libraries if unneeded
  • It is now possible to set the ARGB components of a color with a hexadecimal code
  • The nctl::String class can now decode Unicode code points from UTF-8 strings and vice versa
  • The Font class now supports Unicode characters exported in the Fnt descriptor file
  • The Android software keyboard visibility can be toggled on and off
  • The seek position of an audio buffer can be queried and modified
  • It is now possible to set a custom line height for a TextNode object
  • When loading a RGB texture it is possible to treat a color as transparent
  • You can now use nctl::String and const char * as keys for hash containers without specifing an hash function
  • There is a new removeAllChildrenNodes() method in the SceneNode class
  • You can retrieve the current RectAnimation of an AnimatedSprite with the currentAnimation() method
  • Errors in Lua scripts will not cause the engine to assert and exit
    • It is now possible to load a Lua script without running it
    • More information will be provided when a script fails to load or to run
  • The engine project is now shipping with an .editorconfig configuration file
  • The OpenGL class that keeps track of the blending state can now use separate functions for RRB and alpha
  • The file extension comparison method is now case-insensitive
  • The FileSystem class returns constant strings to prevent move assignemnt and any modification to the capacity of destination ones
  • There is now a fixExtension() function in the FileSystem class to assure that a file has the intended extension

Fixes

  • GCC hardening compiler flags have been fixed with the explicit addition of PIE flags
  • The root node of the scenegraph now honors its own transformations
  • The buffer of an AudioBufferPlayer class was not detached from the OpenAL source when it finished playing
  • The setSize() method of nctl::Array will now create objects when extending an array size
  • The ImGui and Nuklear drawing commands were previously appended to the render queue with one frame delay
  • Fix ncine.sprite.set_flipped_x() and set_flipped_y() functions in the Lua API

November 2019 - May 2020

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

Improvements

  • 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

Fixes

  • 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