All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
This project adheres to a flavour of Calendar Versioning
for the globale releases (YYYY.MINOR
), and to Semantic
Versioning for libnopegl
.
ngl_scene_get_filepaths()
andngl_scene_update_filepath()
to introspect and manipulate the filepath based parameters in the scene graph- Live change support for
Media.filename
ngl_get_viewport()
to get the viewport currently in use by the rendering contextFontFace.index
parameter to select a different face in the font fileDrawTexture.texture
now accepts transformation nodes before the texture node to serve as a reframing mechanism (the transforms are applied to the texture coordinates in a centered[-1,1]
space with(-1,-1)
in the bottom left)HexagonalBlur
node to apply a post processing hexagonal bokeh blur effect to a sceneTextEffect.anchor
andTextEffect.anchor_ref
to control the character relative anchor for scale and rotate transformsDrawMask
node to facilitate alpha masking with textures
Text.font_files
text-based parameter is replaced withText.font_faces
node list which acceptsFontFace
nodes instead- The
ngl_config
structure and thengl_resize()
function do not have aviewport
anymore; it is now automatically calculated internally according to the selected resolution and the scene aspect ratio Text.box_{corner,width,height}
are replaced with a 4 component longText.box
parameter; if 3D positioning is required, traditional transform nodes can be usedRender*
nodes are renamed toDraw*
TextEffect.transform
now default to an anchor in the center of the characters instead of a distant bottom-left positionTextEffect.transform
are now combined on overlapping text effects instead of replacing the previous one
Text.aspect_ratio
, it now matches the viewport aspect ratio
ngl.SceneCfg
now includes the backend capabilities%s_coord_matrix
uniform is now exposed for 2D array and 3D texturesngl_get_backend()
function to retrieve the backend information associated with a configurednope.gl
contextngl-diff
can now set and change the input files from the GUI. While still supported, passing them through the command line is not mandatory anymorengl_scene_ref
andngl_scene_unrefp
functions to respectively increment and decrement the reference counter of a sceneGaussianBlur
node to apply a post processing gaussian blur effect to a scene with a resolution dependent bluriness parameter. The bluriness parameter can provide a gaussian blur effect with a radius up to 126 pixelsFastGaussianBlur
node to apply a post processing gaussian blur effect to a scene that is suitable for real time rendering on mobile devices as well as providing a resolution independent blurriness parameterforward_transforms
parameter to theTexture
andRenderToTexture
nodes to enable forwarding of the camera/model transformationsSelector
filter to select colors according to their lightness, chroma or hueAnimKeyFrame*
nodes can now be reused at a different time using theAnimated*.time_offset
parameterTextEffect.end_time
now automatically uses the scene duration when unspecified
- Moving the split position in
ngl-diff
- Crash in the hwconv module when direct rendering is not possible/enabled
- Export to output files containing spaces in their path on Windows
- Crash when decoding videos on Android with the OpenGLES backend
ngl.get_backends()
andngl.probe_backends()
were mistakenly inverted in v2023.2, this is changed back in this releaseSceneCfg
andSceneInfo
now use theBackend
enum instead of a stringngl_configure()
does not update thebackend
field from the user configuration anymore and theconfig
argument is now const. Users must now usengl_get_backend()
to get the underlying backend informationngl_scene_init_from_node()
has been replaced withngl_scene_init()
with the associatedngl_scene_params
structure- the
ngl_scene
structure is now private; its parameters can now be obtained usingngl_scene_get_params()
- the
Texture
andRenderToTexture
nodes no longer forward the camera/model transformations by default
%s_dimensions
uniform for 2D array and 3D images/textures, users must use textureSize()/imageSize() instead (%s_dimensions
is still available for 2D textures)SceneInfo.files
andSceneCfg.files
ngl_scene_freep
function; usengl_scene_unrefp
instead
Eval*
nodes now accept multi-dimensional input resourcesluma(r,g,b)
andsrgbmix(a,b,x)
functions in evalGridLayout
node to make a grid out of a number of scenesFilterColorMap
node to remap colors using a gradient of color points- Animated GIF export in the viewer
RenderNoise
node to generate fractal noise on the GPUTexture2D
node now accepts a scene asdata_src
and acts as an implicit render target (which simplifies the graph when all the features of theRenderToTexture
node are not needed)RenderToTexture
andTexture2D
nodes can now be automatically resized to match screen size if their initial dimensions are left to (0, 0)- Ability to drag'n drop Python scripts in the Viewer
- Viewer path management on Windows
- Name filters in the export dialog of the viewer
- Viewer export on Windows
- The installed
nodes.specs
specifications have been extended to include more information (types, choices, etc) - The documentation has been reworked, notably to include code examples with associated rendering and graph
Transform
node now accepts a node as input parameter and can be animated this wayscene
,SceneInfo
andSceneCfg
are now part ofpynopegl
instead ofpynopegl-utils
, where they are deprecated
RenderToTexture.features
as the RTT node is now able to detect automatically if the underlying graph requires a depth/stencil buffer
- Linux and macOS release jobs
- Much more detailed typing annotations in
pynopegl
RenderDisplace
node for texture displacement- Visual scopes support through the
ColorStats
,RenderHistogram
andRenderWaveform
nodes (seescopes
example in the demos) - Multiple modulo functions for the
Eval*
nodes:mod_e
(euclidean),mod_f
(floored) andmod_t
(truncated) - Support for rendering to 3D textures
- Support for 3D textures image load/store
- Support for cube maps image load/store
- Support for array of 2D textures
- External font rendering in the
Text
node - Fixed scaling in the
Text
node - Text effects (color, opacity, transform, glow, outline, blur), applicable per character/word/lines
PathKeyClose
node to close the current sub-pathRenderPath
node to render paths visually- Optional
compat_specs
in the@scene
decorator to add a version requirement constraint ngl-viewer
tool to select, customize and export scenes with a simple and intuitive interface
- CSV export in the HUD now always prints floats in C locale instead of quoted
pynopegl.Context.configure()
now takes aConfig
as argumentpynopegl
log levels are now controled using thepynopegl.Log
enummax_texture_dimensions_*
capabilities are renamed tomax_texture_dimension_*
- Backend probing in
pynopegl
now returns a more Pythonic output GraphicConfig.scissor
is now anivec4
parameter instead ofvec4
TimeRangeMode*
nodes are removed andTimeRangeFilter
is simplified to handle their role; if multiple ranges are needed simulteanously, aGroup
can be used.TimeRangeFilter.max_idle_time
is removed since its use was limited to inter range times (now only a single time segment is handled).- The API now mandates that node scenes have to be wrapped into a dedicated scene object that holds extra metadata (duration, aspect ratio and framerate)
- All counters and size-based arguments in the public API are now using
size_t
instead ofint
- The
Text.valign
andText.halign
parameters now also align the text per line Text
rendering has been completely reworked to support more advanced effects and smooth rendering at high resolution- The
@scene
decorator now relies on an explicitycontrols
dictionary instead of**kwargs
- The
Texture*
nodes now uselinear
filtering by default instead ofnearest
ResourceProps.variadic
bool flag as it was never a functional interfaceNGL_CAP_NPOT_TEXTURE
as we mandate full support for textures with non-power-of-two dimensions- Support for OpenGL < 3.3 and OpenGL ES < 3.0 and the associated capabilities:
NGL_CAP_BLOCK
,NGL_CAP_INSTANCED_DRAW
,NGL_CAP_SHADER_TEXTURE_LOD
,NGL_CAP_TEXTURE_2D_ARRAY
,NGL_CAP_TEXTURE_3D
,NGL_CAP_TEXTURE_CUBE
,NGL_CAP_UINT_UNIFORMS
- GLSL
ngl_tex{2d,3d,cube,2dlod,3dlod,cubelod}()
declarations (users must now usetexture()
andtextureLod()
directly).ngl_texvideo()
is still there and is still the prefered picking method
- Project renamed to
nope.gl
- Color channel difference in
ngl-diff
is now done in linear space
- Windows DLL information (Copyrights, Version, Name)
- The installed
nodes.specs
is now inJSON
instead ofYAML
- The default branch is now named
main
- Crash with specific draw time sequences in some time filtered diamond-tree
graphs involving
TimeRangeFilter
nodes keeping some parts of the graph active - Build
setuptools>=60
on MinGW - Hooks file synchronization for file names with special chars
- A race condition in
ngl-control
reload mechanism
ngl-diff
can now open images
- Improved
ngl-diff
color map
- HDR tone mapping support for PQ content
- Visual glitches when seeking with the VAAPI/Vulkan acceleration
- Crash with specific draw time sequences in some time filtered diamond-tree graphs
- Memory leak with
Buffer*(count=N)
(only when no data is specified)
- Handle OpenGLES as a separate backend build-wise
- Mediacodec/Vulkan video acceleration support
- EGL device platform support (allows to support NVIDIA GPUs in headless environments)
- Compatibility with static analyzers for symbols discovery in
pynodegl
, including typing annotations - Compatibility with Vulkan devices not supporting host cached memory
- Missing exposed constants in
pynodegl
(some backend capabilities and the Wayland platform ID) - Undefined behaviour when using geometries with
Render*
nodes (Render
node is not affected) - Undefined behaviour in sRGB/linear conversions with negative colors
Buffer.block_field
is now a string corresponding to the field name instead of an integer index
- Missing package data files for
ngl-diff
- Optional
backend_config
field to thengl_config
structure (ABI break) - External OpenGL context support
ngl-diff
tool to visually compare videosUniformColor.space
colorspace configuration (sRGB, HSL, HSV)AnimatedColor
andAnimKeyFrameColor
nodesset_surface_pts
support to the Vulkan backend (Android)
- Various memory leaks
- Hooks session information sometimes not being updated in
ngl-control
handle
field from thengl_config
structureUniformColorA
(useUniformColor
instead, with a separateUniformFloat
for the opacity)
eye
,center
andup
Camera parameters can now be node- Honor NO_COLOR environment variable
- A crash happening in the VAAPI context module when both the OpenGL and Vulkan backends were enabled.
- A deadlock in
ngl-control
when specifying invalid encoding arguments
TextureView
node, useful for targeting a specific layer of a texture in RTT scenarios- Initial Vulkan support
- VAAPI/Vulkan video acceleration support
- Metal support through MoltenVK, including VideoToolbox video acceleration
- HDR tone mapping support for HLG content
- Fix OpenGL buffers and textures bindings
- A memory crash happening when resetting the context scene to NULL with the HUD active
- This Changelog