Table of Contents
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