Skip to content

NAP 0.5.0

Compare
Choose a tag to compare
@cklosters cklosters released this 07 Apr 16:27
· 1789 commits to main since this release
2c4f4dd

Major release that introduces many new features, general improvements and the usual set of fixes.

Download

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 demo
  • computeparticles demo

01-03-NAP-screen
Compute Flocking 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 a Sampler
    • Buffer can be read and set inside a shader program.
  • Bind any type of nap::GPUBuffer to a shader using a generic nap::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.
  • nap::PortalWebSocketServer (mod_napportal)

Demos:

webportal demo

01-05-NAP-screen
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)
  • Support for GPIO pins (mod_nappipins)
  • For better performance, consider turning off SampleShading and lowering the amount of Samples 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.

2022-04-06-165653_1920x1080_scrot
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)

01-02-NAP-screen
Sequencer demo with new audio track & light theme

01-07-NAP-screen
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 to UpdateSignal (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
  • 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