Table of Contents
Table of Contents
September 2025
Improvements
- The version of the integrated ImGui has been updated to v1.92.3
- Using
FindFirstFileExA
with FindExInfoBasic
and FIND_FIRST_EX_LARGE_FETCH
for faster directory traversal on Windows
Fixes
- Fixed self-assignment in some move assignment operators
August 2025
Breaking Changes
- Trying to change the capacity of an
Array
with ArrayMode::FIXED_CAPACITY
will trigger a fatal assert
- Renamed
Thread::yieldExecution
to ThisThread::yield
New Features
- Added a multi-threaded job system that is accessible to the user
Improvements
- Added kernel and user-space semaphores to the thread synchronization primitives
- Added a new
ThisThread
namespace for functions only available from the calling thread
- Added atomic classes for unsigned integer types
- Added thread and signal fences, and
acq_rel
memory order
- The
Array
class now better supports non-movable and non-copyable types
- The version of the integrated ImGui has been updated to v1.92.2b
July 2025
New Features
Improvements
- Added CMake options to extract and install debug symbols
- The version of the integrated ImGui has been updated to v1.92.1
- The version of the integrated Tracy has been updated to v0.12.2
apptest_filebrowser
now has a directory history and related navigation buttons
Fixes
- CMake version variables for projects have been fixed
June 2025
Breaking Changes
- Inverted the order of the values in all
Atomic*::cmpExchange()
methods
New Features
- Add a set of environment variables to override all the user configurable compile-time variables in
AppConfiguration
Improvements
- The version of the integrated Tracy has been updated to v0.12.1
- The version of the RenderDoc in-application API has been updated to v1.6.0
- The version of the integrated Google Test has been updated to v1.17.0
- The version of the integrated Google Benchmark has been updated to v1.9.4
April 2025
Breaking Changes
- Renamed
nc.input.joymapped_state()
Lua function to nc.input.joy_mapped_state()
New Features
- Added support for joystick vibration (also in the Lua API)
Improvements
- Added two new dirty bits for GPU data upload of
SceneNode
properties
- The Node Inspector in the ImGui debug overlay shows clearer information for viewports
Fixes
- Culled drawable nodes will not waste time with transformations on every frame
- The OpenGL debug group for viewports has been fixed
- Viewports will only clear the available attachments (no depth/stencil clear if not specified in the format)
March 2025
Breaking Changes
apptest_scene
has been renamed to apptest_gui
- Renamed
SceneNode::setColor(Colorf color)
to setColorF()
- Renamed
IInputManager::joystickState()
to IInputManager::joyState()
Improvements
- The version of the integrated ImGui has been updated to v1.91.9b
- Added the
TimeStamp::toNow()
method to set a timestamp object counter to the current clock value
- Added support for joystick vibration on SDL2 and Android
Fixes
- Fixed the return value of
SceneNode::alpha()
and SceneNode::absAlpha()
February 2025
Breaking Changes
- Removed
isLeftButtonDown()
, isMiddleButtonDown()
, isRightButtonDown()
, isFourthButtonDown()
, isFifthButtonDown()
from the MouseState
class
- Use the new
isButtonDown(MouseButton button)
method or the ncine.input.is_mouse_button_down()
Lua function instead
- Removed
isLeftButton()
, isMiddleButton()
, isRightButton()
, isFourthButton()
, isFifthButton()
from the MouseEvent
class
- Use the new
button
field of the MouseEvent
class and compare values with the MouseButton
enumeration
- Renamed
ncine.input.key_down()
to ncine.input.is_key_down()
in the Lua API
- Renamed
isButtonPressed()
to isButtonDown()
in both JoystickState
and JoyMappedState
classes
- Renamed
ncine.input.joy_button_pressed()
to ncine.input.is_joy_button_down()
- Renamed
ncine.input.joy_present()
to ncine.input.is_joy_present()
- Renamed
ncine.input.joy_mapped()
to ncine.input.is_joy_mapped()
- Renamed
Application::interval()
to Application::frameTime()
- Renamed
ncine.application.get_interval()
to ncine.application.get_frame_time()
- Renamed
IFrameTimer::lastFrameDuration()
and IFrameTimer::currentFrameDuration()
to IFrameTimer::lastFrameTime()
and IFrameTimer::currentFrameTime()
- Renamed
ncine.frame_timer.last_frame_duration()
to ncine.frame_timer.last_frame_time()
- Renamed
ncine.frame_timer.current_frame_duration()
to ncine.frame_timer.current_frame_time()
Improvements
- Added new
isButtonPressed()
/isButtonReleased()
methods to the MouseState
class to detect the frame when a button is pressed/released
- Also added
is_mouse_button_pressed()
/is_mouse_button_released()
functions to the Lua input table
- Added new
isKeyPressed()
/isKeyReleased()
methods to the KeyboardState
class to detect the frame when a key is pressed/released
- Also added
is_key_pressed()
/is_key_released()
functions to the Lua input table
- Added new
isButtonPressed()
/isButtonReleased()
methods to the JoystickState
and JoyMappedState
classes to detect the frame when a button is pressed/released
- Also added
is_joy_button_pressed()
/is_joy_button_released()
functions to the Lua input table
- Added various utility constructors and conversion methods for the rectangle and vector classes
- Added a
NCPROJECT_DEBUG
compiler definition for when projects are compiled in debug
- Added a new
NCPROJECT_ALWAYS_FIND_PACKAGES
that can be useful when creating a Linux package with a dynamic nCine library
- The version of the integrated ImGui has been updated to v1.91.8
- The version of the integrated Google Test has been updated to v1.16.0
January 2025
Improvements
- Script and callbacks errors are now shown on screen in
apptest_lua
/ncinelua
- Added tabular character support to the
TextNode
class, with configurable tab size (also in the Lua API)
- Implemented introspective sort for render queues, making the sorting faster and more robust