Table of Contents
Table of Contents
October 2025
Improvements
- The version of the integrated ImGui has been updated to v1.92.4
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