Table of Contents
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)