Skip to main content
Background Image

2022

Table of Contents

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)