Skip to main content
Background Image

2025

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