nCine
December 2024
Breaking Changes
Renamed ncine.audiobuffer
to ncine.audio_buffer
in the Lua API
Renamed ncine.audiobuffer_player
to ncine.audio_buffer_player
in the Lua API
Renamed get_audiobuffer()
and set_audiobuffer()
to get_audio_buffer()
and set_audio_buffer()
Renamed ncine.audiostream_player
to ncine.audio_stream_player
in the Lua API
Renamed num_samples_in_streambuffer()
and streambuffer_size()
to num_samples_in_stream_buffer()
and stream_buffer_size()
Improvements
The version of the integrated ImGui has been updated to v1.91.6
The version of the integrated Google Benchmark has been updated to v1.9.1
November 2024
Breaking Changes
Renamed permissions()
to get_permissions()
in the filesystem table of the Lua API
Removed the get_
prefix from get_num_vertices()
, get_num_bytes()
, and get_num_indices()
in the mesh sprite Lua functions
Improvements
Lua statistics are now disabled by default to enable hooking by external debuggers like the Lua Local Debugger
The version of the integrated ImGui has been updated to v1.91.5
Multiple additions, fixes, and expansions to the Doxygen documentation
Added some new Lua API functions
Added input.num_joymappings()
to return the number of available mappings for joysticks
Added particle_affector.get_base_scale()
to return the base scale factor of a size affector
Added a constructor overload that takes the position as a vector for animated and mesh sprites
Many viewport, shader, and shaderstate Lua functions now return a boolean to indicate the result
When calling the Lua particle_system.add_size_affector()
function, you can now use a vec2
for the scale factors
Fixes
Added missing overload constructors for mesh and animated sprites in the Lua API
Added some missing button names for mapped joysticks in the Lua API
Minimum CMake version has been raised to 3.10 to avoid a deprecation warning
Added the missing dpi
field to the Lua table returned by gfx_device.get_monitor()
Fix the Lua viewport.set_camera()
function to accept nil
as a camera parameter
Add missing joystick buttons to Lua input event tables
October 2024
Improvements
Add MemoryFile
class constructors that own a memory buffer
The version of the integrated ImGui has been updated to v1.91.4
The version of the integrated Google Test has been updated to v1.15.2
The version of the integrated Google Benchmark has been updated to v1.9.0
September 2024
Improvements
The version of the integrated ImGui has been updated to v1.91.2
The version of the integrated Tracy has been updated to v0.11.1
Swap deprecated ALooper_pollAll()
function for ALooper_pollOnce()
on Android
July 2024
Improvements
The version of the integrated ImGui has been updated to v1.90.9
June 2024
New Features
Added many new OpenAL source properties to the audio players
Add support for some useful OpenAL extensions
pause_device
, deferred_updates
, source_spatialize
Added optional support for EFX effects and filters, also in the Lua API
Improvements
The sound sources are now arranged in a pool for the players to pick, fixing some issues with playing
Handling the OV_HOLE
vorbisfile error code by continue decoding instead of fatal asserting
Added a stress test mode to apptest_audio
Add support for joystick axes mapped as buttons
The version of the integrated ImGui has been updated to v1.90.8
The version of the integrated Google Benchmark has been updated to v1.8.4
Fixes
Fixed a couple of alignment faults with Emscripten and some apptests
April 2024
Breaking Changes
Rename nc::IAudioDevice::PlayerType::AUDIOSTREAM
to nc::IAudioDevice::PlayerType::STREAM
March 2024
Breaking Changes
The freezePlayers()
/unfreezePlayers()
methods of the audio device have been removed
The Lua functions freeze_players()
/unfreeze_players()
have been removed too
February 2024
Improvements
Added support for custom memory allocators and window position hints of GLFW 3.4
Some minor changes to the IAllocator
methods that handle debug allocation entries
The version of the integrated ImGui has been updated to v1.90.4
January 2024
Improvements
The version of the integrated ImGui has been updated to v1.90.1
Fixes
Fixed compilation when enabling the custom memory allocators
Moved Particle.h
to public headers to fix compilation warnings
The header should not be directly included by users
November 2023
New Features
There is now an option to use binary shaders: they will be compiled on the first run and then cached on disk
Default shaders will use this feature as well, if enabled in the configuration
Batched shaders can be compiled twice to query the max number of batches for the UBO size
Improvements
A new class has been added to calculate a 64-bit hash from strings or from file information (also in the Lua API)
Emscripten stack size has been increased from the default 64 Kb to 128 Kb
The version of the integrated ImGui has been updated to v1.90
October 2023
Breaking Changes
The Timer::sleep()
method now needs an integer number of milliseconds instead of a float number of seconds.
The join()
and exit()
methods of the Thread
class do not support custom return values anymore
Improvements
The version of the integrated Tracy has been updated to v0.10
Fixes
The Thread
class can be be move constructed or move assigned without causing random crashes
September 2023
Improvements
Updated support for Gradle plugin 8.1.0 and build tools 33.0.1 on Android
The version of the integrated ImGui has been updated to v1.89.9
The version of the integrated Google Test has been updated to v1.14.0
The version of the integrated Google Benchmark has been updated to v1.8.3
July 2023
Improvements
The version of the integrated ImGui has been updated to v1.89.7
June 2023
Improvements
The version of the integrated ImGui has been updated to v1.89.6
May 2023
New Features
Add a new apptest_bunnymark
, an nCine port of the famous BunyMark benchmark
Improvements
Added an interface class to tweak the frame timer options
A second timer has been added to the frame timer to calculate averages
April 2023
Breaking Changes
The homeDir()
method of the FileSystem
class have been renamed to homePath()
The get_home_dir()
function of the Lua filesystem table has been renamed to get_home_path()
The get_datapath()
and get_savepath()
functions of the Lua filesystem table have been renamed to get_data_path()
and get_save_path()
New Features
The apptest_lua
has a new ImGui interface and can now automatically reload a modified Lua script
Improvements
The version of the integrated ImGui has been updated to v1.89.5
The version of the integrated Google Test has been updated to v1.13.0
There is now a new method in the FileSystem
class to return the path to store cached files
March 2023
Improvements
The version of the integrated Tracy has been updated to v0.9.1
The version of the integrated ImGui has been updated to v1.89.4
February 2023
Improvements
The version of the integrated ImGui has been updated to v1.89.3
January 2023
The version of the integrated ImGui has been updated to v1.89.2
December 2022
Breaking Changes
The animation_index()
and frame()
functions of the Lua animated sprite have been renamed to get_animation_index()
and get_frame()
Improvements
The Lua API for the Application
class has now a function to get the AppConfiguration
table
Scale down the size of the error messages in apptest_lua
if does not fit the screen
Added a method to RectAnimation
to automatically add multiple rectangles from a spritesheet
Added functions to the Lua API to retrieve the array of children of a node
Fixes
The minimum and maximum values of a joystick axis are now queried on Android
When calling Sprite::setTexture()
with the same texture the rectangle gets reset
Create or destroy the Windows console if changing the console log level with the setter
November 2022
Improvements
The version of the integrated Tracy has been updated to v0.9
The version of the integrated ImGui has been updated to v1.89.1
It is now possible to choose the render mode used by a TextNode
There is a new render mode for colored fonts that uses the sprite shader
On Android there is now always a fallback joystick mapping based on the default system configuration
Fixes
The joystick GUID calculation on Android has been updated to be again compatible with the SDL2 controller database
October 2022
Breaking Changes
The IGfxDevice::setResolution()
method has been removed. Depending on the full screen state, use setWindowSize()
or setVideoMode()
The inFullscreen
and isResizable
flags of the AppConfiguration
class have been renamed to fullScreen
and resizable
To query the supported video modes, you have to query the list of connected monitors with IGfxDevice::numMonitors()
and IGfxDevice::monitor()
New Features
It is now possible to enumerate connected monitors on all desktop backends
You can now query window scaling and drawable resolution to better support HiDPI monitors
The Lua API has been extended to support the new methods of the IGfxDevice
class
There is a new apptest_scaling
application that shows automatic window size scaling
Improvements
Failing to load a file will now never exit the application
Fixes
Various fixes about window size, window position, and full screen
September 2022
New Features
There is a new onFilesDropped()
input callback to support drag’n’drop from the system to the application window
Improvements
The JNI helper classes have been refactored to use global references and be more stable and secure
Shader programs now detach shaders before deleting them, so they are really deleted and memory is freed
The new NCINE_UNDEFINED_SANITIZER
CMake options adds support for the UBSan of GCC and Clang
Fixes
The Android manifest has been updated to allow compilation on latest Android versions
August 2022
Improvements
Improvements to ParticleSystem
and to particle affector classes
It is now possible to add affector steps out of order
A new getter method in ParticleSystem
allows the manipulation of affectors
Affector steps can be manipulated via a new Lua API
A new AudioStreamPlayer
getter returns the sample offset relative to the whole stream
The audio, font, and particles apptests have brand new ImGui interfaces
July 2022
Breaking Changes
The viewport chain is now an array accessible with the static Viewport::chain()
method
The Application::rootViewport()
method has been renamed to screenViewport()
The GLShaderAttributes
class have been deleted and its functionalities transferred to GLShaderProgram
Added the get_
prefix to some Lua getters of the MeshSprite
class
The Android sources are now an independant module inside the app
directory
New Features
New Shader
and ShaderState
classes to support custom user shaders (Lua API too)
Mesh sprites now support custom vertex format, if the appropriate shader is provided
The script.lua
example has been updated to show post-processing using viewports and shaders
Added support for multi-texturing and multiple render targets
A new apptest_shaders
application has been added to test custom shaders with batching
It shows post-processing blur, normal mapping, and bloom
Improvements
The version of the integrated Tracy has been updated to v0.8.2
The render batcher is now able to deal with custom shaders, providing the user writes a batched shader
Improved and simplified API for viewports (also ported to Lua)
Added methods to set OpenGL debugging labels for shaders, textures, and viewport’s FBOs
There is now an onDrawViewport()
callback that you can use to set shader uniforms when drawing a particular viewport
There is also an onResizeWindow()
callback that can be useful to recreate post-processing viewport textures
Added missing getters and more methods to the Lua API of the MeshSprite
class
Updated support for Gradle plugin 7.2.0, build tools 33.0.0, and NDK r25 on Android
Added support for the Vector4
class in the Lua API
Fixes
Added the missing SceneNode::lastFrameUpdated() method to the Lua API
You will never see again errors about reserved OpenGL uniforms or attributes not being found (like gl_VertexID
)
Non-compiling shaders will not fatal assert like they did before
Fixes to the methods dealing with vertices and indices of the Lua API of the MeshSprite
class
The minBatchSize
/maxBatchSize
rendering settings have been fixed and will not cause flickering when batching
June 2022
Breaking Changes
Added the get_
prefix to some Lua getters of the Application
and IAudioDevice
classes
Improvements
The version of the integrated ImGui has been updated to v1.88
No more crashes when dereferencing Lua light user data pointers of the wrong type
The tracking of pointers to C++ objects created in Lua has improved a lot
Fixes
Trying to play a sound when there are no available audio players will not crash the application
Fixed the parameters retrieving of Lua joystick state functions
May 2022
Breaking Changes
Added the get_
prefix to the Lua getters of the Font
class
Improvements
The version of the integrated Tracy has been updated to v0.8.1
Added a static method to the TextNode
class to calculate the boundaries for arbitrary text and font
The Font
class can now be constructed using an existent Texture
object
This allows for texture sharing (like an atlas) or textures constructed from texels
April 2022
Breaking Changes
The DrawableNode::LayerBase
enumeration has been deleted
This also means that TextNode
will not be on a higher layer by default
The SceneNode::draw()
method now returns a boolean to indicate if it has been rendered
New Features
You can set the layer of a SceneNode
and it will carry this value over to its children
A child node with a layer different than 0 will not inherit it from its parent
Added a scenegraph visit order when sorting the rendering commands
Improvements
The apptest_anchor
application can now show and modify all the different order and layer values
Fixes
The apptest_scene
and apptest_viewports
applications now work correctly on Qt5
March 2022
Breaking Changes
The Object::name()
method now returns an array of characters
Inverted position and rotation view values for the Camera
. It will now behave as an object that you move around the scene.
Improvements
The version of the integrated Tracy has been updated to v0.8
Allow a relative path from executables to data on Linux
Fixes
Fixed an issue with ImGui and Nuklear uploading VBOs before setting a vertex format (and consequently a VAO)
Map and set containers can now perform a rehash when their values or keys are non-copyable classes
Updating node transformation before committing uniform blocks
February 2022
New Features
There is now a new nctl::StaticString
class that stores its characters on the stack
Improvements
The version of the integrated ImGui has been updated to v1.87
Using the new event-based ImGui input API on all backends
Math classes like vectors, matrices, and quaternions will now initialize their members in the default constructor
Disabling the cursor will now enable a relative mouse motion if supported (SDL and GLFW)
The Qt5 widget exposes a flag to disable per-frame updates
It is now possible to retrieve last frame AABB of a DrawableNode
More information will be presented when the OpenGL debug context is enabled (marker annotations)
Fixes
The fixed capacity property is now correctly initialized when copy constructing, move constructing, and move assign a String
A Sprite
or a MeshSprite
without a texture would make the application crash when a texture was assigned
A TextNode
without a font would make the application crash when a font was assigned
A scene node with a negative scale factor will invert its rotation sign
January 2022
Breaking Changes
The public x
and y
fields of a SceneNode
have been made protected for consistency
The IGfxDevice
interface cannot set the OpenGL viewport and clear color, use viewports instead
The ImGui and Nuklear layer settings are part of the GUI settings structure in the Application
class
New Features
Multiple viewports to support offscreen rendering or split screen
A camera system to move around without transforming a parent node (slow on the CPU)
The viewport and camera systems can also be used via the Lua API
A new apptest_viewports
application has been added to test the viewport and camera systems
Improvements
Dirty bits to update shader uniforms only when they change
Dirty bits to transform a node or update its AABB only when needed
There is now a centralized pool of render commands that serves multiple classes
There are now OpenGL state classes to track the viewport and the clear color
The Rect
class has some new useful manipulation methods (also in the Lua API)
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
May 2019 - October 2019
Breaking Changes
The Font
constructor has now inverted parameters: fntFilename
as first and texFilename
as second
The reason for that is the new single parameter constructor
SceneNode::parentNode()
getter has been renamed to just parent()
, to be consistent with the new setParent()
setter
The xResolution
and yResolution
fields of the AppConfiguration
class have been replaced by a single 2D resolution vector
The setResolution()
helper method has been removed as it is now possible to call resolution.set()
In Lua x_res
and y_res
have been replaced by the resolution
2D vector
The old non ImGui debug overlay has been deleted. If you need the debug overlay you also need to enable the ImGui integration
As part of this change the fontTexFilename
and fontFntFilename
strings in the AppConfiguration
class have been deleted
The withProfilerGraphs
and withInfoText
flags in the AppConfiguration
class has been unified into a single withDebugOverlay
flag
You have to explicitely set the new flag to true
to enable the debug overlay even when your application is compiled in debug mode
Many nctl::String::copy()
methods have been turned into assign()
methods in order to be more consistent with STL
The Timer::now()
method has been removed, refer to the new TimeStamp
class
New Features
Emscripten is now supported as a target platform, meaning you can now use the nCine for web games!
The user can now query the available fullscreen video modes on PC and choose one
The IGfxDevice
interface has been enriched with methods to query the current video mode, the list of available ones and to set a new mode
A new deferShaderQueries
flag has been added to the AppConfiguration
classes
When it is set to true
all the shader error checks and introspection queries are deferred upon the first use of the shader, if it is ever used.
The option allows for decreased starting time at the expense of possible stutters when the shader is first used in a frame
New methods have been added to the audio classes to query their state
They were used in the new Audio Players section of the ImGui debug overlay interface
If you use the nCine compiled as a static library you have now access to more functionalities in the OpenGL classes
You can now create PBOs and TBOs .
You can now use GL_SAMPLER_1D
and GL_SAMPLER_3D
types in shaders
A new GLCullFace
class has been added to track OpenGL face culling state
The Font
class now relies on FntParser
class to extract all the data from a FNT file
More checks are now performed to ensure the text can be properly rendered
More glyph channel configurations are now supported and rendered correctly
The Font
class can be constructed with a single parameter: the FNT file. The texture will be loaded according to the file specified in the first page
tag.
When you compile the engine you can now choose to disable the support for various dependency libraries and features
You can disable threads support, Lua bindings, Png or WebP image loading, Ogg Vorbis sound loading or audio altogether
Improvements
The version of the integrated Tracy has gone from v0.4.1 to v0.5
It is now easier to use Tracy in custom nCine projects, including on Android
Threads can be named so that they can be tracked in the Tracy profiler
You can now also retrieve current thread priority or set a new one
All log entries are written out as coloured Tracy messages
Threads id are invalidated on join and cancel so that they can be reused
The version of the integrated ImGui has gone from v1.70 to v1.73
The GameController mapping database has been updated from the one included in SDL 2.0.9 to the one in SDL 2.0.10
The SceneNode
classes has seen the addition of long awaited helper methods in the shape of setParent()
, alpha()
and absAlpha()
The first one makes it easy and intuitive to set a node parent without going the opposite way by calling parent->addChildNode(this)
The alpha related methods should make it easier to query for a node alpha value
There are also new Lua methods for scene nodes: set_parent()
, get_alpha()
and set_alpha()
The new TimeStamp
class can be used to collect timestamps at the full precision of the internal clock
The Time
class has been enhanced with stop()
and totalTime()
methods to aggregate multiple time spans
Most methods of the TimeStamp
class are also accessible through the Lua API
It is now possible to assign()
a certain numbers of characters from a C string to an nctl::String
object
You can now enable the ImGui debug overlay even when the scenegraph is disabled
In this case be sure to track OpenGL states using GLBlending
, GLDepthTest
and the new GLCullFace
class
The Font
class has a new query method, numKernings()
, to retrieve the number of kerning pairs in a font (it is called num_kernings()
in Lua)
You can access the array of animations in an AnimatedSprite
and the array of rectangles in a RectAnimation
On Windows the executables use the Windows subsystem instead of the console one
They will also expose version properties thanks to the VERSIONINFO file
The Android Gradle plugin version has been updated from 3.4.0 to 3.4.1 and Android build tools from 28.0.3 to 29.0.2
The changes have been reflected in the template project as well
Fixes
Compiler warnings related with nctl::UniquePtr
wrapping forward declared classes have been fixed. They could have sometimes led to incorrect object deletions and possible leaks.
The OpenAL implementation has been rewritten and many bugs that were lurking in the code should have been squashed
Some changes dictated by the layout of the new ncTemplate
project
The CMake scripts now expect a nCine-data/icons/icon.ico
file instead of the old nCine.ico
Installers are now built with the CPACK_PACKAGE_VENDOR
and CPACK_PACKAGE_HOMEPAGE_URL
variables correctly set
The returned value for GL_MAX_UNIFORM_BLOCK_SIZE
is now clamped to 64kB because some OpenGL drivers might return very big numbers