NAP 0.5.0
Major release that introduces many new features, general improvements and the usual set of fixes.
Download
- NAP-0.5.0-Win64-x86_64.zip
- NAP-0.5.0-Linux-x86_64.tar.bz2
- NAP-0.5.0-macOS-x86_64.zip
- NAP-0.5.0-Linux-armhf.tar.bz2
New Features
New Look & Feel
We completely re-styled NAP and everything associated with NAP. Including the Logo, Icons, Colors & Fonts. We applied all of these changes to every part of the eco-system, including the NAP Website, applications, editor (Napkin), portal (new), sequencer, online documentation, readme etc. Big shout out to NEO-METABOLISM, the agency that helped us achieve pixel perfect results.
Vulkan Compute
Use the Vulkan Compute API to run general computation tasks on the GPU using a simple to use NAP interface. Integrates seamlessly into our graphics engine, where synchronization of buffers and compute / graphics commands is handled for you. Read, write, bind and sample from any type of buffer, texture and set of uniforms from anywhere in your custom Compute or Graphics pipeline.
New:
nap::ComputeComponent
(mod_naprender)- Sets up and dispatches the compute program
nap::ComputeShader
(mod_naprender)- Compute program
nap::ComputeMaterial
(mod_naprender)- Compute program bindings (uniforms, textures, buffers)
Demos:
computeflocking
democomputeparticles
demo
Bind nap::GPUBuffer
to Compute and Graphics shaders
- Create and bind any
nap::GPUBuffer
to Compute and Graphics shaders as a storage buffer (mod_naprender)- Similar to binding a
nap::Texture2D
using aSampler
- Buffer can be read and set inside a shader program.
- Similar to binding a
- Bind any type of
nap::GPUBuffer
to a shader using a genericnap::GPUBufferBinding
nap::StructBuffer
nap::GPUBufferFloat
etc.nap::VertexBuffer
nap::IndexBuffer
- Fill buffers on intialization using a
nap::Fillpolicy
Demos:
computeflocking
computeparticles
Web Portal
Automatically generates a web interface to control & monitor your NAP application, in real-time, from a web browser. Use the nap::PortalComponent
to expose the parameters and resources you want to view and edit in a browser. Use the (open-source) NAP Portal node module, in combination with the (open-source) NAP Dashboard to generate a website, based on those exposed items, for you. Simply connect to the portal inside a browser and control your application from anywhere on the network. Completely data-driven.
New:
nap::PortalComponent
(mod_napportal)- Handles communication between the NAP application and a web portal.
nap::PortalEvent
(mod_napportal)- Used for communication between the client and server side of NAP portals.
nap::PortalItem
(mod_napportal)- Represents a single item (e.g. slider, toggle, button) in a NAP portal.
nap::PortalItemTextArea
nap::PortalItemButton
nap::PortalItemRGBColor8
nap::PortalItemOperationalCalendar
nap::PortalItemVec4
- etc.
- Represents a single item (e.g. slider, toggle, button) in a NAP portal.
nap::PortalWebSocketServer
(mod_napportal)
Demos:
webportal
demo
NAP Dashboard (browser) communicating with the the NAP Web Portal demo
Raspberry Pi Support
Added full support for The Raspberry Pi 4, Raspbian Bullseye (11), armhf
, including access to the GPIO
pins & Vulkan Compute / Rendering. You can download the pre-compiled package right here or compile NAP from source, following the regular build instructions. To make life easier we pre-compiled QT for you. The entire engine and toolset is supported, including the compilation, packaging and running of all demos, apps and editor. We are already using it in production. Performance is quite impressive, most demo apps run at about ~80-90 fps.
New:
- Support for Raspbian Bullseye (11, armhf)
- Follow installation instructions when working from package
- Follow compilation instructions when working from source
- Support for GPIO pins (mod_nappipins)
- For better performance, consider turning off
SampleShading
and lowering the amount ofSamples
on render targets, including:nap::RenderWindow
nap::RenderTarget
Demos:
Every demo compiles and runs. pipins
demo is only available for the Raspberry Pi 4, demonstrates how to use the GPIO
pins in combination with the mod_nappipins
module.
Tutorials:
@TimGroeneboom wrote a great tutorial on how to develop and deploy NAP on the Raspberry PI 4 using CLion. Including general tips & tricks to get more out of NAP running on the Raspberry Pi.
Line Blending demo running on the Raspberry Pi 4 (Vulkan)
Known Issues:
The heightmap
and computeflocking
demos initialize / run but have render issues. Both show artefacts and are 'glitchy', sometimes giving different results each run. No Vulkan validation errors are logged or system incompatibility issues have been found. 'Could' be driver related, especially considering the demos work on all other platforms, both on integrated and dedicated GPUs. Please note that the Mesa Vulkan driver on the Pi is tagged as not production ready
.
GUI
New:
- Themes (napkin & mod_napimgui)
- Dark (default)
- Hyper Dark
- Light
- Classic
- New set of icons for editor & common actions (save, play etc.) (napkin & mod_napimgui)
- Support for drawing icons (
nap::Icon
) inside GUI elements (mod_napimgui) - Icons can be inverted based on theme preference (napkin & mod_napimgui)
- Updated theme handling (mod_napimgui & napkin)
- Introduction of
nap::gui::ColorPalette
struct (mod_napimgui)
Sequencer demo with new audio track & light theme
Multi Window demo with dark theme
Sequencer
- Audio Tracks (mod_napsequenceaudio, mod_napsequenceaudiogui)
- Stepped Curves (mod_napsequence, mod_napsequencegui)
- Manual!
Rendering
nap::RenderBloomComponent
(mod_naprender)nap::ColorAdjustmentShader
(mod_naprender)nap::BlurShader
(mod_naprender)
Module Data
Modules, similar to apps, can now have data associated with them. Module assets (data) can be located at runtime using nap::Module::findAsset
, which uses the DataSearchPaths
property of nap::ModuleInfo
to locate the asset. Examples: icons for mod_napimgui
and shaders for mod_naprender
.
Note: module data is not (yet) automatically copied by the build system when the application is packaged. Therefore it is required to add an install directive to module_extra.cmake
(under dist/cmake) to install the data when packaging an application for distribution:
mod_napimgui/dist/cmake/module_extra.cmake:
# install data directory
install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/data DESTINATION modules/mod_napimgui)
.INI files
Introduction of .ini
files to cache state in between sessions
- Always tied to a specific module
- Used to store / restore state in between sessions
- Currently used to restore position of render windows and GUI elements.
- Can be constructed (based on your requirements) in any way, shape or form.
Improvements
- Add support for
qss
stylesheet global variables (napkin) - Optimize NAP Framework application font (mod_napimgui)
- Add labels to
SequenceTrack
inspectors (mod_napsequence) - Make
SequencePlayerAudioClock
register a process instead of connecting toUpdateSignal
(mod_napsequence) - Output nodes of
SequencePlayerAudioOutput
should be optional (mod_napsequence) - Add connectPin method to
SequencePlayerAudioOutput
(mod_napsequence) - Remove numeric pixel values from sequence gui views (mod_napsequencegui)
- Colors are set in
sequenceaudioguiservice
, derived from colors set in imgui service (mod_napsequencegui) - New thirdparty dependency folder structure, based on Arch & OS (build)
- More and better crypto signing schemes (mod_naplicense, licensegenerator), thanks to @jacwil
- Shaders are no longer hard coded but shipped as assets together with the module. (mod_naprender)
- Removed all references to Android as a potential build target (deprecated for long time)
- Updated documentation to use new style (docs)
- Documentation is now mobile-friendly (docs)
- Updated demos to use new style (demos)
- Automatic handling of service destruction through unique handle (core)
- Many more, large and small.
Fixes
- Cannot stop apps that have more than 1 window from napkin (napkin)
- Hot loading of render window fails if there are multiple windows (mod_naprender)
- SDL memory alignment issue when copying structs by value over DLL bounds in GCC
- Portaudio (ALSA) crash when no input available on Linux (mod_napaudio)
SequenceEdtiroGUIView
jitters when zooming in / out (mod_napsequencegui)- Adjusting value from edit curve point action popup would not be correctly translated to normalized value by controller (mod_napsequence)
- Serialize 'char' entries as string, not numeric. Enables full ASCII range, regardless of platform char signage (core)
- Use
QFileDialog::DontUseNativeDialog
in Linux to prevent native file dialog returning wrong path (napkin) - Fixed napkin initialization strategy for package validation (napkin)
- Napkin now correctly renders item delegates in combination with items that are selected (napkin)
- Correct placing of item delegates in property view (napkin)
- Make sure horizontal zoom still works when hovering audio sequence segment (mod_napsequencegui)
- Many more, large and small.
Third Party
- New Docker Buildx pipeline
- Simplifies cross platform & cross arch building of third party dependencies
- See: https://github.com/napframework/thirdparty
- upgraded portAudio to 19.7.0
- upgraded FreeImage to 3.18
- upgraded GLM to 0.9.9.8
- upgraded Vulkan SDK to 1.2.189
- upgraded CMake to 3.21
- upgraded cryptopp to 8.3
Breaking Changes
- Removed from
mathattributes.cpp
:module.def("rotate", &glm::rotate<glm::quat::value_type, glm::highp>);
- This call, with the upgrade to GLM GLM 0.9.9.8, is no longer available (if I'm not mistaken)
- We never used it, if you do, feel free to replace it.
Special thanks to @TimGroeneboom, @lshoek, @navFooh, @cheywood and @jacwil