
[{"content":" Run with Emscripten GitHub This is a test for the various custom allocators available when compiling with the NCINE_WITH_ALLOCATORS=ON CMake option.\nThe ImGui interface will allow you to create different types of allocators and to allocate and free memory blocks of different sizes and alignment requirements.\nVideos Controls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-allocators/","section":"Examples","summary":" Run with Emscripten GitHub This is a test for the various custom allocators available when compiling with the NCINE_WITH_ALLOCATORS=ON CMake option.\n","title":"apptest_allocators","type":"examples"},{"content":" Multiple viewports for offscreen rendering or split-screen Custom shaders for post-processing or bespoke effects Automatic batching for sprites and text Sprite meshes for deformation or tight bounding Binary shader caching for faster startup VAO and immutable texture support Efficient OpenGL buffer updates (mapped or direct) Indexed and instanced drawing RenderDoc In-application integration Optional Google ANGLE backend on Windows ","externalUrl":null,"permalink":"/features/renderer/","section":"Features","summary":" Multiple viewports for offscreen rendering or split-screen Custom shaders for post-processing or bespoke effects Automatic batching for sprites and text Sprite meshes for deformation or tight bounding Binary shader caching for faster startup VAO and immutable texture support Efficient OpenGL buffer updates (mapped or direct) Indexed and instanced drawing RenderDoc In-application integration Optional Google ANGLE backend on Windows ","title":"Modern Renderer","type":"features"},{"content":" Play animations from spritesheet textures Forward and backward looping support Transformable sprites (scale, rotate) Automatic culling when off-screen ","externalUrl":null,"permalink":"/features/animated-sprites/","section":"Features","summary":" Play animations from spritesheet textures Forward and backward looping support Transformable sprites (scale, rotate) Automatic culling when off-screen ","title":"Animated Sprites","type":"features"},{"content":" Run with Emscripten GitHub This test shows how different scene nodes (sprites, text nodes, and particles) are transformed when you change their anchor point.\nIt has evolved to show other advanced features like blending and layer ordering options.\nVideos Controls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface Pressing CTRL + H on the keyboard will show or hide the ImGui interface Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-anchor/","section":"Examples","summary":" Run with Emscripten GitHub This test shows how different scene nodes (sprites, text nodes, and particles) are transformed when you change their anchor point.\n","title":"apptest_anchor","type":"examples"},{"content":" Run with Emscripten GitHub One of the oldest and simplest tests, it shows how to make a sprite walk using a spritesheet and an AnimatedSprite class.\nControls Use the mouse, the joystick, or the touchscreen to move the sprite around Pressing F on the keyboard will toggle full screen Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-animsprites/","section":"Examples","summary":" Run with Emscripten GitHub One of the oldest and simplest tests, it shows how to make a sprite walk using a spritesheet and an AnimatedSprite class.\n","title":"apptest_animsprites","type":"examples"},{"content":" Simulate particles in world or local space Affectors for color, size, rotation, position, velocity Randomized emission properties: amount, life, rotation, position, velocity ","externalUrl":null,"permalink":"/features/particles/","section":"Features","summary":" Simulate particles in world or local space Affectors for color, size, rotation, position, velocity Randomized emission properties: amount, life, rotation, position, velocity ","title":"Particle Simulation","type":"features"},{"content":" Run with Emscripten GitHub This test shows how to play sound effects with an AudioBufferPlayer, and how to play music using an AudioStreamPlayer. It also allows you to change some player properties and apply effects and filters. If the nCine has been compiled with ImGui some of those properties can be tweaked with an interface.\nControls Pressing M on the keyboard or A on the gamepad will play or pause the music Pressing Space on the keyboard or B on the gamepad will play or pause the sound Pressing A/S/D will play/stop/pause the sound Pressing L will toggle sound looping Pressing T will start or stop the stress test for audio sources Change the pitch, gain, and horizontal position of the sound with the numeric keypad or the gamepad:\nPressing KP7/KP8/KP9 will decrease/reset/increase the pitch (use the right trigger on the gamepad)\nPressing KP4/KP5/KP6 will decrease/reset/increase the gain (use the left trigger on the gamepad\nPressing KP1/KP2/KP3 will decrease/reset/increase the horizontal position (use the left stick on the gamepad)\nPressing KP0 on the keyboard or Y on the gamepad will reset all properties to their default values\nPressing the left/right arrow keys or D-pad directions, or the left bumper will change the music file\nPressing the up/down arrow keys or D-pad directions, or the right bumper will change the sound file\nPressing the Start on the gamepad will start or stop the stress test for audio sources\nUse the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface.\nPressing CTRL + H on the keyboard will show or hide the ImGui interface\nPressing Escape on the keyboard will quit the application\n","externalUrl":null,"permalink":"/examples/apptest-audio/","section":"Examples","summary":" Run with Emscripten GitHub This test shows how to play sound effects with an AudioBufferPlayer, and how to play music using an AudioStreamPlayer. It also allows you to change some player properties and apply effects and filters. If the nCine has been compiled with ImGui some of those properties can be tweaked with an interface.\n","title":"apptest_audio","type":"examples"},{"content":" Play memory sound buffers or stream music from disk WAVE and Ogg Vorbis format support with looping Control gain, pitch, panning, and more via OpenAL Soft Apply OpenAL EFX effects and filters (reverb, chorus, echo, flanger, etc.) ","externalUrl":null,"permalink":"/features/sound/","section":"Features","summary":" Play memory sound buffers or stream music from disk WAVE and Ogg Vorbis format support with looping Control gain, pitch, panning, and more via OpenAL Soft Apply OpenAL EFX effects and filters (reverb, chorus, echo, flanger, etc.) ","title":"Sound and Music","type":"features"},{"content":" Run with Emscripten GitHub The nCine version of the classic BunnyMark demo. If the nCine has been compiled with ImGui you can tweak some options with an interface.\nControls Pressing the left mouse button, tapping the right half of the screen, pressing Space on the keyboard or A on the gamepad will add some bunnies Pressing the right mouse button, tapping the left half of the screen, pressing R on the keyboard or B on the gamepad will reset the number of bunnies Pressing V on the keyboard or X on the gamepad will toggle the V-Sync Pressing B on the keyboard or Y on the gamepad will toggle batching Pressing F on the keyboard will toggle full screen Pressing P on the keyboard or Start on the gamepad will pause the application Pressing CTRL + H on the keyboard or Back on the gamepad will show or hide the ImGui interface Pressing Escape on the keyboard or Guide on the gamepad will quit the application ","externalUrl":null,"permalink":"/examples/apptest-bunnymark/","section":"Examples","summary":" Run with Emscripten GitHub The nCine version of the classic BunnyMark demo. If the nCine has been compiled with ImGui you can tweak some options with an interface.\n","title":"apptest_bunnymark","type":"examples"},{"content":" Parent–child relationships for nodes Position, scale, rotation, and color inheritance Per-node update and draw toggles ","externalUrl":null,"permalink":"/features/scenegraph/","section":"Features","summary":" Parent–child relationships for nodes Position, scale, rotation, and color inheritance Per-node update and draw toggles ","title":"Scenegraph","type":"features"},{"content":" Run with Emscripten GitHub This is the default test that will run if you debug with Visual Studio, if you double-click the macOS bundle, or if you build an Android APK.\nIt shows some sprites randomly moving while you can move the camera around. The camera used to be simulated by moving the sprites in the opposite direction of the input but it now supports the Viewport and Camera classes\nVideos Controls Pressing W/A/S/D, dragging while pressing the left mouse button, touching with one finger, or moving the left gamepad stick will pan the camera Pressing the left/right arrow keys, dragging horizontally while pressing the right mouse button or touching with two fingers, or moving the right gamepad stick left/right will rotate the camera Pressing the up/down arrow keys, dragging vertically while pressing the right mouse button or touching with two fingers, or moving the right gamepad stick up/down will zoom the camera Scrolling the mouse wheel will also zoom the camera Pressing T on the keyboard or X on the gamepad will toggle between individual textures and a texture atlas (more chances for batching) Pressing V on the keyboard or the right bumper on the gamepad will toggle between simulating a camera by moving sprites in the opposite direction or using a Viewport and a Camera objects Pressing R on the keyboard, Y on the gamepad, or double-clicking/double-tapping will reset the camera position, rotation, and scale Pressing B on the keyboard or A on the gamepad will toggle batching Pressing C on the keyboard or B on the gamepad will toggle culling Pressing F on the keyboard will toggle full screen Pressing P on the keyboard or Start on the gamepad will pause the application Pressing Escape on the keyboard or Guide on the gamepad will quit the application ","externalUrl":null,"permalink":"/examples/apptest-camera/","section":"Examples","summary":" Run with Emscripten GitHub This is the default test that will run if you debug with Visual Studio, if you double-click the macOS bundle, or if you build an Android APK.\n","title":"apptest_camera","type":"examples"},{"content":" Bitmap font support via AngelCode’s generator Text alignment: left, center, right Kerning pairs for precise spacing UTF-8 encoded Unicode characters ","externalUrl":null,"permalink":"/features/text-rendering/","section":"Features","summary":" Bitmap font support via AngelCode’s generator Text alignment: left, center, right Kerning pairs for precise spacing UTF-8 encoded Unicode characters ","title":"Text Rendering","type":"features"},{"content":" Run with Emscripten GitHub This test is not interactive and only stresses the object cloning system to highlight errors.\nControls Pressing Escape on the keyboard will quit the application.\n","externalUrl":null,"permalink":"/examples/apptest-clones/","section":"Examples","summary":" Run with Emscripten GitHub This test is not interactive and only stresses the object cloning system to highlight errors.\n","title":"apptest_clones","type":"examples"},{"content":" GLFW 3, SDL 2, or Qt 5 backends for window and input on PC Native input backend on Android Handles mouse, keyboard, touch, and controller inputs Joystick support with hot swap and SDL 2 gamepad mappings ","externalUrl":null,"permalink":"/features/input/","section":"Features","summary":" GLFW 3, SDL 2, or Qt 5 backends for window and input on PC Native input backend on Android Handles mouse, keyboard, touch, and controller inputs Joystick support with hot swap and SDL 2 gamepad mappings ","title":"Input","type":"features"},{"content":" Run with Emscripten GitHub A basic but working file browser based on ImGui, with a list of pinned directories, custom coloring, permissions support, multiple sorting types, file types, and extension filters.\nThe same code is used in SpookyGhost with the addition of icons.\nControls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface and navigate the filesystem. Drag and dropping directories to the pinned list on the left by will add them to the list. Drag and dropping a directory/file to the browser on the right will go to that/the containing directory. Pressing Escape on the keyboard will quit the application. ","externalUrl":null,"permalink":"/examples/apptest-filebrowser/","section":"Examples","summary":" Run with Emscripten GitHub A basic but working file browser based on ImGui, with a list of pinned directories, custom coloring, permissions support, multiple sorting types, file types, and extension filters.\n","title":"apptest_filebrowser","type":"examples"},{"content":" Extensive Lua API bindings Use Lua for full games or selective behaviors/data LuaCATS annotations for type-checking and IDE autocompletion (with the Lua Language Server) Hot-reloading: full state reset or fast reload ","externalUrl":null,"permalink":"/features/lua-scripting/","section":"Features","summary":" Extensive Lua API bindings Use Lua for full games or selective behaviors/data LuaCATS annotations for type-checking and IDE autocompletion (with the Lua Language Server) Hot-reloading: full state reset or fast reload ","title":"Lua Scripting","type":"features"},{"content":" Run with Emscripten GitHub A test that loads some fonts and displays strings in text nodes, with and without kerning.\nIf the nCine has been compiled with ImGui some of those options can be tweaked with an interface.\nControls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface Pressing CTRL + H on the keyboard will show or hide the ImGui interface Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-font/","section":"Examples","summary":" Run with Emscripten GitHub A test that loads some fonts and displays strings in text nodes, with and without kerning.\n","title":"apptest_font","type":"examples"},{"content":" Lock-free work-stealing queue with parent–child jobs, continuations, and parallel loops CPU-topology aware thread pool with automatic affinity assignment Fast user-space semaphore for efficient thread synchronization Batch job submission for reduced scheduling overhead Built-in debug tools: job state tracking, detailed logging, Tracy zones, statistical counters Public API for direct access to the job system ","externalUrl":null,"permalink":"/features/job-system/","section":"Features","summary":" Lock-free work-stealing queue with parent–child jobs, continuations, and parallel loops CPU-topology aware thread pool with automatic affinity assignment Fast user-space semaphore for efficient thread synchronization Batch job submission for reduced scheduling overhead Built-in debug tools: job state tracking, detailed logging, Tracy zones, statistical counters Public API for direct access to the job system ","title":"Job System","type":"features"},{"content":" Run with Emscripten GitHub A test showing some bouncing sprites and interfaces to control some parameters.\nBased on the enabled integrations and the preferred backend you might see the ImGui, Nuklear, and Qt5 interfaces, even all at once!\nThis was once called apptest_scene Video Controls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the interfaces Pressing P on the keyboard, or the left mouse button, or tapping the screen if no interface is available will pause the application Pressing CTRL + H on the keyboard will show or hide the ImGui and the Nuklear interfaces Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-gui/","section":"Examples","summary":" Run with Emscripten GitHub A test showing some bouncing sprites and interfaces to control some parameters.\n","title":"apptest_gui","type":"examples"},{"content":" Image formats: PNG, WebP GPU compressed formats: ASTC, ETC2, ATC, PVR, DXT Container formats: KTX, PVR, DDS ","externalUrl":null,"permalink":"/features/texture-formats/","section":"Features","summary":" Image formats: PNG, WebP GPU compressed formats: ASTC, ETC2, ATC, PVR, DXT Container formats: KTX, PVR, DDS ","title":"Texture Formats","type":"features"},{"content":" Run with Emscripten GitHub A test for the multi-threaded job system supporting all of its features like parent/children relationship, continuations, parallel for, jobs spawning more jobs, job system satistics.\nControls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface Pressing CTRL + H on the keyboard will show or hide the ImGui interface Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-jobsystem/","section":"Examples","summary":" Run with Emscripten GitHub A test for the multi-threaded job system supporting all of its features like parent/children relationship, continuations, parallel for, jobs spawning more jobs, job system satistics.\n","title":"apptest_jobsystem","type":"examples"},{"content":" Full Dear ImGui integration Usable for in-game UIs or debug overlays On-screen statistics for rendering and Lua Line plots for inspecting values over time More Nuklear integration for skinnable userc interfaces\n","externalUrl":null,"permalink":"/features/imgui-integration/","section":"Features","summary":" Full Dear ImGui integration Usable for in-game UIs or debug overlays On-screen statistics for rendering and Lua Line plots for inspecting values over time More Nuklear integration for skinnable userc interfaces\n","title":"ImGui Integration","type":"features"},{"content":" Run with Emscripten GitHub Gamepad support has always been very important for the nCine and this test shows information about the connected gamepad and visual feedback about its axes, buttons, and hats.\nControls Connect a gamepad to see visual feedback about the state of its axes and buttons.\nPress the Back button on the gamepad to enable or disable the vibration, if available Pressing the left/right trigger when vibration is enabled, will vibrate the left/right motor Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-joystick/","section":"Examples","summary":" Run with Emscripten GitHub Gamepad support has always been very important for the nCine and this test shows information about the connected gamepad and visual feedback about its axes, buttons, and hats.\n","title":"apptest_joystick","type":"examples"},{"content":" Fully C++11-compliant codebase High-precision monotonic timers Atomic counters with multiple memory orders Thread creation, synchronization, and affinity control Lightweight math library for vectors, matrices, and quaternions Flexible logging system with console and file output FileSystem API for querying and manipulating paths, files, and directories Custom memory allocators (linear, stack, pool, free list) ","externalUrl":null,"permalink":"/features/low-level/","section":"Features","summary":" Fully C++11-compliant codebase High-precision monotonic timers Atomic counters with multiple memory orders Thread creation, synchronization, and affinity control Lightweight math library for vectors, matrices, and quaternions Flexible logging system with console and file output FileSystem API for querying and manipulating paths, files, and directories Custom memory allocators (linear, stack, pool, free list) ","title":"Low-Level","type":"features"},{"content":" Run with Emscripten GitHub A test for the loading system of all types of resources: textures, sounds, fonts, Lua scripts, and shaders.\nControls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface Pressing CTRL + H on the keyboard will show or hide the ImGui interface Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-loading/","section":"Examples","summary":" Run with Emscripten GitHub A test for the loading system of all types of resources: textures, sounds, fonts, Lua scripts, and shaders.\n","title":"apptest_loading","type":"examples"},{"content":" Custom containers: arrays, lists, hashmaps, hashsets, sparse sets Forward and reverse iterators for containers and strings Unique and shared pointer implementations STL-like algorithm and method naming for easy adoption ","externalUrl":null,"permalink":"/features/template-library/","section":"Features","summary":" Custom containers: arrays, lists, hashmaps, hashsets, sparse sets Forward and reverse iterators for containers and strings Unique and shared pointer implementations STL-like algorithm and method naming for easy adoption ","title":"Template Library","type":"features"},{"content":" Run with Emscripten GitHub By default, this test will load the example script.lua but you can supply another script as the first parameter when launching it on the command line.\nWhen running on a platform with writable files, the loaded script can be edited, reloaded, and executed again with the changes.\nControls Press the left or the right mouse buttons to set the positions of the sprites Press V to toggle the screen blur using viewports and custom shaders Press the Back button on the gamepad to enable or disable the vibration, if available Pressing the left/right trigger when vibration is enabled, will vibrate the left/right motor Pressing F on the keyboard will toggle full screen Pressing F5 or 5 on the keyboard will reload the same script Pressing CTRL + H on the keyboard will show or hide the ImGui interface Pressing P on the keyboard or Start on the gamepad will pause the application Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-lua/","section":"Examples","summary":" Run with Emscripten GitHub By default, this test will load the example script.lua but you can supply another script as the first parameter when launching it on the command line.\n","title":"apptest_lua","type":"examples"},{"content":" CPU and GPU zone profiling Plot custom values (vertices, render commands, etc.) Call stack collection support Memory profiling via overloaded new/delete Lua script zone markers ","externalUrl":null,"permalink":"/features/tracy/","section":"Features","summary":" CPU and GPU zone profiling Plot custom values (vertices, render commands, etc.) Call stack collection support Memory profiling via overloaded new/delete Lua script zone markers ","title":"Tracy Instrumentation","type":"features"},{"content":" Run with Emscripten GitHub This test shows you how to pass data between the C++ application and a Lua script with ad-hoc custom tables.\nIt also shows how to hot-reload a script to update the parameters of your program without recompiling or restarting it.\nControls Pressing the left button and dragging the mouse around will move the particle system Pressing F5 or 5 on the keyboard will reload the same script with a different parameter that will result in different particle colors Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-luareload/","section":"Examples","summary":" Run with Emscripten GitHub This test shows you how to pass data between the C++ application and a Lua script with ad-hoc custom tables.\n","title":"apptest_luareload","type":"examples"},{"content":" Platforms: Linux, Windows, macOS, Android, and Emscripten Tested on Raspberry Pi 4B, Android TV, Android Wear, Chrome, and Firefox Compilers: GCC, Clang, Apple Clang, MSVC, MinGW-w64, and Emscripten Build options: static or dynamic library, CMake-based scripts Packages: Windows and macOS installers, Arch Linux and MSYS2 pacman packages Android asset files support for streamlined mobile integration ","externalUrl":null,"permalink":"/features/cross-platform/","section":"Features","summary":" Platforms: Linux, Windows, macOS, Android, and Emscripten Tested on Raspberry Pi 4B, Android TV, Android Wear, Chrome, and Firefox Compilers: GCC, Clang, Apple Clang, MSVC, MinGW-w64, and Emscripten Build options: static or dynamic library, CMake-based scripts Packages: Windows and macOS installers, Arch Linux and MSYS2 pacman packages Android asset files support for streamlined mobile integration ","title":"Cross-Platform","type":"features"},{"content":" Run with Emscripten GitHub This test shows one big MeshSprite object being deformed and animated.\nYou can choose between three types of deformations and three different animations, or deform it freely with the mouse, the touch, or the gamepad.\nControls Pressing A or the left arrow on the keyboard, clicking or tapping the left half of the screen, or pressing the left gamepad bumper will change the deformation Pressing D or the right arrow on the keyboard, clicking or tapping the right half of the screen, or pressing the right gamepad bumper will change the animation Pressing B on the keyboard or A on the gamepad will toggle batching Pressing C on the keyboard or B on the gamepad will toggle culling Pressing P on the keyboard or Start on the gamepad will pause the application Pressing Escape on the keyboard or Guide on the gamepad will quit the application ","externalUrl":null,"permalink":"/examples/apptest-meshdeform/","section":"Examples","summary":" Run with Emscripten GitHub This test shows one big MeshSprite object being deformed and animated.\n","title":"apptest_meshdeform","type":"examples"},{"content":" Unit testing with Google Test and coverage reports via Gcovr Microbenchmarking with Google Benchmark Automated documentation with Doxygen and LDoc Static and runtime analysis with Cppcheck and Valgrind Consistent code style enforced with clang-format ","externalUrl":null,"permalink":"/features/dev-tools/","section":"Features","summary":" Unit testing with Google Test and coverage reports via Gcovr Microbenchmarking with Google Benchmark Automated documentation with Doxygen and LDoc Static and runtime analysis with Cppcheck and Valgrind Consistent code style enforced with clang-format ","title":"Development Tools","type":"features"},{"content":" Run with Emscripten GitHub The test shows the same scene using regular Sprite objects with blending, or with MeshSprite objects composed of an inner opaque part and a transparent border.\nControls Pressing B on the keyboard or A on the gamepad will toggle batching Pressing C on the keyboard or B on the gamepad will toggle culling Pressing T on the keyboard or X on the gamepad will toggle between individual textures and a texture atlas (more chances for batching) Pressing V on the keyboard or the right bumper on the gamepad will toggle between simulating a camera by moving sprites in the opposite direction or using a Viewport and a Camera objects Pressing M on the keyboard or the left bumper on the gamepad will toggle between using Sprite or MeshSprite objects Pressing P on the keyboard or Start on the gamepad will pause the application Pressing 1, 2, 3, 4, or 8 will progressively animate fewer sprites Pressing R on the keyboard or Y on the gamepad, or double-clicking or double-tapping will reset the camera zoom Pressing F on the keyboard will toggle full screen Pressing Escape on the keyboard or Guide on the gamepad will quit the application ","externalUrl":null,"permalink":"/examples/apptest-meshsprites/","section":"Examples","summary":" Run with Emscripten GitHub The test shows the same scene using regular Sprite objects with blending, or with MeshSprite objects composed of an inner opaque part and a transparent border.\n","title":"apptest_meshsprites","type":"examples"},{"content":" GitHub On Android or a laptop with a touch screen, this test will show you the position of your fingers on the screen.\nControls Use the touch screen to tap with multiple fingers. Pressing Escape on the keyboard will quit the application.\n","externalUrl":null,"permalink":"/examples/apptest-multitouch/","section":"Examples","summary":" GitHub On Android or a laptop with a touch screen, this test will show you the position of your fingers on the screen.\n","title":"apptest_multitouch","type":"examples"},{"content":" Run with Emscripten GitHub A test that shows a particle emitter with some preset affectors and emitting particles.\nIf the nCine has been compiled with ImGui some options can be tweaked with an interface.\nControls Pressing W/A/S/D, dragging while pressing the left mouse button, touching with one finger, or moving the left gamepad stick will move the particle emitter Pressing the arrow keys, dragging while pressing the right mouse button, touching with two fingers, or moving the right gamepad stick will move the emission direction Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface Pressing CTRL + H on the keyboard or Back on the gamepad will show or hide the ImGui interface Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-particles/","section":"Examples","summary":" Run with Emscripten GitHub A test that shows a particle emitter with some preset affectors and emitting particles.\n","title":"apptest_particles","type":"examples"},{"content":" Run with Emscripten GitHub A very simple test showing a bunch of sprites rotating, zooming, and moving around while maintaining a square formation.\nControls Pressing B on the keyboard or A on the gamepad will toggle batching Pressing C on the keyboard or B on the gamepad will toggle culling Pressing the left bumper on the gamepad, or the left mouse button, or tapping the screen with one finger will pause sprites rotation Pressing the right bumper on the gamepad, or the right mouse button, or tapping the screen with two fingers will pause the square sprites formation Pressing F on the keyboard will toggle full screen Pressing P on the keyboard or Start on the gamepad will pause both the sprite rotation and the square formation Pressing Escape on the keyboard or Guide on the gamepad will quit the application ","externalUrl":null,"permalink":"/examples/apptest-rotozoom/","section":"Examples","summary":" Run with Emscripten GitHub A very simple test showing a bunch of sprites rotating, zooming, and moving around while maintaining a square formation.\n","title":"apptest_rotozoom","type":"examples"},{"content":" Run with Emscripten GitHub A test showing nCine support for the window scale factor of a monitor.\nYou can drag around the window on a monitor with a different scale factor to see it automatically resized.\nControls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface Pressing 1, 2, 3, or 4 will center the window on the first, second, third or fourth monitor Pressing 5, 6, 7, or 8 will go full screen on the first, second, third or fourth monitor Pressing CTRL + H on the keyboard will show or hide the ImGui interfaces Pressing F on the keyboard will toggle full screen Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-scaling/","section":"Examples","summary":" Run with Emscripten GitHub A test showing nCine support for the window scale factor of a monitor.\n","title":"apptest_scaling","type":"examples"},{"content":" Run with Emscripten GitHub A test that shows the custom shaders API and how to do post-processing with viewports. You will see regular sprites, mesh sprites, and some multi-textured normal mapped sprites, all using custom shaders and with batching!\nThe ImGui interface will allow you to tweak the lighting parameters for normal mapped sprites and change the post-processing between bloom (using multiple render targets and downsampling) and a separable Gaussian blur.\nVideo Controls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface Dragging the mouse while pressing the left button, touching with one finger, or moving the left gamepad stick will move the light Pressing B on the keyboard or A on the gamepad will toggle batching Pressing C on the keyboard or B on the gamepad will toggle culling Pressing T on the keyboard or X on the gamepad will toggle between individual textures and a texture atlas (more chances for batching) Pressing Y on the gamepad will reset the light position to the center of the screen Pressing R on the keyboard will toggle between the original and the custom shader for regular and mesh sprites Pressing V on the keyboard will toggle between different no post-processing and blur Pressing L on the keyboard will toggle between different no post-processing and bloom Pressing the right bumper on the gamepad will cycle between no post-processing, blur, and bloom Pressing 1, 2, or 3 will change the number of blur passes in post-processing Pressing CTRL + H on the keyboard will show or hide the ImGui interface Pressing F on the keyboard will toggle full screen Pressing P on the keyboard or Start on the gamepad will pause the application Pressing Escape on the keyboard or Guide on the gamepad will quit the application ","externalUrl":null,"permalink":"/examples/apptest-shaders/","section":"Examples","summary":" Run with Emscripten GitHub A test that shows the custom shaders API and how to do post-processing with viewports. You will see regular sprites, mesh sprites, and some multi-textured normal mapped sprites, all using custom shaders and with batching!\n","title":"apptest_shaders","type":"examples"},{"content":" Run with Emscripten GitHub This test was made while researching Intel and ARM Neon SIMD intrinsics and their performance.\nThe branch with intrinsics was not merged back as auto-vectorization seemed fast enough, while this benchmark was added to the rest of the tests.\nControls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-simdbench/","section":"Examples","summary":" Run with Emscripten GitHub This test was made while researching Intel and ARM Neon SIMD intrinsics and their performance.\n","title":"apptest_simdbench","type":"examples"},{"content":" Run with Emscripten GitHub A small homage to old-skool demoscene sine scrollers, with letters forming a message and bouncing in a sine wave.\nControls Pressing B on the keyboard or A on the gamepad will toggle batching Pressing I on the keyboard or X on the gamepad will toggle batching with indices Pressing F on the keyboard will toggle full screen Pressing P on the keyboard or Start on the gamepad will pause the application Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-sinescroller/","section":"Examples","summary":" Run with Emscripten GitHub A small homage to old-skool demoscene sine scrollers, with letters forming a message and bouncing in a sine wave.\n","title":"apptest_sinescroller","type":"examples"},{"content":" Run with Emscripten GitHub This is a test for different texture format loaders, especially for GPU compressed formats (like ASTC, DXT, or ETC), and for container formats (like PVR, KTX, or DDS).\nControls Pressing the left/right or A/D keys, clicking or touching the screen on the left or right side, moving the left gamepad stick left/right, pressing the D-pad left/right, or using the bumpers will change the texture Pressing the up/down or W/S keys, clicking or touching the screen on the upper or lower side, moving the left gamepad stick up/down will change the MIP level Pressing Escape on the keyboard or Guide on the gamepad will quit the application ","externalUrl":null,"permalink":"/examples/apptest-texformats/","section":"Examples","summary":" Run with Emscripten GitHub This is a test for different texture format loaders, especially for GPU compressed formats (like ASTC, DXT, or ETC), and for container formats (like PVR, KTX, or DDS).\n","title":"apptest_texformats","type":"examples"},{"content":" Run with Emscripten GitHub This is a test for the Viewport and Camera classes. It shows multiple viewports arranged in a vertical split screen and with picture-in-picture.\nYou can tweak both the viewport and the camera parameters with an ImGui interface.\nControls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface Pressing W/A/S/D, dragging while pressing the left mouse button, touching with one finger, or moving the left gamepad stick will pan the camera Pressing the left/right arrow keys, dragging horizontally while pressing the right mouse button or touching with two fingers, or moving the right gamepad stick left/right will rotate the camera Pressing the up/down arrow keys, dragging vertically while pressing the right mouse button or touching with two fingers, or moving the right gamepad stick up/down will zoom the camera Scrolling the mouse wheel will also zoom the camera Pressing R or double-clicking will reset the camera position, rotation, and scale Pressing B on the keyboard will toggle batching Pressing C on the keyboard will toggle culling Pressing I on the keyboard will enable or disable the mouse input Pressing CTRL + H on the keyboard will show or hide the ImGui interface Pressing F on the keyboard will toggle full screen Pressing P will pause the application Pressing Escape on the keyboard will quit the application ","externalUrl":null,"permalink":"/examples/apptest-viewports/","section":"Examples","summary":" Run with Emscripten GitHub This is a test for the Viewport and Camera classes. It shows multiple viewports arranged in a vertical split screen and with picture-in-picture.\n","title":"apptest_viewports","type":"examples"},{"content":" Run with Emscripten GitHub This test is only available when the nCine is built as a static library and it uses the OpenGL API layer directly, bypassing the scenegraph and the sprite systems.\nControls Pressing the left bumper on the gamepad, or the left mouse button, or tapping the screen with one finger will pause the triangle animation Pressing the right bumper on the gamepad, or the right mouse button, or tapping the screen with two fingers will pause the cube animation Pressing F on the keyboard will toggle full screen Pressing P on the keyboard or Start on the gamepad will pause both the triangle and the cube animations Pressing Escape on the keyboard or Guide on the gamepad will quit the application ","externalUrl":null,"permalink":"/examples/glapptest-fbo-cube/","section":"Examples","summary":" Run with Emscripten GitHub This test is only available when the nCine is built as a static library and it uses the OpenGL API layer directly, bypassing the scenegraph and the sprite systems.\n","title":"glapptest_fbo_cube","type":"examples"},{"content":" Data-oriented ECS for parallel entity updates System-agnostic rendering API with Vulkan backend Additional backends: Metal, DirectX 12, WebGPU iOS platform support Cross-platform editor built with Dear ImGui 2D skeletal animation system ","externalUrl":null,"permalink":"/features/roadmap/","section":"Features","summary":" Data-oriented ECS for parallel entity updates System-agnostic rendering API with Vulkan backend Additional backends: Metal, DirectX 12, WebGPU iOS platform support Cross-platform editor built with Dear ImGui 2D skeletal animation system ","title":"Long-Term Roadmap","type":"features"},{"content":"nCine is a cross-platform 2D game engine focused on performance, written in C++11 and scriptable with Lua. In active development since June 2011, nCine is released under the MIT license.\nVisit the Donate page to discover different ways to support the project.\nGetting Started GitHub Discord Windows macOS 15 (AppleSilicon) Linux All Platforms The video below shows a carousel of games, tools, and projects. More can be found in the Gallery section.\n","date":"1 January 2026","externalUrl":null,"permalink":"/","section":"","summary":"nCine is a cross-platform 2D game engine focused on performance, written in C++11 and scriptable with Lua. In active development since June 2011, nCine is released under the MIT license.\n","title":"","type":"page"},{"content":" May 2026 Breaking Changes Renamed all occurrences of \u0026ldquo;FullScreen\u0026rdquo; to \u0026ldquo;Fullscreeen\u0026rdquo; and of \u0026ldquo;fullScreen\u0026rdquo; to \u0026ldquo;fullscreen\u0026rdquo; in all interested methods Renamed \u0026ldquo;full_screen\u0026rdquo; to \u0026ldquo;fullscreen\u0026rdquo; in the Lua app_configuration table Renamed nctl::PointerMath::subtract() to distance() when used between pointers Most app configuration environment variables (AppCfg EnvVars) have been renamed Improvements The values in the AppConfiguration C++ class and the Lua app_configuration table have been splitted in substructures/subtables The version of the integrated ImGui has been updated to v1.92.8 April 2026 Improvements Added support for Lua 5.5 The version of the integrated ImGui has been updated to v1.92.7 March 2026 Improvements Refactor all iterators to respect STL-style invariants Add support for std::initializer_list to nCTL containers Add a new Pair and Span classes that works similarly to their STL counterparts Fix self-assignment with StaticHashMap and StaticHashSet classes It\u0026rsquo;s now possible to access some nCine and project version strings as numbers in the VersionNumbers struct The fast-hash algorithm has been improved and it\u0026rsquo;s now used by default for all hashmap and hashset classes February 2026 Breaking Changes Renamed ITextureLoader and ITextureSaver to IImageLoader and IImageSaver Png and WebP sub-classes have also been Renamed Improvements The version of the integrated ImGui has been updated to v1.92.6 Added a Lua utility class to manipulate non-float color objects (nc::Color class) January 2026 Improvements Dependency libraries are now copied in all nCine and project artifacts for MinGW Add a new Optional class to nCTL that works similarly to std::optional ","date":"1 January 2026","externalUrl":null,"permalink":"/changelog/year_2026/","section":"Changelog","summary":"May 2026 Breaking Changes Renamed all occurrences of “FullScreen” to “Fullscreeen” and of “fullScreen” to “fullscreen” in all interested methods Renamed “full_screen” to “fullscreen” in the Lua app_configuration table Renamed nctl::PointerMath::subtract() to distance() when used between pointers Most app configuration environment variables (AppCfg EnvVars) have been renamed Improvements The values in the AppConfiguration C++ class and the Lua app_configuration table have been splitted in substructures/subtables The version of the integrated ImGui has been updated to v1.92.8 April 2026 Improvements Added support for Lua 5.5 The version of the integrated ImGui has been updated to v1.92.7 March 2026 Improvements Refactor all iterators to respect STL-style invariants Add support for std::initializer_list to nCTL containers Add a new Pair and Span classes that works similarly to their STL counterparts Fix self-assignment with StaticHashMap and StaticHashSet classes It’s now possible to access some nCine and project version strings as numbers in the VersionNumbers struct The fast-hash algorithm has been improved and it’s now used by default for all hashmap and hashset classes February 2026 Breaking Changes Renamed ITextureLoader and ITextureSaver to IImageLoader and IImageSaver Png and WebP sub-classes have also been Renamed Improvements The version of the integrated ImGui has been updated to v1.92.6 Added a Lua utility class to manipulate non-float color objects (nc::Color class) January 2026 Improvements Dependency libraries are now copied in all nCine and project artifacts for MinGW Add a new Optional class to nCTL that works similarly to std::optional ","title":"2026","type":"changelog"},{"content":"The breaking changes, the improvements, and the new features introduced year by year to the nCine.\n","date":"1 January 2026","externalUrl":null,"permalink":"/changelog/","section":"Changelog","summary":"The breaking changes, the improvements, and the new features introduced year by year to the nCine.\n","title":"Changelog","type":"changelog"},{"content":"","date":"5 November 2025","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"5 November 2025","externalUrl":null,"permalink":"/categories/news/","section":"Categories","summary":"","title":"News","type":"categories"},{"content":"","date":"5 November 2025","externalUrl":null,"permalink":"/news/","section":"News","summary":"","title":"News","type":"news"},{"content":"Starting today, all nCine-related repositories will feature verified commits on GitHub.\nThis allows anyone to confirm that changes to the codebase are authentic and originate from the project maintainer. The signing key is published on the site and can be found at the following page: GnuPG Public Key.\nThe associated private subkeys are stored on a hardware security token (a YubiKey 5C NFC), which ensures that the signing keys cannot be copied or extracted from the device.\nThis is part of an ongoing effort to strengthen the project\u0026rsquo;s supply chain integrity and provide long-term trust in the history of the repositories.\n","date":"5 November 2025","externalUrl":null,"permalink":"/news/2025-11-05-signed-commits/","section":"News","summary":"Starting today, all nCine-related repositories will feature verified commits on GitHub.\nThis allows anyone to confirm that changes to the codebase are authentic and originate from the project maintainer. The signing key is published on the site and can be found at the following page: GnuPG Public Key.\n","title":"Signed Commits","type":"news"},{"content":"After many years with Jekyll and the Beautiful Jekyll theme by Dean Attali, the nCine official site gets a revamp thanks to Hugo and powered by the Blowfish theme by Nuno Coração. \u0026#x1f680;\nThe move brings faster builds, more flexibility, and a cleaner design. You\u0026rsquo;ll also find improved navigation, better support for images and charts, and dark mode out of the box.\n","date":"28 September 2025","externalUrl":null,"permalink":"/news/2025-09-28-new-site/","section":"News","summary":"After many years with Jekyll and the Beautiful Jekyll theme by Dean Attali, the nCine official site gets a revamp thanks to Hugo and powered by the Blowfish theme by Nuno Coração. 🚀\n","title":"A New Site","type":"news"},{"content":"","date":"22 September 2025","externalUrl":null,"permalink":"/categories/dev-update/","section":"Categories","summary":"","title":"Dev Update","type":"categories"},{"content":"","date":"30 June 2025","externalUrl":null,"permalink":"/showcase_tags/emscripten/","section":"Showcase_tags","summary":"","title":"Emscripten","type":"showcase_tags"},{"content":"This page lists some of the nCine games, tools, and projects.\nMost of them are available on the web using Emscripten.\n","date":"30 June 2025","externalUrl":null,"permalink":"/gallery/","section":"Gallery","summary":"This page lists some of the nCine games, tools, and projects.\nMost of them are available on the web using Emscripten.\n","title":"Gallery","type":"gallery"},{"content":"","date":"30 June 2025","externalUrl":null,"permalink":"/showcase_tags/game/","section":"Showcase_tags","summary":"","title":"Game","type":"showcase_tags"},{"content":"","date":"30 June 2025","externalUrl":null,"permalink":"/tags/game/","section":"Tags","summary":"","title":"Game","type":"tags"},{"content":"","date":"30 June 2025","externalUrl":null,"permalink":"/showcase_tags/jam/","section":"Showcase_tags","summary":"","title":"Jam","type":"showcase_tags"},{"content":"","date":"30 June 2025","externalUrl":null,"permalink":"/tags/jam/","section":"Tags","summary":"","title":"Jam","type":"tags"},{"content":"","date":"30 June 2025","externalUrl":null,"permalink":"/tags/project/","section":"Tags","summary":"","title":"Project","type":"tags"},{"content":"","date":"30 June 2025","externalUrl":null,"permalink":"/showcase_tags/","section":"Showcase_tags","summary":"","title":"Showcase_tags","type":"showcase_tags"},{"content":"","date":"30 June 2025","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"Showcase projects or tests with videos.\n","date":"30 June 2025","externalUrl":null,"permalink":"/showcase_tags/video/","section":"Showcase_tags","summary":"Showcase projects or tests with videos.\n","title":"Videos","type":"showcase_tags"},{"content":" Run with Emscripten GitHub Itch.io Windows macOS 15 (AppleSilicon) Linux All Platforms Wet Paper is an improved version of the Global Game Jam 2025 game made with the nCine. You can read more about it on its website.\nVideos Controls Menu Navigation ​Skip Splashscreen: Escape key or Start button on a gamepad Move in Menu: Arrow keys, D-Pad, or left stick on first gamepad Select Menu Entry: Enter key or A button on first gamepad Go Back: Escape key, B button, or Back button on first gamepad Other Pause/Unpause: Escape key or Start button on any gamepad during game (This action cannot be remapped)​ Player 1 (Keyboard or Gamepad 0) Move Left: A key or left stick left ​_Move Right_: D key or left stick right ​_Jump_: W key or A button ​ - Dash: S key or B button Player 2 (Keyboard or Gamepad 1) ​Move Left: Left arrow key or left stick left ​ - Move Right: Right arrow key or left stick right Jump: Up arrow key or A button Dash: Down arrow key or B button​​​ You can remap all player actions from the Controls menu in-game.\n","date":"30 June 2025","externalUrl":null,"permalink":"/gallery/wet-paper/","section":"Gallery","summary":" Run with Emscripten GitHub Itch.io Windows macOS 15 (AppleSilicon) Linux All Platforms Wet Paper is an improved version of the Global Game Jam 2025 game made with the nCine. You can read more about it on its website.\n","title":"Wet Paper","type":"gallery"},{"content":"The complete source code and game data for Wet Paper are now available on GitHub!\nYou can also play it online and watch a video on the Videos page.\nThe game has seen many improvements since its original Global Game Jam 2025 submission:\nThe codebase has been substantially cleaned up, making it a great starting point for learning the nCine API. The ImGui debug interface has been rewritten to be more consistent and useful. A (skippable) splash screen now welcomes you with the nCine logo. 😉 You can play with a friend, just like in the original version, or go solo. A proper menu system has been added, fully navigable via keyboard or gamepad. Controls are fully rebindable — assign any key or gamepad button to your preferred actions. Game settings are saved on exit and reloaded on startup. Match statistics are now saved while you play. Bubbles feature a custom refraction shader, and the game view blurs when paused. Music now plays both in the menus and during gameplay. Gamepads will vibrate when you pop a bubble! Wet Paper ","date":"30 June 2025","externalUrl":null,"permalink":"/news/2025-06-30-wet-paper/","section":"News","summary":"The complete source code and game data for Wet Paper are now available on GitHub!\nYou can also play it online and watch a video on the Videos page.\n","title":"Wet Paper","type":"news"},{"content":"","date":"5 June 2025","externalUrl":null,"permalink":"/tags/presentation/","section":"Tags","summary":"","title":"Presentation","type":"tags"},{"content":"On June 5th I attended /dev/games, a two-day game development conference held in Rome.\nI gave a talk about my 14-year journey developing nCine, sharing both challenges and achievements, and diving into a selection of technical details.\nYou can check out the interactive slides made with Sli.dev, or download the PDF version.\nA video recording will be available in the coming months on the conference\u0026rsquo;s official YouTube channel.\nPresenting at /dev/games 2025 ","date":"5 June 2025","externalUrl":null,"permalink":"/news/2025-06-05-dev-games-2025/","section":"News","summary":"On June 5th I attended /dev/games, a two-day game development conference held in Rome.\nI gave a talk about my 14-year journey developing nCine, sharing both challenges and achievements, and diving into a selection of technical details.\n","title":"Presented at /dev/games","type":"news"},{"content":"On June 5th I attended /dev/games, a two-day game development conference held in Rome.\nNow, after five months, the recording of the talk about my 14-year journey developing nCine, has been published on YouTube on the official conference channel.\nYou can check out online the slides or download a PDF version.\n","date":"5 June 2025","externalUrl":null,"permalink":"/news/2025-11-19-dev-games-2025-video/","section":"News","summary":"On June 5th I attended /dev/games, a two-day game development conference held in Rome.\nNow, after five months, the recording of the talk about my 14-year journey developing nCine, has been published on YouTube on the official conference channel.\n","title":"Video from /dev/games","type":"news"},{"content":"","date":"11 May 2025","externalUrl":null,"permalink":"/tags/documentation/","section":"Tags","summary":"","title":"Documentation","type":"tags"},{"content":"It has been only a bunch of days since JetBrains announced that its C++ IDE is now free for non-commercial use.\nTo celebrate for this happy news, the wiki has now an article showing how to setup the IDE to work with the nCine and its projects!\nCLion hits a breakpoint in ncPong ","date":"11 May 2025","externalUrl":null,"permalink":"/news/2025-05-11-getting-started-clion/","section":"News","summary":"It has been only a bunch of days since JetBrains announced that its C++ IDE is now free for non-commercial use.\n","title":"Getting Started with CLion","type":"news"},{"content":"","date":"27 January 2025","externalUrl":null,"permalink":"/tags/community/","section":"Tags","summary":"","title":"Community","type":"tags"},{"content":"This past weekend me and Cominu have participated to the Global Game Jam 2025 in Granada. I was there as both a jammer and an official sponsor with the nCine! \u0026#x1f4aa;\nWith the help of two graphic artists we put together a nice little game made with the nCine, called Papel Mojado.\nIn the live video from the jam location you can see both a short presentation of our game and me giving away an nCine mug as a sponsor price :D\nPapel Mojado ","date":"27 January 2025","externalUrl":null,"permalink":"/news/2025-01-27-ncine-global-game-jam-2025/","section":"News","summary":"This past weekend me and Cominu have participated to the Global Game Jam 2025 in Granada. I was there as both a jammer and an official sponsor with the nCine! 💪\n","title":"nCine at the GGJ 2025","type":"news"},{"content":"","date":"26 January 2025","externalUrl":null,"permalink":"/showcase_tags/community/","section":"Showcase_tags","summary":"","title":"Community","type":"showcase_tags"},{"content":" GGJ Entry Papel Mojado is the original Global Game Jam 2025 entry made by Encelo and Cominu. The revamped version is called Wet Paper.\n","date":"26 January 2025","externalUrl":null,"permalink":"/gallery/papel-mojado/","section":"Gallery","summary":" GGJ Entry Papel Mojado is the original Global Game Jam 2025 entry made by Encelo and Cominu. The revamped version is called Wet Paper.\n","title":"Papel Mojado","type":"gallery"},{"content":" December 2025 Breaking Changes Removed FIXED_CAPACITY mode from the String class Improvements Added a new StringView class to operate over C-style character arrays The small size optimization for strings now works for strings of 24 characters long It\u0026rsquo;s now possible to set the resizable flag of a window after it has been created Dependency libraries are now copied in all nCine and project artifacts for Linux The version of the integrated Tracy has been updated to v0.13.1 New Features Added an option to compile a smaller version of the nCine library by removing support for the scenegraph November 2025 New Features The job_system branch has been finally merged into master Improvements The version of the integrated ImGui has been updated to v1.92.5 The version of the integrated Tracy has been updated to v0.13.0 October 2025 Improvements The version of the integrated ImGui has been updated to v1.92.4 September 2025 Improvements The version of the integrated ImGui has been updated to v1.92.3 Using FindFirstFileExA with FindExInfoBasic and FIND_FIRST_EX_LARGE_FETCH for faster directory traversal on Windows Fixes Fixed self-assignment in some move assignment operators August 2025 Breaking Changes Trying to change the capacity of an Array with ArrayMode::FIXED_CAPACITY will trigger a fatal assert Renamed Thread::yieldExecution to ThisThread::yield New Features Added a multi-threaded job system that is accessible to the user Improvements Added kernel and user-space semaphores to the thread synchronization primitives Added a new ThisThread namespace for functions only available from the calling thread Added atomic classes for unsigned integer types Added thread and signal fences, and acq_rel memory order The Array class now better supports non-movable and non-copyable types The version of the integrated ImGui has been updated to v1.92.2b July 2025 New Features Added an integration with Google Crashpad for crash reporting Improvements Added CMake options to extract and install debug symbols The version of the integrated ImGui has been updated to v1.92.1 The version of the integrated Tracy has been updated to v0.12.2 apptest_filebrowser now has a directory history and related navigation buttons Fixes CMake version variables for projects have been fixed June 2025 Breaking Changes Inverted the order of the values in all Atomic*::cmpExchange() methods New Features Add a set of environment variables to override all the user configurable compile-time variables in AppConfiguration Improvements The version of the integrated Tracy has been updated to v0.12.1 The version of the RenderDoc in-application API has been updated to v1.6.0 The version of the integrated Google Test has been updated to v1.17.0 The version of the integrated Google Benchmark has been updated to v1.9.4 April 2025 Breaking Changes Renamed nc.input.joymapped_state() Lua function to nc.input.joy_mapped_state() New Features Added support for joystick vibration (also in the Lua API) Improvements Added two new dirty bits for GPU data upload of SceneNode properties The Node Inspector in the ImGui debug overlay shows clearer information for viewports Fixes Culled drawable nodes will not waste time with transformations on every frame The OpenGL debug group for viewports has been fixed Viewports will only clear the available attachments (no depth/stencil clear if not specified in the format) March 2025 Breaking Changes apptest_scene has been renamed to apptest_gui Renamed SceneNode::setColor(Colorf color) to setColorF() Renamed IInputManager::joystickState() to IInputManager::joyState() Improvements The version of the integrated ImGui has been updated to v1.91.9b Added the TimeStamp::toNow() method to set a timestamp object counter to the current clock value Added support for joystick vibration on SDL2 and Android Fixes Fixed the return value of SceneNode::alpha() and SceneNode::absAlpha() February 2025 Breaking Changes Removed isLeftButtonDown(), isMiddleButtonDown(), isRightButtonDown(), isFourthButtonDown(), isFifthButtonDown() from the MouseState class Use the new isButtonDown(MouseButton button) method or the ncine.input.is_mouse_button_down() Lua function instead Removed isLeftButton(), isMiddleButton(), isRightButton(), isFourthButton(), isFifthButton() from the MouseEvent class Use the new button field of the MouseEvent class and compare values with the MouseButton enumeration Renamed ncine.input.key_down() to ncine.input.is_key_down() in the Lua API Renamed isButtonPressed() to isButtonDown() in both JoystickState and JoyMappedState classes Renamed ncine.input.joy_button_pressed() to ncine.input.is_joy_button_down() Renamed ncine.input.joy_present() to ncine.input.is_joy_present() Renamed ncine.input.joy_mapped() to ncine.input.is_joy_mapped() Renamed Application::interval() to Application::frameTime() Renamed ncine.application.get_interval() to ncine.application.get_frame_time() Renamed IFrameTimer::lastFrameDuration() and IFrameTimer::currentFrameDuration() to IFrameTimer::lastFrameTime() and IFrameTimer::currentFrameTime() Renamed ncine.frame_timer.last_frame_duration() to ncine.frame_timer.last_frame_time() Renamed ncine.frame_timer.current_frame_duration() to ncine.frame_timer.current_frame_time() Improvements Added new isButtonPressed()/isButtonReleased() methods to the MouseState class to detect the frame when a button is pressed/released Also added is_mouse_button_pressed()/is_mouse_button_released() functions to the Lua input table Added new isKeyPressed()/isKeyReleased() methods to the KeyboardState class to detect the frame when a key is pressed/released Also added is_key_pressed()/is_key_released() functions to the Lua input table Added new isButtonPressed()/isButtonReleased() methods to the JoystickState and JoyMappedState classes to detect the frame when a button is pressed/released Also added is_joy_button_pressed()/is_joy_button_released() functions to the Lua input table Added various utility constructors and conversion methods for the rectangle and vector classes Added a NCPROJECT_DEBUG compiler definition for when projects are compiled in debug Added a new NCPROJECT_ALWAYS_FIND_PACKAGES that can be useful when creating a Linux package with a dynamic nCine library The version of the integrated ImGui has been updated to v1.91.8 The version of the integrated Google Test has been updated to v1.16.0 January 2025 Improvements Script and callbacks errors are now shown on screen in apptest_lua/ncinelua Added tabular character support to the TextNode class, with configurable tab size (also in the Lua API) Implemented introspective sort for render queues, making the sorting faster and more robust ","date":"1 January 2025","externalUrl":null,"permalink":"/changelog/year_2025/","section":"Changelog","summary":"December 2025 Breaking Changes Removed FIXED_CAPACITY mode from the String class Improvements Added a new StringView class to operate over C-style character arrays The small size optimization for strings now works for strings of 24 characters long It’s now possible to set the resizable flag of a window after it has been created Dependency libraries are now copied in all nCine and project artifacts for Linux The version of the integrated Tracy has been updated to v0.13.1 New Features Added an option to compile a smaller version of the nCine library by removing support for the scenegraph November 2025 New Features The job_system branch has been finally merged into master Improvements The version of the integrated ImGui has been updated to v1.92.5 The version of the integrated Tracy has been updated to v0.13.0 October 2025 Improvements The version of the integrated ImGui has been updated to v1.92.4 September 2025 Improvements The version of the integrated ImGui has been updated to v1.92.3 Using FindFirstFileExA with FindExInfoBasic and FIND_FIRST_EX_LARGE_FETCH for faster directory traversal on Windows Fixes Fixed self-assignment in some move assignment operators August 2025 Breaking Changes Trying to change the capacity of an Array with ArrayMode::FIXED_CAPACITY will trigger a fatal assert Renamed Thread::yieldExecution to ThisThread::yield New Features Added a multi-threaded job system that is accessible to the user Improvements Added kernel and user-space semaphores to the thread synchronization primitives Added a new ThisThread namespace for functions only available from the calling thread Added atomic classes for unsigned integer types Added thread and signal fences, and acq_rel memory order The Array class now better supports non-movable and non-copyable types The version of the integrated ImGui has been updated to v1.92.2b July 2025 New Features Added an integration with Google Crashpad for crash reporting Improvements Added CMake options to extract and install debug symbols The version of the integrated ImGui has been updated to v1.92.1 The version of the integrated Tracy has been updated to v0.12.2 apptest_filebrowser now has a directory history and related navigation buttons Fixes CMake version variables for projects have been fixed June 2025 Breaking Changes Inverted the order of the values in all Atomic*::cmpExchange() methods New Features Add a set of environment variables to override all the user configurable compile-time variables in AppConfiguration Improvements The version of the integrated Tracy has been updated to v0.12.1 The version of the RenderDoc in-application API has been updated to v1.6.0 The version of the integrated Google Test has been updated to v1.17.0 The version of the integrated Google Benchmark has been updated to v1.9.4 April 2025 Breaking Changes Renamed nc.input.joymapped_state() Lua function to nc.input.joy_mapped_state() New Features Added support for joystick vibration (also in the Lua API) Improvements Added two new dirty bits for GPU data upload of SceneNode properties The Node Inspector in the ImGui debug overlay shows clearer information for viewports Fixes Culled drawable nodes will not waste time with transformations on every frame The OpenGL debug group for viewports has been fixed Viewports will only clear the available attachments (no depth/stencil clear if not specified in the format) March 2025 Breaking Changes apptest_scene has been renamed to apptest_gui Renamed SceneNode::setColor(Colorf color) to setColorF() Renamed IInputManager::joystickState() to IInputManager::joyState() Improvements The version of the integrated ImGui has been updated to v1.91.9b Added the TimeStamp::toNow() method to set a timestamp object counter to the current clock value Added support for joystick vibration on SDL2 and Android Fixes Fixed the return value of SceneNode::alpha() and SceneNode::absAlpha() February 2025 Breaking Changes Removed isLeftButtonDown(), isMiddleButtonDown(), isRightButtonDown(), isFourthButtonDown(), isFifthButtonDown() from the MouseState class Use the new isButtonDown(MouseButton button) method or the ncine.input.is_mouse_button_down() Lua function instead Removed isLeftButton(), isMiddleButton(), isRightButton(), isFourthButton(), isFifthButton() from the MouseEvent class Use the new button field of the MouseEvent class and compare values with the MouseButton enumeration Renamed ncine.input.key_down() to ncine.input.is_key_down() in the Lua API Renamed isButtonPressed() to isButtonDown() in both JoystickState and JoyMappedState classes Renamed ncine.input.joy_button_pressed() to ncine.input.is_joy_button_down() Renamed ncine.input.joy_present() to ncine.input.is_joy_present() Renamed ncine.input.joy_mapped() to ncine.input.is_joy_mapped() Renamed Application::interval() to Application::frameTime() Renamed ncine.application.get_interval() to ncine.application.get_frame_time() Renamed IFrameTimer::lastFrameDuration() and IFrameTimer::currentFrameDuration() to IFrameTimer::lastFrameTime() and IFrameTimer::currentFrameTime() Renamed ncine.frame_timer.last_frame_duration() to ncine.frame_timer.last_frame_time() Renamed ncine.frame_timer.current_frame_duration() to ncine.frame_timer.current_frame_time() Improvements Added new isButtonPressed()/isButtonReleased() methods to the MouseState class to detect the frame when a button is pressed/released Also added is_mouse_button_pressed()/is_mouse_button_released() functions to the Lua input table Added new isKeyPressed()/isKeyReleased() methods to the KeyboardState class to detect the frame when a key is pressed/released Also added is_key_pressed()/is_key_released() functions to the Lua input table Added new isButtonPressed()/isButtonReleased() methods to the JoystickState and JoyMappedState classes to detect the frame when a button is pressed/released Also added is_joy_button_pressed()/is_joy_button_released() functions to the Lua input table Added various utility constructors and conversion methods for the rectangle and vector classes Added a NCPROJECT_DEBUG compiler definition for when projects are compiled in debug Added a new NCPROJECT_ALWAYS_FIND_PACKAGES that can be useful when creating a Linux package with a dynamic nCine library The version of the integrated ImGui has been updated to v1.91.8 The version of the integrated Google Test has been updated to v1.16.0 January 2025 Improvements Script and callbacks errors are now shown on screen in apptest_lua/ncinelua Added tabular character support to the TextNode class, with configurable tab size (also in the Lua API) Implemented introspective sort for render queues, making the sorting faster and more robust ","title":"2025","type":"changelog"},{"content":"The Lua development experience is getting even better!\nThe documentation already available through the Lua Language Server is now available online, thanks to LDoc.\n","date":"18 December 2024","externalUrl":null,"permalink":"/news/2024-12-18-ldoc-lua-documentation/","section":"News","summary":"The Lua development experience is getting even better!\nThe documentation already available through the Lua Language Server is now available online, thanks to LDoc.\n","title":"LDoc Lua API documentation","type":"news"},{"content":"Today you can find the nCine among the Lua Language Server official addons!\nIf you are using Visual Studio Code, autocomplete, type checking, and full API documentation are only one click away.\nLua development experience should be now on par with other Lua scriptable frameworks, making the whole process more pleasant and functional.\nIf you also install the Local Lua Debugger extension, you should have all the tools needed to create nice games with Lua and the nCine.\nPlease refer to the updated Wiki for more details.\nLua Language Server ","date":"4 December 2024","externalUrl":null,"permalink":"/news/2024-12-04-lua-language-server/","section":"News","summary":"Today you can find the nCine among the Lua Language Server official addons!\nIf you are using Visual Studio Code, autocomplete, type checking, and full API documentation are only one click away.\n","title":"Lua Language Server support","type":"news"},{"content":"SUGO is a new Italian magazine about indie game development in Italy, with a nice impagination derived from traditional medias and distributed as a PDF.\nIn the first issue that just came out today, there is an article I wrote about the story behind nCine development.\nIf you understand Italian grab a copy and let me know what you think!\nSUGO article ","date":"19 October 2024","externalUrl":null,"permalink":"/news/2024-10-19-sugo-magazine/","section":"News","summary":"SUGO is a new Italian magazine about indie game development in Italy, with a nice impagination derived from traditional medias and distributed as a PDF.\n","title":"nCine article in SUGO","type":"news"},{"content":"","date":"19 October 2024","externalUrl":null,"permalink":"/tags/press/","section":"Tags","summary":"","title":"Press","type":"tags"},{"content":"After thirteen years of development and five years on GitHub, the nCine has surpassed one thousand stars! \u0026#x2b50;\nOne thousand stars! ","date":"27 June 2024","externalUrl":null,"permalink":"/news/2024-06-27-one-thousand-stars/","section":"News","summary":"After thirteen years of development and five years on GitHub, the nCine has surpassed one thousand stars! ⭐\nOne thousand stars! ","title":"One thousand stars!","type":"news"},{"content":"There is a new Getting Started guide in the project wiki. It comes with many screenshots, covers both Lua and C++, and it should be easy to follow.\nThe C++ part of the guide targets three different IDEs: Visual Studio 2022, Visual Studio Code, and Qt Creator.\nI have removed any references to the old GitHub releases from the site. I have collated all the changes they introduced in a new Changelog page.\nI have also removed the links to the video tutorials from the wiki, they were deprecated and confusing. The videos have been unlisted from the Youtube channel.\nI hope those changes better reflect the current state of the project and its setup process. \u0026#x1f44c;\n","date":"22 March 2024","externalUrl":null,"permalink":"/news/2024-03-22-getting-started-guide/","section":"News","summary":"There is a new Getting Started guide in the project wiki. It comes with many screenshots, covers both Lua and C++, and it should be easy to follow.\n","title":"Getting started guide","type":"news"},{"content":"Today I gave a presentation for GRInteractiva about in-house custom engines: why they are so important, what are some indie games based on custom technology and, of course, a small overview of the nCine.\nThe slides are made with Remark and are available on GitHub.\nAn attendee also wrote an article in Spanish about the talk. \u0026#x1f609;\nGRInteractiva XII ","date":"6 March 2024","externalUrl":null,"permalink":"/news/2024-03-06-custom-engines-presentation/","section":"News","summary":"Today I gave a presentation for GRInteractiva about in-house custom engines: why they are so important, what are some indie games based on custom technology and, of course, a small overview of the nCine.\n","title":"Custom engines presentation","type":"news"},{"content":" December 2024 Breaking Changes Renamed ncine.audiobuffer to ncine.audio_buffer in the Lua API Renamed ncine.audiobuffer_player to ncine.audio_buffer_player in the Lua API Renamed get_audiobuffer() and set_audiobuffer() to get_audio_buffer() and set_audio_buffer() Renamed ncine.audiostream_player to ncine.audio_stream_player in the Lua API Renamed num_samples_in_streambuffer() and streambuffer_size() to num_samples_in_stream_buffer() and stream_buffer_size() Improvements The version of the integrated ImGui has been updated to v1.91.6 The version of the integrated Google Benchmark has been updated to v1.9.1 The GameController mapping database has been updated to the one in SDL 2.30.10 November 2024 Breaking Changes Renamed permissions() to get_permissions() in the filesystem table of the Lua API Removed the get_ prefix from get_num_vertices(), get_num_bytes(), and get_num_indices() in the mesh sprite Lua functions Improvements Lua statistics are now disabled by default to enable hooking by external debuggers like the Lua Local Debugger The version of the integrated ImGui has been updated to v1.91.5 Multiple additions, fixes, and expansions to the Doxygen documentation Added some new Lua API functions Added input.num_joymappings() to return the number of available mappings for joysticks Added particle_affector.get_base_scale() to return the base scale factor of a size affector Added a constructor overload that takes the position as a vector for animated and mesh sprites Many viewport, shader, and shaderstate Lua functions now return a boolean to indicate the result When calling the Lua particle_system.add_size_affector() function, you can now use a vec2 for the scale factors Fixes Added missing overload constructors for mesh and animated sprites in the Lua API Added some missing button names for mapped joysticks in the Lua API Minimum CMake version has been raised to 3.10 to avoid a deprecation warning Added the missing dpi field to the Lua table returned by gfx_device.get_monitor() Fixed the Lua viewport.set_camera() function to accept nil as a camera parameter Added missing joystick buttons to Lua input event tables October 2024 Improvements Add MemoryFile class constructors that own a memory buffer The version of the integrated ImGui has been updated to v1.91.4 The version of the integrated Google Test has been updated to v1.15.2 The version of the integrated Google Benchmark has been updated to v1.9.0 September 2024 Improvements The version of the integrated ImGui has been updated to v1.91.2 The version of the integrated Tracy has been updated to v0.11.1 Swap deprecated ALooper_pollAll() function for ALooper_pollOnce() on Android July 2024 Improvements The version of the integrated ImGui has been updated to v1.90.9 June 2024 New Features Added many new OpenAL source properties to the audio players Added support for some useful OpenAL extensions pause_device, deferred_updates, source_spatialize Added optional support for EFX effects and filters, also in the Lua API Improvements The sound sources are now arranged in a pool for the players to pick, fixing some issues with playing Handling the OV_HOLE vorbisfile error code by continue decoding instead of fatal asserting Added a stress test mode to apptest_audio Added support for joystick axes mapped as buttons The version of the integrated ImGui has been updated to v1.90.8 The version of the integrated Google Benchmark has been updated to v1.8.4 Fixes Fixed a couple of alignment faults with Emscripten and some apptests April 2024 Breaking Changes Renamed nc::IAudioDevice::PlayerType::AUDIOSTREAM to nc::IAudioDevice::PlayerType::STREAM March 2024 Breaking Changes The freezePlayers()/unfreezePlayers() methods of the audio device have been removed The Lua functions freeze_players()/unfreeze_players() have been removed too February 2024 Improvements Added support for custom memory allocators and window position hints of GLFW 3.4 Some minor changes to the IAllocator methods that handle debug allocation entries The version of the integrated ImGui has been updated to v1.90.4 January 2024 Improvements The version of the integrated ImGui has been updated to v1.90.1 Fixes Fixed compilation when enabling the custom memory allocators Moved Particle.h to public headers to fix compilation warnings The header should not be directly included by users ","date":"1 January 2024","externalUrl":null,"permalink":"/changelog/year_2024/","section":"Changelog","summary":"December 2024 Breaking Changes Renamed ncine.audiobuffer to ncine.audio_buffer in the Lua API Renamed ncine.audiobuffer_player to ncine.audio_buffer_player in the Lua API Renamed get_audiobuffer() and set_audiobuffer() to get_audio_buffer() and set_audio_buffer() Renamed ncine.audiostream_player to ncine.audio_stream_player in the Lua API Renamed num_samples_in_streambuffer() and streambuffer_size() to num_samples_in_stream_buffer() and stream_buffer_size() Improvements The version of the integrated ImGui has been updated to v1.91.6 The version of the integrated Google Benchmark has been updated to v1.9.1 The GameController mapping database has been updated to the one in SDL 2.30.10 November 2024 Breaking Changes Renamed permissions() to get_permissions() in the filesystem table of the Lua API Removed the get_ prefix from get_num_vertices(), get_num_bytes(), and get_num_indices() in the mesh sprite Lua functions Improvements Lua statistics are now disabled by default to enable hooking by external debuggers like the Lua Local Debugger The version of the integrated ImGui has been updated to v1.91.5 Multiple additions, fixes, and expansions to the Doxygen documentation Added some new Lua API functions Added input.num_joymappings() to return the number of available mappings for joysticks Added particle_affector.get_base_scale() to return the base scale factor of a size affector Added a constructor overload that takes the position as a vector for animated and mesh sprites Many viewport, shader, and shaderstate Lua functions now return a boolean to indicate the result When calling the Lua particle_system.add_size_affector() function, you can now use a vec2 for the scale factors Fixes Added missing overload constructors for mesh and animated sprites in the Lua API Added some missing button names for mapped joysticks in the Lua API Minimum CMake version has been raised to 3.10 to avoid a deprecation warning Added the missing dpi field to the Lua table returned by gfx_device.get_monitor() Fixed the Lua viewport.set_camera() function to accept nil as a camera parameter Added missing joystick buttons to Lua input event tables October 2024 Improvements Add MemoryFile class constructors that own a memory buffer The version of the integrated ImGui has been updated to v1.91.4 The version of the integrated Google Test has been updated to v1.15.2 The version of the integrated Google Benchmark has been updated to v1.9.0 September 2024 Improvements The version of the integrated ImGui has been updated to v1.91.2 The version of the integrated Tracy has been updated to v0.11.1 Swap deprecated ALooper_pollAll() function for ALooper_pollOnce() on Android July 2024 Improvements The version of the integrated ImGui has been updated to v1.90.9 June 2024 New Features Added many new OpenAL source properties to the audio players Added support for some useful OpenAL extensions pause_device, deferred_updates, source_spatialize Added optional support for EFX effects and filters, also in the Lua API Improvements The sound sources are now arranged in a pool for the players to pick, fixing some issues with playing Handling the OV_HOLE vorbisfile error code by continue decoding instead of fatal asserting Added a stress test mode to apptest_audio Added support for joystick axes mapped as buttons The version of the integrated ImGui has been updated to v1.90.8 The version of the integrated Google Benchmark has been updated to v1.8.4 Fixes Fixed a couple of alignment faults with Emscripten and some apptests April 2024 Breaking Changes Renamed nc::IAudioDevice::PlayerType::AUDIOSTREAM to nc::IAudioDevice::PlayerType::STREAM March 2024 Breaking Changes The freezePlayers()/unfreezePlayers() methods of the audio device have been removed The Lua functions freeze_players()/unfreeze_players() have been removed too February 2024 Improvements Added support for custom memory allocators and window position hints of GLFW 3.4 Some minor changes to the IAllocator methods that handle debug allocation entries The version of the integrated ImGui has been updated to v1.90.4 January 2024 Improvements The version of the integrated ImGui has been updated to v1.90.1 Fixes Fixed compilation when enabling the custom memory allocators Moved Particle.h to public headers to fix compilation warnings The header should not be directly included by users ","title":"2024","type":"changelog"},{"content":" Itch.io Fireman is a GMTK Game Jam 2023 entry made by Ana30.\n","date":"9 July 2023","externalUrl":null,"permalink":"/gallery/fireman/","section":"Gallery","summary":" Itch.io Fireman is a GMTK Game Jam 2023 entry made by Ana30.\n","title":"Fireman","type":"gallery"},{"content":"Made by Ana30 as a submission for the GMTK Game Jam 2023, Fireman is an nCine game where you play as the web browser.\nFireman ","date":"9 July 2023","externalUrl":null,"permalink":"/news/2023-07-09-fireman-gmtk/","section":"News","summary":"Made by Ana30 as a submission for the GMTK Game Jam 2023, Fireman is an nCine game where you play as the web browser.\n","title":"Fireman game for GMTK 2023","type":"news"},{"content":" November 2023 New Features There is now an option to use binary shaders: they will be compiled on the first run and then cached on disk Default shaders will use this feature as well, if enabled in the configuration Batched shaders can be compiled twice to query the max number of batches for the UBO size Improvements A new class has been added to calculate a 64-bit hash from strings or from file information (also in the Lua API) Emscripten stack size has been increased from the default 64 Kb to 128 Kb The version of the integrated ImGui has been updated to v1.90 October 2023 Breaking Changes The Timer::sleep() method now needs an integer number of milliseconds instead of a float number of seconds. The join() and exit() methods of the Thread class do not support custom return values anymore Improvements The version of the integrated Tracy has been updated to v0.10 Fixes The Thread class can be be move constructed or move assigned without causing random crashes September 2023 Improvements Updated support for Gradle plugin 8.1.0 and build tools 33.0.1 on Android The version of the integrated ImGui has been updated to v1.89.9 The version of the integrated Google Test has been updated to v1.14.0 The version of the integrated Google Benchmark has been updated to v1.8.3 July 2023 Improvements The version of the integrated ImGui has been updated to v1.89.7 June 2023 Improvements The version of the integrated ImGui has been updated to v1.89.6 May 2023 New Features Add a new apptest_bunnymark, an nCine port of the famous BunyMark benchmark Improvements Added an interface class to tweak the frame timer options A second timer has been added to the frame timer to calculate averages April 2023 Breaking Changes The homeDir() method of the FileSystem class have been renamed to homePath() The get_home_dir() function of the Lua filesystem table has been renamed to get_home_path() The get_datapath() and get_savepath() functions of the Lua filesystem table have been renamed to get_data_path() and get_save_path() New Features The apptest_lua has a new ImGui interface and can now automatically reload a modified Lua script Improvements The version of the integrated ImGui has been updated to v1.89.5 The version of the integrated Google Test has been updated to v1.13.0 There is now a new method in the FileSystem class to return the path to store cached files March 2023 Improvements The version of the integrated Tracy has been updated to v0.9.1 The version of the integrated ImGui has been updated to v1.89.4 February 2023 Improvements The version of the integrated ImGui has been updated to v1.89.3 January 2023 Improvements The version of the integrated ImGui has been updated to v1.89.2 ","date":"1 January 2023","externalUrl":null,"permalink":"/changelog/year_2023/","section":"Changelog","summary":"November 2023 New Features There is now an option to use binary shaders: they will be compiled on the first run and then cached on disk Default shaders will use this feature as well, if enabled in the configuration Batched shaders can be compiled twice to query the max number of batches for the UBO size Improvements A new class has been added to calculate a 64-bit hash from strings or from file information (also in the Lua API) Emscripten stack size has been increased from the default 64 Kb to 128 Kb The version of the integrated ImGui has been updated to v1.90 October 2023 Breaking Changes The Timer::sleep() method now needs an integer number of milliseconds instead of a float number of seconds. The join() and exit() methods of the Thread class do not support custom return values anymore Improvements The version of the integrated Tracy has been updated to v0.10 Fixes The Thread class can be be move constructed or move assigned without causing random crashes September 2023 Improvements Updated support for Gradle plugin 8.1.0 and build tools 33.0.1 on Android The version of the integrated ImGui has been updated to v1.89.9 The version of the integrated Google Test has been updated to v1.14.0 The version of the integrated Google Benchmark has been updated to v1.8.3 July 2023 Improvements The version of the integrated ImGui has been updated to v1.89.7 June 2023 Improvements The version of the integrated ImGui has been updated to v1.89.6 May 2023 New Features Add a new apptest_bunnymark, an nCine port of the famous BunyMark benchmark Improvements Added an interface class to tweak the frame timer options A second timer has been added to the frame timer to calculate averages April 2023 Breaking Changes The homeDir() method of the FileSystem class have been renamed to homePath() The get_home_dir() function of the Lua filesystem table has been renamed to get_home_path() The get_datapath() and get_savepath() functions of the Lua filesystem table have been renamed to get_data_path() and get_save_path() New Features The apptest_lua has a new ImGui interface and can now automatically reload a modified Lua script Improvements The version of the integrated ImGui has been updated to v1.89.5 The version of the integrated Google Test has been updated to v1.13.0 There is now a new method in the FileSystem class to return the path to store cached files March 2023 Improvements The version of the integrated Tracy has been updated to v0.9.1 The version of the integrated ImGui has been updated to v1.89.4 February 2023 Improvements The version of the integrated ImGui has been updated to v1.89.3 January 2023 Improvements The version of the integrated ImGui has been updated to v1.89.2 ","title":"2023","type":"changelog"},{"content":" Run with Emscripten GitHub Jazz² Resurrection is the C++ version of the Jazz Jackrabbit 2 reimplementation project by DeathKiller.\nVideos ","date":"15 July 2022","externalUrl":null,"permalink":"/gallery/jazz2resurrection/","section":"Gallery","summary":" Run with Emscripten GitHub Jazz² Resurrection is the C++ version of the Jazz Jackrabbit 2 reimplementation project by DeathKiller.\n","title":"Jazz² Resurrection","type":"gallery"},{"content":"Jazz² Resurrection is reimplementation of Jazz Jackrabbit 2, a 1998 platform game by Epic Games (at the time called Epic MegaGames). The author, DeathKiller, used C# and parts of the Duality 2D framework to put together the project.\nHe is now porting it to C++ and he decided to use nCine for the job! \u0026#x1f4aa;\nThe native project embeds a modified version of the engine to make the porting easier and faster. You can have a look at the source code on GitHub.\n","date":"15 July 2022","externalUrl":null,"permalink":"/news/2022-07-15-jazz2-native-github/","section":"News","summary":"Jazz² Resurrection is reimplementation of Jazz Jackrabbit 2, a 1998 platform game by Epic Games (at the time called Epic MegaGames). The author, DeathKiller, used C# and parts of the Duality 2D framework to put together the project.\n","title":"Native version of Jazz² Resurrection","type":"news"},{"content":"I have recorded a video of ncJump running (and jumping \u0026#x1f609;) on the Steam Deck!\n","date":"28 March 2022","externalUrl":null,"permalink":"/news/2022-03-28-ncjump-on-steam-deck/","section":"News","summary":"I have recorded a video of ncJump running (and jumping 😉) on the Steam Deck!\n","title":"ncJump on the Steam Deck","type":"news"},{"content":" 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\u0026rsquo;n\u0026rsquo;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\u0026rsquo;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) ","date":"1 January 2022","externalUrl":null,"permalink":"/changelog/year_2022/","section":"Changelog","summary":"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) ","title":"2022","type":"changelog"},{"content":" Breaking Changes The nctl::Array and nctl::StaticArray subscript operator will not grow the array size The return type of the createAppEventHandler function has been changed to a unique pointer The SceneNode query methods for drawing and updating have been prefixed with is, for example isEnabled() The setWidth() and setHeight() methods of the BaseSprite class have been removed The errorToString() function of the LuaDebug namespace has been renamed to correct a typo The parameters order of LuaStateManager::runFromMemory() has changed The default line height of a TextNode object is now its font line height instead of the base The AnimatedSprite class now stores RectAnimation objects instead of smart pointers The type alias declarations for hash containers with string keys have been removed The run() method of the LuaStateManager class has been renamed to runFromFile() The onFrameEnd() callback is now invoked before the OpenGL buffers swap The assign() method of nctl::String will now always truncate the destination The new replace() method wil behave like the old assign() method Pushing an element beyond the capacity of an array will now cause a fatal assert Popping an element from an empty array will now cause a fatal assert Retrieving a front or a back element from an empty array will now cause a fatal assert Retrieving a front or a back element from an empty list will now cause a fatal assert New Features The engine now supports custom memory allocators All containers have been updated to allow the specification of an allocator Unique pointers support custom deleters in a compressed pair A new apptest_allocators application has been added to test the four included allocator types You can set a name for an allocator and it will be used in Tracy too The FileSystem API now supports Android asset FileSystem It is now possible to load textures, sounds and fonts from memory buffers There is a new loading API for resources as textures, sounds, and fonts The user can create empty resources and load data at a later time Data can be loaded inside a resource multiple times Failed loads will never result in a fatal assert nor modify a resource A texture can be loaded from uncompressed texels and audio from PCM samples A new apptest_loading application has been added to test the enhanced loading capabilities Sprites can be created without a texture, they will be rendered in solid color with a simpler shader TextNode objects can be created without assigning a Font AudioBufferPlayer can be created without assigning an AudioBuffer It is now possible to move construct or move assign resource and node classes A clone() method has been added to node classes to perform an object copy A new onTextInput event has been added to receive UTF-8 characters It is now possible to query and set the window position on all desktop backends There is now an onPostUpdate() callback that you can use to access the node transform for the current frame It is also possible to change it inside the callback by using SceneNode::setWorldMatrix() The nctl::String class will now automatically reallocate memory to expand its capacity and never truncate by default The old behavior is still available by specifying the nctl::StringMode::FIXED_CAPACITY option The template project files are now part of the engine You only need a simple CMakeLists.txt file for your project You can save a texture from video memory to RAM and then from RAM to disk as a PNG or WebP image On desktop platforms the IGfxDevice provides a flashWindow() method to make the taskbar flash nCine can now run on a Raspberry Pi Various fixes to better support OpenGL ES features and older CMake versions It is now possible to disable the scripting API while retaining the Lua integration Improvements The version of the integrated Tracy has been updated to v0.7.8 The version of the integrated ImGui has been updated to v1.86 The version of the integrated Google Test has been updated to v1.11.0 The version of the integrated Google Benchmark has been updated to v1.6.1 All containers now split the allocation phase from object construction Creating a container will only reserve memory for the elements Inserting or removing elements will trigger construction and destruction On Android unfound libraries will not be linked anymore to the game library The Java activity will not load the nCine or OpenAL libraries if unneeded It is now possible to set the ARGB components of a color with a hexadecimal code The nctl::String class can now decode Unicode code points from UTF-8 strings and vice versa The Font class now supports Unicode characters exported in the Fnt descriptor file The Android software keyboard visibility can be toggled on and off The seek position of an audio buffer can be queried and modified It is now possible to set a custom line height for a TextNode object When loading a RGB texture it is possible to treat a color as transparent You can now use nctl::String and const char * as keys for hash containers without specifing an hash function There is a new removeAllChildrenNodes() method in the SceneNode class You can retrieve the current RectAnimation of an AnimatedSprite with the currentAnimation() method Errors in Lua scripts will not cause the engine to assert and exit It is now possible to load a Lua script without running it More information will be provided when a script fails to load or to run The engine project is now shipping with an .editorconfig configuration file The OpenGL class that keeps track of the blending state can now use separate functions for RRB and alpha The file extension comparison method is now case-insensitive The FileSystem class returns constant strings to prevent move assignemnt and any modification to the capacity of destination ones There is now a fixExtension() function in the FileSystem class to assure that a file has the intended extension Fixes GCC hardening compiler flags have been fixed with the explicit addition of PIE flags The root node of the scenegraph now honors its own transformations The buffer of an AudioBufferPlayer class was not detached from the OpenAL source when it finished playing The setSize() method of nctl::Array will now create objects when extending an array size The ImGui and Nuklear drawing commands were previously appended to the render queue with one frame delay Fix ncine.sprite.set_flipped_x() and set_flipped_y() functions in the Lua API November 2019 - May 2020 Breaking Changes Removed flipX() and flipY() sprite methods They have been superseded by setFlippedX() and setFlippedY() Removed setOpaqueTexture() sprite method You can achieve the same result with the general setBlendingEnabled(false) The Matrix4x4\u0026lt;T\u0026gt;::scale() static method has been renamed to Matrix4x4\u0026lt;T\u0026gt;::scaling() The dataPath() and savePath() methods of IFile have been moved to the new FileSystem class The access() method of IFile have been superseded by the more powerful query methods of the FileSystem class The nc.application.datapath() Lua function is now nc.fs.get_datapath() The children() method of a SceneNode now returns a nctl::Array New Features Scene nodes support anchor points and non-uniform scaling There is a new apptest_anchor application that shows all new node features Drawable nodes support custom alpha blending factors Nuklear integration for fully skinnable user interfaces You can now embed the whole engine inside a Qt5 widget by choosing the Qt5 desktop backend If the Qt Gamepad library is available it will be used for gamepad input events Touch events are supported on desktop through the SDL2 and Qt5 backends They now also provide information about touch pressure The FileSystem class has been added to help you query and manipulate paths, files, and directories It comes with a new apptest_filebrowser application that shows an ImGui based file browser ImGui and Nuklear integrations support custom fonts loading Added a new unclamped three channels ColorHdr class The IAppEventHandler class now receives onSuspend() and onResume() events Improvements The logging system is initialized earlier and can be used inside onPreInit() The Android asset manager is initialized earlier and can be used inside onPreInit() Handling of windows resizing events has been fixed Emscripten applications react to window resizing and fullscreen events Emscripten applications can now load and save local files Sprite flipping methods now take a status flag The version of the integrated Tracy has gone from v0.5 to v0.6.3 The version of the integrated ImGui has gone from v1.73 to v1.76 Deletion of children scene nodes upon parent destruction has been made optional The Matrix4x4\u0026lt;T\u0026gt; can now translate, rotate and scale in place, avoiding a full matrix multiplication It can now also be multiplied on the right side of a vector Automatic sprite batching is now available on Emscripten You can choose the fixed batch size with a variable in the AppConfiguration class Added support for Google ANGLE libraries on Windows Sorting of render commands is now stable If two commands have the same material sorting key then a secondary key based on node creation time is used All kind of hashmap and hashset containers can now correctly use const char * as key type Added two low-level classes to save textures as Png or WebP images It is now possible to set the swap interval on all desktop backends with IGfxDevice::setSwapInterval() The new String::append(const char *) overload will prevent allocating a string object when appending Visiting the scenegraph should be faster as children are now stored in an array instead of a list The new unordered remove methods of arrays will remove elements faster when preserving order is not required The debug overlay interface has now a node inspector to query and modify nodes in the scene Android Gradle Plugin, Build Tools, compileSDKVersion and targetSDKVersion have all been updated to newer versions Fixes The Emscripten port compiles with upstream LLVM WebAssembly backend Some minor fixes in the color classes code Culling of drawable nodes works with negative scaling factors Scene nodes are now correctly transformed before children thus eliminating any update delay with nodes chains Caching of TextNode boundaries does not introduce a one frame delay on update The Lua stack is now cleaned after a failure in calling a function Previously the stack would easily overflow if some callbacks were not defined String lenght is now updated if a string is truncated when using a formatting method Fixed OpenGL FBO wrapper class when dealing with reading and drawing buffers ","date":"1 December 2021","externalUrl":null,"permalink":"/changelog/jun2020_dec2021/","section":"Changelog","summary":"Breaking Changes The nctl::Array and nctl::StaticArray subscript operator will not grow the array size The return type of the createAppEventHandler function has been changed to a unique pointer The SceneNode query methods for drawing and updating have been prefixed with is, for example isEnabled() The setWidth() and setHeight() methods of the BaseSprite class have been removed The errorToString() function of the LuaDebug namespace has been renamed to correct a typo The parameters order of LuaStateManager::runFromMemory() has changed The default line height of a TextNode object is now its font line height instead of the base The AnimatedSprite class now stores RectAnimation objects instead of smart pointers The type alias declarations for hash containers with string keys have been removed The run() method of the LuaStateManager class has been renamed to runFromFile() The onFrameEnd() callback is now invoked before the OpenGL buffers swap The assign() method of nctl::String will now always truncate the destination The new replace() method wil behave like the old assign() method Pushing an element beyond the capacity of an array will now cause a fatal assert Popping an element from an empty array will now cause a fatal assert Retrieving a front or a back element from an empty array will now cause a fatal assert Retrieving a front or a back element from an empty list will now cause a fatal assert New Features The engine now supports custom memory allocators All containers have been updated to allow the specification of an allocator Unique pointers support custom deleters in a compressed pair A new apptest_allocators application has been added to test the four included allocator types You can set a name for an allocator and it will be used in Tracy too The FileSystem API now supports Android asset FileSystem It is now possible to load textures, sounds and fonts from memory buffers There is a new loading API for resources as textures, sounds, and fonts The user can create empty resources and load data at a later time Data can be loaded inside a resource multiple times Failed loads will never result in a fatal assert nor modify a resource A texture can be loaded from uncompressed texels and audio from PCM samples A new apptest_loading application has been added to test the enhanced loading capabilities Sprites can be created without a texture, they will be rendered in solid color with a simpler shader TextNode objects can be created without assigning a Font AudioBufferPlayer can be created without assigning an AudioBuffer It is now possible to move construct or move assign resource and node classes A clone() method has been added to node classes to perform an object copy A new onTextInput event has been added to receive UTF-8 characters It is now possible to query and set the window position on all desktop backends There is now an onPostUpdate() callback that you can use to access the node transform for the current frame It is also possible to change it inside the callback by using SceneNode::setWorldMatrix() The nctl::String class will now automatically reallocate memory to expand its capacity and never truncate by default The old behavior is still available by specifying the nctl::StringMode::FIXED_CAPACITY option The template project files are now part of the engine You only need a simple CMakeLists.txt file for your project You can save a texture from video memory to RAM and then from RAM to disk as a PNG or WebP image On desktop platforms the IGfxDevice provides a flashWindow() method to make the taskbar flash nCine can now run on a Raspberry Pi Various fixes to better support OpenGL ES features and older CMake versions It is now possible to disable the scripting API while retaining the Lua integration Improvements The version of the integrated Tracy has been updated to v0.7.8 The version of the integrated ImGui has been updated to v1.86 The version of the integrated Google Test has been updated to v1.11.0 The version of the integrated Google Benchmark has been updated to v1.6.1 All containers now split the allocation phase from object construction Creating a container will only reserve memory for the elements Inserting or removing elements will trigger construction and destruction On Android unfound libraries will not be linked anymore to the game library The Java activity will not load the nCine or OpenAL libraries if unneeded It is now possible to set the ARGB components of a color with a hexadecimal code The nctl::String class can now decode Unicode code points from UTF-8 strings and vice versa The Font class now supports Unicode characters exported in the Fnt descriptor file The Android software keyboard visibility can be toggled on and off The seek position of an audio buffer can be queried and modified It is now possible to set a custom line height for a TextNode object When loading a RGB texture it is possible to treat a color as transparent You can now use nctl::String and const char * as keys for hash containers without specifing an hash function There is a new removeAllChildrenNodes() method in the SceneNode class You can retrieve the current RectAnimation of an AnimatedSprite with the currentAnimation() method Errors in Lua scripts will not cause the engine to assert and exit It is now possible to load a Lua script without running it More information will be provided when a script fails to load or to run The engine project is now shipping with an .editorconfig configuration file The OpenGL class that keeps track of the blending state can now use separate functions for RRB and alpha The file extension comparison method is now case-insensitive The FileSystem class returns constant strings to prevent move assignemnt and any modification to the capacity of destination ones There is now a fixExtension() function in the FileSystem class to assure that a file has the intended extension Fixes GCC hardening compiler flags have been fixed with the explicit addition of PIE flags The root node of the scenegraph now honors its own transformations The buffer of an AudioBufferPlayer class was not detached from the OpenAL source when it finished playing The setSize() method of nctl::Array will now create objects when extending an array size The ImGui and Nuklear drawing commands were previously appended to the render queue with one frame delay Fix ncine.sprite.set_flipped_x() and set_flipped_y() functions in the Lua API November 2019 - May 2020 Breaking Changes Removed flipX() and flipY() sprite methods They have been superseded by setFlippedX() and setFlippedY() Removed setOpaqueTexture() sprite method You can achieve the same result with the general setBlendingEnabled(false) The Matrix4x4\u003cT\u003e::scale() static method has been renamed to Matrix4x4\u003cT\u003e::scaling() The dataPath() and savePath() methods of IFile have been moved to the new FileSystem class The access() method of IFile have been superseded by the more powerful query methods of the FileSystem class The nc.application.datapath() Lua function is now nc.fs.get_datapath() The children() method of a SceneNode now returns a nctl::Array New Features Scene nodes support anchor points and non-uniform scaling There is a new apptest_anchor application that shows all new node features Drawable nodes support custom alpha blending factors Nuklear integration for fully skinnable user interfaces You can now embed the whole engine inside a Qt5 widget by choosing the Qt5 desktop backend If the Qt Gamepad library is available it will be used for gamepad input events Touch events are supported on desktop through the SDL2 and Qt5 backends They now also provide information about touch pressure The FileSystem class has been added to help you query and manipulate paths, files, and directories It comes with a new apptest_filebrowser application that shows an ImGui based file browser ImGui and Nuklear integrations support custom fonts loading Added a new unclamped three channels ColorHdr class The IAppEventHandler class now receives onSuspend() and onResume() events Improvements The logging system is initialized earlier and can be used inside onPreInit() The Android asset manager is initialized earlier and can be used inside onPreInit() Handling of windows resizing events has been fixed Emscripten applications react to window resizing and fullscreen events Emscripten applications can now load and save local files Sprite flipping methods now take a status flag The version of the integrated Tracy has gone from v0.5 to v0.6.3 The version of the integrated ImGui has gone from v1.73 to v1.76 Deletion of children scene nodes upon parent destruction has been made optional The Matrix4x4\u003cT\u003e can now translate, rotate and scale in place, avoiding a full matrix multiplication It can now also be multiplied on the right side of a vector Automatic sprite batching is now available on Emscripten You can choose the fixed batch size with a variable in the AppConfiguration class Added support for Google ANGLE libraries on Windows Sorting of render commands is now stable If two commands have the same material sorting key then a secondary key based on node creation time is used All kind of hashmap and hashset containers can now correctly use const char * as key type Added two low-level classes to save textures as Png or WebP images It is now possible to set the swap interval on all desktop backends with IGfxDevice::setSwapInterval() The new String::append(const char *) overload will prevent allocating a string object when appending Visiting the scenegraph should be faster as children are now stored in an array instead of a list The new unordered remove methods of arrays will remove elements faster when preserving order is not required The debug overlay interface has now a node inspector to query and modify nodes in the scene Android Gradle Plugin, Build Tools, compileSDKVersion and targetSDKVersion have all been updated to newer versions Fixes The Emscripten port compiles with upstream LLVM WebAssembly backend Some minor fixes in the color classes code Culling of drawable nodes works with negative scaling factors Scene nodes are now correctly transformed before children thus eliminating any update delay with nodes chains Caching of TextNode boundaries does not introduce a one frame delay on update The Lua stack is now cleaned after a failure in calling a function Previously the stack would easily overflow if some callbacks were not defined String lenght is now updated if a string is truncated when using a formatting method Fixed OpenGL FBO wrapper class when dealing with reading and drawing buffers ","title":"June 2020 - December 2021","type":"changelog"},{"content":"The nCine has been recommended as the framework to be used by students for the second lesson homerwork of the Artificial Intelligence for Computer Games course at the prestigious Charles University in Prague.\nMany thanks to Dr. Jakub Gemrot for choosing the project, for providing a custom installation guide for students, and for his feedback about the Windows build instructions.\nArtificial Intelligence for Computer Games ","date":"11 October 2021","externalUrl":null,"permalink":"/news/2021-10-11-artificial-intelligence-course/","section":"News","summary":"The nCine has been recommended as the framework to be used by students for the second lesson homerwork of the Artificial Intelligence for Computer Games course at the prestigious Charles University in Prague.\n","title":"nCine used at university","type":"news"},{"content":"The nCine and its ten years of development are the main focus of the fifth episode of The Runtime, a podcast about software development.\nI have been interviewed by Rafael Kennedy about my work on the nCine during those years: from why I felt the urge to start developing it to some of the design decisions and trade-offs I had to made.\nThe Runtime ","date":"23 July 2021","externalUrl":null,"permalink":"/news/2021-07-23-runtime-podcast/","section":"News","summary":"The nCine and its ten years of development are the main focus of the fifth episode of The Runtime, a podcast about software development.\n","title":"The Runtime Podcast","type":"news"},{"content":"","date":"19 June 2021","externalUrl":null,"permalink":"/tags/anniversary/","section":"Tags","summary":"","title":"Anniversary","type":"tags"},{"content":"Today marks the tenth anniversary since the first commit in 2011!\nHappy birthday to the nCine! \u0026#x1f37e;\n","date":"19 June 2021","externalUrl":null,"permalink":"/news/2021-06-19-ten-years/","section":"News","summary":"Today marks the tenth anniversary since the first commit in 2011!\nHappy birthday to the nCine! 🍾\n","title":"Ten years anniversary","type":"news"},{"content":"SpookyGhost, the procedural sprite animation tool made with the nCine, has been released as FOSS.\nNot only it has now a MIT license but it has also been updated with many new features and bug fixes.\nOn GitHub you will find the SpookyGhost and the SpookyGhost-data repositories along with the manual.\nYou will also find the demo among the web-tests.\nSpookyGhost ","date":"23 May 2021","externalUrl":null,"permalink":"/news/2021-05-23-spookyghost-foss/","section":"News","summary":"SpookyGhost, the procedural sprite animation tool made with the nCine, has been released as FOSS.\nNot only it has now a MIT license but it has also been updated with many new features and bug fixes.\n","title":"SpookyGhost released on GitHub!","type":"news"},{"content":"A new release of ncJump has been published today by Antonio \u0026ldquo;Fahien\u0026rdquo; Caggiano.\nncJump is a platform game that uses Box2D for the physics, ImGui for the editor and of course the nCine. It has been developed as an nCine reference version of the CS50\u0026rsquo;s lecture 4.\nOn Fahien\u0026rsquo;s GitHub you can find the ncJump, ncJump-data and ncJump-artifacts repositories.\nYou can read progress update articles and interact with the author on both GitHub Discussions and Itch.io.\nAs with other nCine projects, there is an Emscripten version that you can try online on Fahien\u0026rsquo;s site.\nncJump ","date":"9 April 2021","externalUrl":null,"permalink":"/news/2021-04-09-ncjump/","section":"News","summary":"A new release of ncJump has been published today by Antonio “Fahien” Caggiano.\nncJump is a platform game that uses Box2D for the physics, ImGui for the editor and of course the nCine. It has been developed as an nCine reference version of the CS50’s lecture 4.\n","title":"ncJump","type":"news"},{"content":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncTiledViewer is a viewer for some of the map types that you can create with Tiled.\nControls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface Pressing B on the keyboard or A on the gamepad will toggle batching Pressing C on the keyboard or B on the gamepad will toggle culling Pressing H on the keyboard or Start on the gamepad will hide or show the ImGui interface Pressing Escape on the keyboard will close the file dialog window Pressing CTRL + Q on the keyboard or Guide on the gamepad will quit the application ","date":"25 January 2021","externalUrl":null,"permalink":"/gallery/nctiledviewer/","section":"Gallery","summary":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncTiledViewer is a viewer for some of the map types that you can create with Tiled.\n","title":"ncTiledViewer","type":"gallery"},{"content":"ncTiledViewer is a viewer for Tiled maps with an ImGui interface. It is able to parse TMX and TSX files using pugixml and then display the map using sprites.\nOn GitHub you will find the ncTiledViewer and the ncTiledViewer-data repositories for you to build the application.\nYou will also find the same demo among the web-tests.\nncTiledViewer ","date":"25 January 2021","externalUrl":null,"permalink":"/news/2021-01-25-nctiledviewer/","section":"News","summary":"ncTiledViewer is a viewer for Tiled maps with an ImGui interface. It is able to parse TMX and TSX files using pugixml and then display the map using sprites.\n","title":"ncTiledViewer","type":"news"},{"content":"","date":"25 January 2021","externalUrl":null,"permalink":"/showcase_tags/tool/","section":"Showcase_tags","summary":"","title":"Tool","type":"showcase_tags"},{"content":"The new year brings great news: the nCine has been awarded one of the $250 microgrants from icculus!\nicculus sponsor For more information about previous year projects you can read the 2019 edition article from icculus\u0026rsquo; personal blog.\n","date":"8 January 2021","externalUrl":null,"permalink":"/news/2021-01-08-icculus-microgrant/","section":"News","summary":"The new year brings great news: the nCine has been awarded one of the $250 microgrants from icculus!\nicculus sponsor ","title":"Icculus Microgrant 2020","type":"news"},{"content":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncJump is a platform game built with the nCine by Fahien, with an ImGui level editor and using Box2D for the physics.\nDevlogs: NcJump: a jumping project\nVideos Controls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface Pressing W/A/S/D on the keyboard, or moving the left gamepad stick will move the character Pressing Space on the keyboard or A on the gamepad will make the character jump Pressing CTRL + Q on the keyboard will quit the game ","date":"12 December 2020","externalUrl":null,"permalink":"/gallery/ncjump/","section":"Gallery","summary":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncJump is a platform game built with the nCine by Fahien, with an ImGui level editor and using Box2D for the physics.\n","title":"ncJump","type":"gallery"},{"content":"There is a new JugiMap Framework demo published by Jugilus that shows the new GUI system.\nOn GitHub you will find the ncJugiMapGuiDemo and the ncJugiMapGuiDemo-data repositories for you to build the test.\nYou will also find the same demo among the web-tests.\nncJugiMapGuiDemo ","date":"24 November 2020","externalUrl":null,"permalink":"/news/2020-11-24-jugimap-guidemo/","section":"News","summary":"There is a new JugiMap Framework demo published by Jugilus that shows the new GUI system.\nOn GitHub you will find the ncJugiMapGuiDemo and the ncJugiMapGuiDemo-data repositories for you to build the test.\n","title":"JugiMapGuiDemo","type":"news"},{"content":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncJugiMapGuiDemo is the fourth of four framework demos of the JugiMap map editor. It shows the custom GUI toolkit of JugiMap in action.\nVideos Controls Use the mouse or the touch screen to interact with the interface.\n","date":"24 November 2020","externalUrl":null,"permalink":"/gallery/ncjugimap-guidemo/","section":"Gallery","summary":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncJugiMapGuiDemo is the fourth of four framework demos of the JugiMap map editor. It shows the custom GUI toolkit of JugiMap in action.\n","title":"ncJugiMapGuiDemo","type":"gallery"},{"content":"","date":"24 November 2020","externalUrl":null,"permalink":"/showcase_tags/project/","section":"Showcase_tags","summary":"","title":"Project","type":"showcase_tags"},{"content":"All nCine projects are now continuously integrated using GitHub Actions workflows. The old Azure Pipelines setup has been disabled and it will not be used anymore.\nGitHub Actions With this migration, the C.I. is now more integrated with the code as everything is accessible from GitHub. For example, have a look at the nCine actions page showing the building workflows. You will also notice the new CodeQL workflow and status badges in the README.md file.\nThere is also another news related to building the source code: the develop branch does not exist anymore. It is a transition from the Git Flow model to GitHub Flow.\nImprovements will appear in feature branches: they will be pushed on GitHub and updated regularly. Every feature branch will have one or more accompanying issues with explanations, instructions, and user comments. This change will allow for a broader testing phase, a transparent development process, and clearer tracking of progress.\n","date":"4 November 2020","externalUrl":null,"permalink":"/news/2020-11-04-github-actions/","section":"News","summary":"All nCine projects are now continuously integrated using GitHub Actions workflows. The old Azure Pipelines setup has been disabled and it will not be used anymore.\n","title":"C.I. migrated to GitHub Actions","type":"news"},{"content":"Today I decided to publish pmTracer and ncTracer on my personal GitHub space. You will also find online the ncTracer-data and the ncTracer-artifacts repositories.\nI have been working on the first, a ray tracing and path tracing library, for quite some time now. It is based on my studies of Ray Tracing from the Ground Up by Kevin Suffern, a book I recommend if you want to start from scratch on the topic and before delving into the more complete but also harder to understand Physically Based Rendering:From Theory To Implementation. \u0026#x1f609;\nI also developed an ImGui front-end to make it easier to perform tests and gather important feedback about speed and correctness, two things that are severely lacking at the moment. \u0026#x1f605;\nBut I decided to publish both projects either way because it can give me the motivation to refine them and you the opportunity to have a look at an application that uses the OpenGL and the threading private API of nCine by compiling it statically.\nYou can try the Emscripten version here.\nncTracer ","date":"12 October 2020","externalUrl":null,"permalink":"/news/2020-10-12-nctracer/","section":"News","summary":"Today I decided to publish pmTracer and ncTracer on my personal GitHub space. You will also find online the ncTracer-data and the ncTracer-artifacts repositories.\n","title":"ncTracer","type":"news"},{"content":"The third JugiMap Framework demo by Jugilus that shows how to animate sprites with the new timeline feature has been published on GitHub.\nYou will find the ncJugiMapSpriteTimelineAnimation and the ncJugiMapSpriteTimelineAnimation-data repositories for you to build the test.\nYou will also find the same demo among the web-tests.\nncJugiMapSpriteTimelineAnimation ","date":"27 June 2020","externalUrl":null,"permalink":"/news/2020-06-27-jugimap-spritetimelineanimation/","section":"News","summary":"The third JugiMap Framework demo by Jugilus that shows how to animate sprites with the new timeline feature has been published on GitHub.\n","title":"JugiMapSpriteTimelineAnimation demo","type":"news"},{"content":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncJugiMapSpriteTimelineAnimation is the third of four framework demos of the JugiMap map editor. It shows the camera moving around in a level while different objects and props are animated.\nVideos Controls Pressing the left mouse button or touching the screen will temporarily pause the camera movement.\n","date":"27 June 2020","externalUrl":null,"permalink":"/gallery/ncjugimap-spritetimelineanimation/","section":"Gallery","summary":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncJugiMapSpriteTimelineAnimation is the third of four framework demos of the JugiMap map editor. It shows the camera moving around in a level while different objects and props are animated.\n","title":"ncJugiMapSpriteTimelineAnimation","type":"gallery"},{"content":"","date":"19 May 2020","externalUrl":null,"permalink":"/tags/release/","section":"Tags","summary":"","title":"Release","type":"tags"},{"content":"A new release has been just finalised: nCine 2020.05.\nSome of its highlights are covered by the following video:\nMost notable entries from the slides:\nJugiMap supports the nCine Sprite system enhancements Qt5 desktop backend Nuklear GUI integration FileSystem API Support for ANGLE rendering libraries on Windows For a more detailed list of changes and improvements you can refer to the Release 2020.05 page.\nDon\u0026rsquo;t forget to check the updated DoxyGen documentation and the Lua API functions list.\n","date":"19 May 2020","externalUrl":null,"permalink":"/news/2020-05-19-release-202005/","section":"News","summary":"A new release has been just finalised: nCine 2020.05.\nSome of its highlights are covered by the following video:\nMost notable entries from the slides:\n","title":"Release 2020.05","type":"news"},{"content":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncJugiMapParallaxScrolling is the second of four framework demos of the JugiMap map editor. It shows the camera moving horizontally on a background made of multiple layers with parallax scrolling.\nVideos Controls Pressing the left mouse button or touching the screen will temporarily pause the camera movement.\n","date":"18 May 2020","externalUrl":null,"permalink":"/gallery/ncjugimap-parallaxscrolling/","section":"Gallery","summary":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncJugiMapParallaxScrolling is the second of four framework demos of the JugiMap map editor. It shows the camera moving horizontally on a background made of multiple layers with parallax scrolling.\n","title":"ncJugiMapParallaxScrolling","type":"gallery"},{"content":" Breaking Changes Removed flipX() and flipY() sprite methods They have been superseded by setFlippedX() and setFlippedY() Removed setOpaqueTexture() sprite method You can achieve the same result with the general setBlendingEnabled(false) The Matrix4x4\u0026lt;T\u0026gt;::scale() static method has been renamed to Matrix4x4\u0026lt;T\u0026gt;::scaling() The dataPath() and savePath() methods of IFile have been moved to the new FileSystem class The access() method of IFile have been superseded by the more powerful query methods of the FileSystem class The nc.application.datapath() Lua function is now nc.fs.get_datapath() The children() method of a SceneNode now returns a nctl::Array New Features Scene nodes support anchor points and non-uniform scaling There is a new apptest_anchor application that shows all new node features Drawable nodes support custom alpha blending factors Nuklear integration for fully skinnable user interfaces You can now embed the whole engine inside a Qt5 widget by choosing the Qt5 desktop backend If the Qt Gamepad library is available it will be used for gamepad input events Touch events are supported on desktop through the SDL2 and Qt5 backends They now also provide information about touch pressure The FileSystem class has been added to help you query and manipulate paths, files, and directories It comes with a new apptest_filebrowser application that shows an ImGui based file browser ImGui and Nuklear integrations support custom fonts loading Added a new unclamped three channels ColorHdr class The IAppEventHandler class now receives onSuspend() and onResume() events Improvements The logging system is initialized earlier and can be used inside onPreInit() The Android asset manager is initialized earlier and can be used inside onPreInit() Handling of windows resizing events has been fixed Emscripten applications react to window resizing and fullscreen events Emscripten applications can now load and save local files Sprite flipping methods now take a status flag The version of the integrated Tracy has gone from v0.5 to v0.6.3 The version of the integrated ImGui has gone from v1.73 to v1.76 Deletion of children scene nodes upon parent destruction has been made optional The Matrix4x4\u0026lt;T\u0026gt; can now translate, rotate and scale in place, avoiding a full matrix multiplication It can now also be multiplied on the right side of a vector Automatic sprite batching is now available on Emscripten You can choose the fixed batch size with a variable in the AppConfiguration class Added support for Google ANGLE libraries on Windows Sorting of render commands is now stable If two commands have the same material sorting key then a secondary key based on node creation time is used All kind of hashmap and hashset containers can now correctly use const char * as key type Added two low-level classes to save textures as Png or WebP images It is now possible to set the swap interval on all desktop backends with IGfxDevice::setSwapInterval() The new String::append(const char *) overload will prevent allocating a string object when appending Visiting the scenegraph should be faster as children are now stored in an array instead of a list The new unordered remove methods of arrays will remove elements faster when preserving order is not required The debug overlay interface has now a node inspector to query and modify nodes in the scene Android Gradle Plugin, Build Tools, compileSDKVersion and targetSDKVersion have all been updated to newer versions Fixes The Emscripten port compiles with upstream LLVM WebAssembly backend Some minor fixes in the color classes code Culling of drawable nodes works with negative scaling factors Scene nodes are now correctly transformed before children thus eliminating any update delay with nodes chains Caching of TextNode boundaries does not introduce a one frame delay on update The Lua stack is now cleaned after a failure in calling a function Previously the stack would easily overflow if some callbacks were not defined String lenght is now updated if a string is truncated when using a formatting method Fixed OpenGL FBO wrapper class when dealing with reading and drawing buffers ","date":"1 May 2020","externalUrl":null,"permalink":"/changelog/nov2019-may2020/","section":"Changelog","summary":"Breaking Changes Removed flipX() and flipY() sprite methods They have been superseded by setFlippedX() and setFlippedY() Removed setOpaqueTexture() sprite method You can achieve the same result with the general setBlendingEnabled(false) The Matrix4x4\u003cT\u003e::scale() static method has been renamed to Matrix4x4\u003cT\u003e::scaling() The dataPath() and savePath() methods of IFile have been moved to the new FileSystem class The access() method of IFile have been superseded by the more powerful query methods of the FileSystem class The nc.application.datapath() Lua function is now nc.fs.get_datapath() The children() method of a SceneNode now returns a nctl::Array New Features Scene nodes support anchor points and non-uniform scaling There is a new apptest_anchor application that shows all new node features Drawable nodes support custom alpha blending factors Nuklear integration for fully skinnable user interfaces You can now embed the whole engine inside a Qt5 widget by choosing the Qt5 desktop backend If the Qt Gamepad library is available it will be used for gamepad input events Touch events are supported on desktop through the SDL2 and Qt5 backends They now also provide information about touch pressure The FileSystem class has been added to help you query and manipulate paths, files, and directories It comes with a new apptest_filebrowser application that shows an ImGui based file browser ImGui and Nuklear integrations support custom fonts loading Added a new unclamped three channels ColorHdr class The IAppEventHandler class now receives onSuspend() and onResume() events Improvements The logging system is initialized earlier and can be used inside onPreInit() The Android asset manager is initialized earlier and can be used inside onPreInit() Handling of windows resizing events has been fixed Emscripten applications react to window resizing and fullscreen events Emscripten applications can now load and save local files Sprite flipping methods now take a status flag The version of the integrated Tracy has gone from v0.5 to v0.6.3 The version of the integrated ImGui has gone from v1.73 to v1.76 Deletion of children scene nodes upon parent destruction has been made optional The Matrix4x4\u003cT\u003e can now translate, rotate and scale in place, avoiding a full matrix multiplication It can now also be multiplied on the right side of a vector Automatic sprite batching is now available on Emscripten You can choose the fixed batch size with a variable in the AppConfiguration class Added support for Google ANGLE libraries on Windows Sorting of render commands is now stable If two commands have the same material sorting key then a secondary key based on node creation time is used All kind of hashmap and hashset containers can now correctly use const char * as key type Added two low-level classes to save textures as Png or WebP images It is now possible to set the swap interval on all desktop backends with IGfxDevice::setSwapInterval() The new String::append(const char *) overload will prevent allocating a string object when appending Visiting the scenegraph should be faster as children are now stored in an array instead of a list The new unordered remove methods of arrays will remove elements faster when preserving order is not required The debug overlay interface has now a node inspector to query and modify nodes in the scene Android Gradle Plugin, Build Tools, compileSDKVersion and targetSDKVersion have all been updated to newer versions Fixes The Emscripten port compiles with upstream LLVM WebAssembly backend Some minor fixes in the color classes code Culling of drawable nodes works with negative scaling factors Scene nodes are now correctly transformed before children thus eliminating any update delay with nodes chains Caching of TextNode boundaries does not introduce a one frame delay on update The Lua stack is now cleaned after a failure in calling a function Previously the stack would easily overflow if some callbacks were not defined String lenght is now updated if a string is truncated when using a formatting method Fixed OpenGL FBO wrapper class when dealing with reading and drawing buffers ","title":"November 2019 - May 2020","type":"changelog"},{"content":"There is a new JugiMap Framework demo published by Jugilus that shows how to render a beautiful parallax scrolling landscape.\nOn GitHub you will find the ncJugiMapParallaxScrolling and the ncJugiMapParallaxScrolling-data repositories for you to build the test.\nYou will also find the same demo among the web-tests.\nncJugiMapParallaxScrolling ","date":"30 March 2020","externalUrl":null,"permalink":"/news/2020-03-30-jugimap-parallaxscrolling/","section":"News","summary":"There is a new JugiMap Framework demo published by Jugilus that shows how to render a beautiful parallax scrolling landscape.\nOn GitHub you will find the ncJugiMapParallaxScrolling and the ncJugiMapParallaxScrolling-data repositories for you to build the test.\n","title":"JugiMapParallaxScrolling demo","type":"news"},{"content":"It is now possible to use Qt5 as an input and window management backend on desktop platforms.\nThe engine will render inside a custom QOpenGLWidget and receive all input events from Qt5. if Qt Gamepad is available gamepad events will be received as well.\n","date":"20 February 2020","externalUrl":null,"permalink":"/news/2020-02-20-qt5-backend/","section":"News","summary":"It is now possible to use Qt5 as an input and window management backend on desktop platforms.\nThe engine will render inside a custom QOpenGLWidget and receive all input events from Qt5. if Qt Gamepad is available gamepad events will be received as well.\n","title":"nCine as a custom Qt5 widget","type":"news"},{"content":"An initial demo of SpookyGhost has been published on itch.io.\nSpookyGhost is a procedural sprite animation tool made with the nCine.\nSpookyGhost prototype ","date":"30 January 2020","externalUrl":null,"permalink":"/news/2020-01-30-spookyghost/","section":"News","summary":"An initial demo of SpookyGhost has been published on itch.io.\nSpookyGhost is a procedural sprite animation tool made with the nCine.\n","title":"SpookyGhost available on itch.io","type":"news"},{"content":" Run with Emscripten GitHub Itch.io Windows macOS 15 (AppleSilicon) Linux All Platforms SpookyGhost is a cross-platform open-source procedural animation tool for sprites. You can read more about it on its website.\nVideos Controls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface. The ImGui menu items will show their keyboard shortcuts.\nMore information can be found in the official documentation.\n","date":"29 January 2020","externalUrl":null,"permalink":"/gallery/spookyghost/","section":"Gallery","summary":" Run with Emscripten GitHub Itch.io Windows macOS 15 (AppleSilicon) Linux All Platforms SpookyGhost is a cross-platform open-source procedural animation tool for sprites. You can read more about it on its website.\n","title":"SpookyGhost","type":"gallery"},{"content":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncJugiMapFrameworkDemo is the first of four framework demos of the JugiMap map editor. It shows sprites walking in a level while the camera moves around.\nVideos Controls Use the mouse or the touch screen to interact with the interface.\n","date":"24 December 2019","externalUrl":null,"permalink":"/gallery/ncjugimap-frameworkdemo/","section":"Gallery","summary":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncJugiMapFrameworkDemo is the first of four framework demos of the JugiMap map editor. It shows sprites walking in a level while the camera moves around.\n","title":"ncJugiMapFrameworkDemo","type":"gallery"},{"content":"A new version of the JugiMap map editor tool has been released and it now officially supports the nCine! You can use the JugiMap Framework to load a map created with the tool.\nOn its website you can try a web version of the Framework Demo that uses the nCine. \u0026#x1f609;\nOn GitHub you will find the ncJugiMapFrameworkDemo and the ncJugiMapFrameworkDemo-data repositories for you to build the test.\nncJugiMapFrameworkDemo ","date":"17 December 2019","externalUrl":null,"permalink":"/news/2019-12-17-jugimap/","section":"News","summary":"A new version of the JugiMap map editor tool has been released and it now officially supports the nCine! You can use the JugiMap Framework to load a map created with the tool.\n","title":"JugiMap supports the nCine!","type":"news"},{"content":"The culmination of five months of work is finally here: nCine 2019.10.\nSome of the highlights for this release are:\nEmscripten is supported as target platform: you can use the nCine for web games! \u0026#x1f578;\u0026#xfe0f; New AngelCode\u0026rsquo;s FNT format parser When you compile the engine you can choose to disable the support for various dependency libraries and features The user can now query the available fullscreen video modes on PC and choose one Fixes and enhancements to OpenAL implementation It is possible to defer shader checks and queries for a decreased starting time Refactoring of the clock and timestamp classes Update of Tracy integration to v0.5 Update of ImGui integration to v1.73 During the same time there has been a lot of work in side projects with the addition of:\nncline, the nCine command line tool ncTemplate, a template project for applications and games made with the nCine ncInvaders, a simplified version of Space Invaders made with the nCine The site have also been updated with:\nA web-tests page for you to run all tests, tools and games in the browser A gallery with a selection of screenshots and videos A download section A video tutorials page with a list of video from the YouTube channel A donate page that allows you to support and sponsor future development ","date":"21 October 2019","externalUrl":null,"permalink":"/news/2019-10-21-release-201910/","section":"News","summary":"The culmination of five months of work is finally here: nCine 2019.10.\nSome of the highlights for this release are:\nEmscripten is supported as target platform: you can use the nCine for web games! 🕸️ New AngelCode’s FNT format parser When you compile the engine you can choose to disable the support for various dependency libraries and features The user can now query the available fullscreen video modes on PC and choose one Fixes and enhancements to OpenAL implementation It is possible to defer shader checks and queries for a decreased starting time Refactoring of the clock and timestamp classes Update of Tracy integration to v0.5 Update of ImGui integration to v1.73 During the same time there has been a lot of work in side projects with the addition of:\n","title":"Release 2019.10","type":"news"},{"content":"There is a new Video Tutorials page in the Learn section. It contains a list of tutorials videos from the nCine channel on YouTube.\nTwo videos have already been uploaded, they explain how to start with the engine by using ncline and the ncTemplate project.\n","date":"20 October 2019","externalUrl":null,"permalink":"/news/2019-10-20-video-tutorials/","section":"News","summary":"There is a new Video Tutorials page in the Learn section. It contains a list of tutorials videos from the nCine channel on YouTube.\n","title":"Video Tutorials","type":"news"},{"content":" Breaking Changes The Font constructor has now inverted parameters: fntFilename as first and texFilename as second The reason for that is the new single parameter constructor SceneNode::parentNode() getter has been renamed to just parent(), to be consistent with the new setParent() setter The xResolution and yResolution fields of the AppConfiguration class have been replaced by a single 2D resolution vector The setResolution() helper method has been removed as it is now possible to call resolution.set() In Lua x_res and y_res have been replaced by the resolution 2D vector The old non ImGui debug overlay has been deleted. If you need the debug overlay you also need to enable the ImGui integration As part of this change the fontTexFilename and fontFntFilename strings in the AppConfiguration class have been deleted The withProfilerGraphs and withInfoText flags in the AppConfiguration class has been unified into a single withDebugOverlay flag You have to explicitely set the new flag to true to enable the debug overlay even when your application is compiled in debug mode Many nctl::String::copy() methods have been turned into assign() methods in order to be more consistent with STL The Timer::now() method has been removed, refer to the new TimeStamp class New Features Emscripten is now supported as a target platform, meaning you can now use the nCine for web games! \u0026#x1f578;\u0026#xfe0f; The user can now query the available fullscreen video modes on PC and choose one The IGfxDevice interface has been enriched with methods to query the current video mode, the list of available ones and to set a new mode A new deferShaderQueries flag has been added to the AppConfiguration classes When it is set to true all the shader error checks and introspection queries are deferred upon the first use of the shader, if it is ever used. The option allows for decreased starting time at the expense of possible stutters when the shader is first used in a frame New methods have been added to the audio classes to query their state They were used in the new Audio Players section of the ImGui debug overlay interface If you use the nCine compiled as a static library you have now access to more functionalities in the OpenGL classes You can now create PBOs and TBOs. You can now use GL_SAMPLER_1D and GL_SAMPLER_3D types in shaders A new GLCullFace class has been added to track OpenGL face culling state The Font class now relies on FntParser class to extract all the data from a FNT file More checks are now performed to ensure the text can be properly rendered More glyph channel configurations are now supported and rendered correctly The Font class can be constructed with a single parameter: the FNT file. The texture will be loaded according to the file specified in the first page tag. When you compile the engine you can now choose to disable the support for various dependency libraries and features You can disable threads support, Lua bindings, Png or WebP image loading, Ogg Vorbis sound loading or audio altogether Improvements The version of the integrated Tracy has gone from v0.4.1 to v0.5 It is now easier to use Tracy in custom nCine projects, including on Android Threads can be named so that they can be tracked in the Tracy profiler You can now also retrieve current thread priority or set a new one All log entries are written out as coloured Tracy messages Threads id are invalidated on join and cancel so that they can be reused The version of the integrated ImGui has gone from v1.70 to v1.73 The GameController mapping database has been updated from the one included in SDL 2.0.9 to the one in SDL 2.0.10 The SceneNode classes has seen the addition of long awaited helper methods in the shape of setParent(), alpha() and absAlpha() The first one makes it easy and intuitive to set a node parent without going the opposite way by calling parent-\u0026gt;addChildNode(this) The alpha related methods should make it easier to query for a node alpha value There are also new Lua methods for scene nodes: set_parent(), get_alpha() and set_alpha() The new TimeStamp class can be used to collect timestamps at the full precision of the internal clock The Time class has been enhanced with stop() and totalTime() methods to aggregate multiple time spans Most methods of the TimeStamp class are also accessible through the Lua API It is now possible to assign() a certain numbers of characters from a C string to an nctl::String object You can now enable the ImGui debug overlay even when the scenegraph is disabled In this case be sure to track OpenGL states using GLBlending, GLDepthTest and the new GLCullFace class The Font class has a new query method, numKernings(), to retrieve the number of kerning pairs in a font (it is called num_kernings() in Lua) You can access the array of animations in an AnimatedSprite and the array of rectangles in a RectAnimation On Windows the executables use the Windows subsystem instead of the console one They will also expose version properties thanks to the VERSIONINFO file The Android Gradle plugin version has been updated from 3.4.0 to 3.4.1 and Android build tools from 28.0.3 to 29.0.2 The changes have been reflected in the template project as well Fixes Compiler warnings related with nctl::UniquePtr wrapping forward declared classes have been fixed. They could have sometimes led to incorrect object deletions and possible leaks. \u0026#x1f628; The OpenAL implementation has been rewritten and many bugs that were lurking in the code should have been squashed \u0026#x1f41b; Some changes dictated by the layout of the new ncTemplate project The CMake scripts now expect a nCine-data/icons/icon.ico file instead of the old nCine.ico Installers are now built with the CPACK_PACKAGE_VENDOR and CPACK_PACKAGE_HOMEPAGE_URL variables correctly set The returned value for GL_MAX_UNIFORM_BLOCK_SIZE is now clamped to 64kB because some OpenGL drivers might return very big numbers ","date":"1 October 2019","externalUrl":null,"permalink":"/changelog/may2019-oct2019/","section":"Changelog","summary":"Breaking Changes The Font constructor has now inverted parameters: fntFilename as first and texFilename as second The reason for that is the new single parameter constructor SceneNode::parentNode() getter has been renamed to just parent(), to be consistent with the new setParent() setter The xResolution and yResolution fields of the AppConfiguration class have been replaced by a single 2D resolution vector The setResolution() helper method has been removed as it is now possible to call resolution.set() In Lua x_res and y_res have been replaced by the resolution 2D vector The old non ImGui debug overlay has been deleted. If you need the debug overlay you also need to enable the ImGui integration As part of this change the fontTexFilename and fontFntFilename strings in the AppConfiguration class have been deleted The withProfilerGraphs and withInfoText flags in the AppConfiguration class has been unified into a single withDebugOverlay flag You have to explicitely set the new flag to true to enable the debug overlay even when your application is compiled in debug mode Many nctl::String::copy() methods have been turned into assign() methods in order to be more consistent with STL The Timer::now() method has been removed, refer to the new TimeStamp class New Features Emscripten is now supported as a target platform, meaning you can now use the nCine for web games! 🕸️ The user can now query the available fullscreen video modes on PC and choose one The IGfxDevice interface has been enriched with methods to query the current video mode, the list of available ones and to set a new mode A new deferShaderQueries flag has been added to the AppConfiguration classes When it is set to true all the shader error checks and introspection queries are deferred upon the first use of the shader, if it is ever used. The option allows for decreased starting time at the expense of possible stutters when the shader is first used in a frame New methods have been added to the audio classes to query their state They were used in the new Audio Players section of the ImGui debug overlay interface If you use the nCine compiled as a static library you have now access to more functionalities in the OpenGL classes You can now create PBOs and TBOs. You can now use GL_SAMPLER_1D and GL_SAMPLER_3D types in shaders A new GLCullFace class has been added to track OpenGL face culling state The Font class now relies on FntParser class to extract all the data from a FNT file More checks are now performed to ensure the text can be properly rendered More glyph channel configurations are now supported and rendered correctly The Font class can be constructed with a single parameter: the FNT file. The texture will be loaded according to the file specified in the first page tag. When you compile the engine you can now choose to disable the support for various dependency libraries and features You can disable threads support, Lua bindings, Png or WebP image loading, Ogg Vorbis sound loading or audio altogether Improvements The version of the integrated Tracy has gone from v0.4.1 to v0.5 It is now easier to use Tracy in custom nCine projects, including on Android Threads can be named so that they can be tracked in the Tracy profiler You can now also retrieve current thread priority or set a new one All log entries are written out as coloured Tracy messages Threads id are invalidated on join and cancel so that they can be reused The version of the integrated ImGui has gone from v1.70 to v1.73 The GameController mapping database has been updated from the one included in SDL 2.0.9 to the one in SDL 2.0.10 The SceneNode classes has seen the addition of long awaited helper methods in the shape of setParent(), alpha() and absAlpha() The first one makes it easy and intuitive to set a node parent without going the opposite way by calling parent-\u003eaddChildNode(this) The alpha related methods should make it easier to query for a node alpha value There are also new Lua methods for scene nodes: set_parent(), get_alpha() and set_alpha() The new TimeStamp class can be used to collect timestamps at the full precision of the internal clock The Time class has been enhanced with stop() and totalTime() methods to aggregate multiple time spans Most methods of the TimeStamp class are also accessible through the Lua API It is now possible to assign() a certain numbers of characters from a C string to an nctl::String object You can now enable the ImGui debug overlay even when the scenegraph is disabled In this case be sure to track OpenGL states using GLBlending, GLDepthTest and the new GLCullFace class The Font class has a new query method, numKernings(), to retrieve the number of kerning pairs in a font (it is called num_kernings() in Lua) You can access the array of animations in an AnimatedSprite and the array of rectangles in a RectAnimation On Windows the executables use the Windows subsystem instead of the console one They will also expose version properties thanks to the VERSIONINFO file The Android Gradle plugin version has been updated from 3.4.0 to 3.4.1 and Android build tools from 28.0.3 to 29.0.2 The changes have been reflected in the template project as well Fixes Compiler warnings related with nctl::UniquePtr wrapping forward declared classes have been fixed. They could have sometimes led to incorrect object deletions and possible leaks. 😨 The OpenAL implementation has been rewritten and many bugs that were lurking in the code should have been squashed 🐛 Some changes dictated by the layout of the new ncTemplate project The CMake scripts now expect a nCine-data/icons/icon.ico file instead of the old nCine.ico Installers are now built with the CPACK_PACKAGE_VENDOR and CPACK_PACKAGE_HOMEPAGE_URL variables correctly set The returned value for GL_MAX_UNIFORM_BLOCK_SIZE is now clamped to 64kB because some OpenGL drivers might return very big numbers ","title":"May 2019 - October 2019","type":"changelog"},{"content":" GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncline is the nCine command line tool. It uses Git and CMake to automate the download, configuration, and compilation processes for the engine and its projects.\nInstructions Read the README.md for more informations.\n","date":"27 September 2019","externalUrl":null,"permalink":"/gallery/ncline/","section":"Gallery","summary":" GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncline is the nCine command line tool. It uses Git and CMake to automate the download, configuration, and compilation processes for the engine and its projects.\n","title":"ncline","type":"gallery"},{"content":"ncline is a tool to automate the download, configuration and compilation processes for the engine and its accompanying projects. It has been uploaded on GitHub where you will find the ncline and the ncline-artifacts repositories.\n","date":"17 September 2019","externalUrl":null,"permalink":"/news/2019-09-17-ncline/","section":"News","summary":"ncline is a tool to automate the download, configuration and compilation processes for the engine and its accompanying projects. It has been uploaded on GitHub where you will find the ncline and the ncline-artifacts repositories.\n","title":"ncline","type":"news"},{"content":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncTracer is an ImGui interface for the Poor Man\u0026rsquo;s Tracer, a very simple and minimal ray tracing and path tracing library.\nControls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface. Pressing Escape on the keyboard will quit the application.\n","date":"5 August 2019","externalUrl":null,"permalink":"/gallery/nctracer/","section":"Gallery","summary":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncTracer is an ImGui interface for the Poor Man’s Tracer, a very simple and minimal ray tracing and path tracing library.\n","title":"ncTracer","type":"gallery"},{"content":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncInvaders is a simplified Space Invaders clone made with the nCine as an example game.\nVideos Controls Pressing the left/right arrow keys, clicking or touching the screen on the left or right side, or moving the left gamepad stick left/right will move the spaceship Pressing Space on the keyboard, or the A button on the gamepad, or clicking or touching the center of the screen will make the spaceship fire a rocket Pressing R on the keyboard or Start on the gamepad will reset the game Pressing P on the keyboard or Back on the gamepad will toggle the pause Pressing Escape on the keyboard or Guide on the gamepad will quit the game ","date":"30 July 2019","externalUrl":null,"permalink":"/gallery/ncinvaders/","section":"Gallery","summary":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncInvaders is a simplified Space Invaders clone made with the nCine as an example game.\n","title":"ncInvaders","type":"gallery"},{"content":"If you go on GitHub today you will find the ncTemplate and ncTemplate-data repositories.\nYou can use them as a starting point for your nCine projects.\nncPong, ncParticleEditor and ncInvaders have been adapted to use the new template scripts.\n","date":"29 July 2019","externalUrl":null,"permalink":"/news/2019-07-29-template-project/","section":"News","summary":"If you go on GitHub today you will find the ncTemplate and ncTemplate-data repositories.\nYou can use them as a starting point for your nCine projects.\n","title":"ncTemplate","type":"news"},{"content":"ncInvaders, a simplified version of Space Invaders made with the nCine, has been uploaded on GitHub. You will find the usual ncInvaders, ncInvaders-data and ncInvaders-artifacts repositories online.\nIt has also been compiled with Emscripten and made available here.\nncInvaders ","date":"25 July 2019","externalUrl":null,"permalink":"/news/2019-07-25-ncinvaders/","section":"News","summary":"ncInvaders, a simplified version of Space Invaders made with the nCine, has been uploaded on GitHub. You will find the usual ncInvaders, ncInvaders-data and ncInvaders-artifacts repositories online.\n","title":"ncInvaders","type":"news"},{"content":"A new and exciting platform has been added to the nCine already long list: Emscripten. It means that you can now easily port your games and tools to the web!\nTry out some of the web tests and have a look at the build instructions to learn more.\n","date":"14 July 2019","externalUrl":null,"permalink":"/news/2019-07-14-emscripten/","section":"News","summary":"A new and exciting platform has been added to the nCine already long list: Emscripten. It means that you can now easily port your games and tools to the web!\n","title":"Emscripten port","type":"news"},{"content":"This is not the first anniversary post on the site, but there is an interesting difference this year.\nNow that the source code have been released you can have a look at that very first commit from eight years ago!\nHappy birthday, nCine. \u0026#x1f37e;\n","date":"19 June 2019","externalUrl":null,"permalink":"/news/2019-06-19-eight-years/","section":"News","summary":"This is not the first anniversary post on the site, but there is an interesting difference this year.\nNow that the source code have been released you can have a look at that very first commit from eight years ago!\n","title":"Eight years in the works","type":"news"},{"content":"Today GameFromScratch has talked about the nCine!\nWith an article on the site, a tweet (actually two \u0026#x1f604;) and a ten minutes overview video on YouTube.\n","date":"17 June 2019","externalUrl":null,"permalink":"/news/2019-06-17-game-from-scratch/","section":"News","summary":"Today GameFromScratch has talked about the nCine!\nWith an article on the site, a tweet (actually two 😄) and a ten minutes overview video on YouTube.\n","title":"Article on GameFromScratch","type":"news"},{"content":"It is an honor for the nCine to appear in an article on Phoronix today!\nMany thanks to Michael Larabel for the very first press coverage about the project.\n","date":"1 June 2019","externalUrl":null,"permalink":"/news/2019-06-01-phoronix/","section":"News","summary":"It is an honor for the nCine to appear in an article on Phoronix today!\nMany thanks to Michael Larabel for the very first press coverage about the project.\n","title":"Article on Phoronix","type":"news"},{"content":"The time has come, the source code has been released! Go on GitHub and take a look at the nCine organization.\nYou will find the engine code, the Pong example project, the particle editor, the data sets, the CMake scripts used to compile all the dependency libraries on PC and Android, the Jekyll website and the artifacts from the Azure Pipelines continuous integration.\nFollow the project on Twitter and come on Discord to share your ideas and your nCine games! \u0026#x1f609;\n","date":"30 May 2019","externalUrl":null,"permalink":"/news/2019-05-30-source-released/","section":"News","summary":"The time has come, the source code has been released! Go on GitHub and take a look at the nCine organization.\n","title":"Source code released","type":"news"},{"content":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncParticleEditor is a particle editor with an ImGui interface that uses the nCine particle emitter API for its effects.\nVideos Controls Use the mouse, the keyboard, the gamepad, or the touch screen to interact with the ImGui interface. The ImGui menu items will show their keyboard shortcuts. Pressing CTRL + Q on the keyboard will quit the application.\n","date":"15 September 2018","externalUrl":null,"permalink":"/gallery/ncparticleeditor/","section":"Gallery","summary":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncParticleEditor is a particle editor with an ImGui interface that uses the nCine particle emitter API for its effects.\n","title":"ncParticleEditor","type":"gallery"},{"content":"Another year has passed and the project activity is still as high as it was in the very beginning!\n","date":"19 June 2017","externalUrl":null,"permalink":"/news/2017-06-19-six-years/","section":"News","summary":"Another year has passed and the project activity is still as high as it was in the very beginning!\n","title":"Six years ago","type":"news"},{"content":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncPong is a minimal Pong clone made with the nCine as an example game.\nVideos Screenshots Part of the source code of the Lua version of ncPong Controls Pressing the up/down or W/S keys, clicking or touching the screen, or moving the left gamepad stick up/down will move the paddle Pressing R on the keyboard or Start on the gamepad will reset the game Pressing Escape on the keyboard or Guide on the gamepad will quit the game ","date":"30 June 2016","externalUrl":null,"permalink":"/gallery/ncpong/","section":"Gallery","summary":" Run with Emscripten GitHub Windows macOS 15 (AppleSilicon) Linux All Platforms ncPong is a minimal Pong clone made with the nCine as an example game.\n","title":"ncPong","type":"gallery"},{"content":"A short testing period among a small group of testers has just started.\n","date":"26 June 2016","externalUrl":null,"permalink":"/news/2016-06-26-closed-beta/","section":"News","summary":"A short testing period among a small group of testers has just started.\n","title":"Closed beta","type":"news"},{"content":"Five years ago, on June the 19th of 2011, the initial source code for the nCine was committed in Mercurial.\n","date":"19 June 2016","externalUrl":null,"permalink":"/news/2016-06-19-five-years/","section":"News","summary":"Five years ago, on June the 19th of 2011, the initial source code for the nCine was committed in Mercurial.\n","title":"Five years ago","type":"news"},{"content":"Yet another game engine, what a complete waste of time! Am I right? \u0026#x1f612;\nWell, it surely wasn\u0026rsquo;t a waste of time for me, I learned plenty of stuff and had a lot of fun programming it. And it has also started to be useful to others!\nIt might not captivate the interest of who uses big engines like Unreal, Unity or Godot, but it should attract users of frameworks like Cocos2d, MonoGame, LibGDX, LÖVE, SFML, LWJGL, Phaser, HaxeFlixel, or raylib.\nSome use cases 1. It could be used for small cross-platform 2D games. You can program your game in C++ for maximum performance and the ability to customize the engine itself or you can use the Lua bindings for prototypes or game jams.\n2. You can use the ImGui integration and put together game developing tools like I did with my particle editor or with SpookyGhost. They would be cross-platform and work on Android and the web as well.\n3. When compiled as a static library it becomes a graphics demo framework and every low-level implementation class would be accessible, including the OpenGL and threading layers. All the other features would still be available, like the cross-platform abstraction, the template library, or the RenderDoc and Tracy integrations.\n4. Being a minimal open source engine programmed by a single person, it can represent a starting point to learn and experiment with game engine programming. \u0026#x1f609;\n","externalUrl":null,"permalink":"/about/","section":"","summary":"Yet another game engine, what a complete waste of time! Am I right? 😒\nWell, it surely wasn’t a waste of time for me, I learned plenty of stuff and had a lot of fun programming it. And it has also started to be useful to others!\n","title":"About","type":"page"},{"content":"","externalUrl":null,"permalink":"/showcase_tags/apptest/","section":"Showcase_tags","summary":"","title":"AppTest","type":"showcase_tags"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"This site is built with Hugo using the Blowfish theme by Nuno Coração.\nThe background image is by Milad Fakurian on Unsplash.\nThis site is licensed under the Creative Commons BY-NC-SA 4.0 International license.\n","externalUrl":null,"permalink":"/credits/","section":"","summary":"This site is built with Hugo using the Blowfish theme by Nuno Coração.\nThe background image is by Milad Fakurian on Unsplash.\nThis site is licensed under the Creative Commons BY-NC-SA 4.0 International license.\n","title":"Credits","type":"page"},{"content":"I\u0026rsquo;m an engine and graphics programmer from the AAA game industry that has been pursuing a dream since 2011: to write my own engine and witness what people can create with it!\nnCine is a cross-platform 2D game engine written in C++ with an emphasis on performance. It is also scriptable in Lua for more flexibility. You can use it to create your games and tools, or to learn and experiment with its source code.\nWith your donations I can bring my commitment to a whole new level and push even harder in important aspects like performance, usability, and extensibility.\nPlatforms GitHub Sponsors Sponsor Patreon Become a Patron! Ko-Fi Buy Me a Coffee LiberaPay PayPal Sponsors Icculus Microgrant 2020 ","externalUrl":null,"permalink":"/donate/","section":"","summary":"I’m an engine and graphics programmer from the AAA game industry that has been pursuing a dream since 2011: to write my own engine and witness what people can create with it!\n","title":"Donate","type":"page"},{"content":" Windows macOS 15 (AppleSilicon) Linux All Platforms These buttons let you quickly download prebuilt nCine binaries for your platform. For more platforms or branches, click All Platforms.\nBefore building or running projects, it may be useful to read the Getting Started guide.\nncline Windows macOS 15 (AppleSilicon) Linux All Platforms ncline is an all-in-one command-line tool to download, configure, and build the libraries, the engine, and example projects.\nSources All source code is available on GitHub. Start by cloning and building:\nnCine-libraries and nCine-android-libraries nCine and nCine-data Then optionally clone and build the example projects:\nncTemplate \u0026amp; ncTemplate-data ncPong \u0026amp; ncPong-data ncInvaders \u0026amp; ncInvaders-data See Build Instructions for details.\n","externalUrl":null,"permalink":"/download/","section":"","summary":" Windows macOS 15 (AppleSilicon) Linux All Platforms These buttons let you quickly download prebuilt nCine binaries for your platform. For more platforms or branches, click All Platforms.\n","title":"Download Instructions","type":"page"},{"content":"This page lists most of the nCine application tests (or AppTests). They live in the tests and src/tests directories of the repository. They are used to stress-test the API and show users how to use it.\nMost of them are available on the web using Emscripten.\n","externalUrl":null,"permalink":"/examples/","section":"Examples","summary":"This page lists most of the nCine application tests (or AppTests). They live in the tests and src/tests directories of the repository. They are used to stress-test the API and show users how to use it.\n","title":"Examples","type":"examples"},{"content":" How do you pronounce \u0026ldquo;nCine\u0026rdquo;?\nI like to think it is pronounced as in \u0026ldquo;n-scene\u0026rdquo;.\nWhy the name?\nThe name is a combination of \u0026ldquo;engine\u0026rdquo; and \u0026ldquo;Encelo\u0026rdquo;, my nickname on the internet. \u0026#x1f604;\nWhat does the logo represent?\nThe logo unifies all the letters that form the name of the project in a single entity. This concept is evident when you have a look at the banner image used for Android TV.\nWhy don\u0026rsquo;t you use the STL? Why implementing a subset from scratch?\nThe main purpose of this project is learning new things. Reimplementing template based containers, iterators and algorithms gave me enough confidence to handle templates in C++.\nHaving used Google Test and Google Benchmark also gave me enough confidence to know that it somehow works and sometimes performs well. \u0026#x1f609;\nAre you going to support feature \u0026ldquo;X\u0026rdquo;?\nThe project is a constant work in progress but my spare time is limited and many basic functionalities are not there yet. You can help immensely by trying to develop something with the features that are available now and by giving me feedback about how to improve things.\nIf you feel generous you can also support the project with a donation. \u0026#x1f64f;\nIs the engine going to be limited to two dimensions forever?\nSupporting a third dimension is a very tempting but also demanding job. Currently I have more pressing features on my to-do list.\n","externalUrl":null,"permalink":"/faq/","section":"","summary":" How do you pronounce “nCine”?\nI like to think it is pronounced as in “n-scene”.\nWhy the name?\nThe name is a combination of “engine” and “Encelo”, my nickname on the internet. 😄\n","title":"F.A.Q.","type":"page"},{"content":"","externalUrl":null,"permalink":"/features/","section":"Features","summary":"","title":"Features","type":"features"},{"content":"nCine\u0026rsquo;s commits are signed using the author\u0026rsquo;s GnuPG public key.\nThe same key is also published on encelo.github.io, GitHub, keys.openpgp.org, and keyserver.ubuntu.com.\nFingerprint: 387C DEFE 8A87 AEB3 2897 8C80 7289 85A1 8FEE 4962\n-----BEGIN PGP PUBLIC KEY BLOCK----- mDMEaQtgRxYJKwYBBAHaRw8BAQdAOsr/iHk21mVkazyC+buM5GsA5KyivEF3OQEQ /V11CrK0I0FuZ2VsbyBUaGVvZG9yb3UgPGVuY2Vsb0BnbWFpbC5jb20+iJAEExYK ADgWIQQ4fN7+ioeusyiXjIByiYWhj+5JYgUCaQtgRwIbAwULCQgHAgYVCgkICwIE FgIDAQIeAQIXgAAKCRByiYWhj+5JYvN8AQDmNlD2nmwFD9CGfh7/QEq0kb358azG /6I5nbVF/zEZ5wEA+/HCoaJg2eAyK0jS1LrPdVE+3U4Ixl2LeMla7QCyRwO4OARp C2BHEgorBgEEAZdVAQUBAQdAwpyzK7PaJzREnEQMbCpUIwbV3dIpvBEcquiJflA7 Qg8DAQgHiHgEGBYKACAWIQQ4fN7+ioeusyiXjIByiYWhj+5JYgUCaQtgRwIbDAAK CRByiYWhj+5JYnaQAQCtBL/OOglVfsIYX9U7oerRitbbiuQg4p6Kw0fNPS3POwEA 49aeyHjT11/4dlFV2wrMtaeh+imyOGyvBqd5p4bKdQ64MwRpC2r7FgkrBgEEAdpH DwEBB0Bs7RiybfBx2yEjYMPEpk98eWt/G6Ulh4Y9UUB3R/Na9IjvBBgWCgAgFiEE OHze/oqHrrMol4yAcomFoY/uSWIFAmkLavsCGwIAgQkQcomFoY/uSWJ2IAQZFgoA HRYhBCc/915Oia6QVMcBcb+ZWujTPolgBQJpC2r7AAoJEL+ZWujTPolgR3UBAIiu 2+IRG4xmAEXAMTut+5ZcGhdCjeyRSYQvE0T0FiPvAQC14YDsgOoqv35tWbXEchlJ 4kI2AFNgfFZKlXIra2YiCGztAQCALqegst0KwnY81JKdZ2o2LD6p7XUzzq64Wplm bRH/iwEAw8ESd9PPfSK2H/uJnkpakhRYmLU/FQl8mZ8fno04SAG4MwRpC9BBFgkr BgEEAdpHDwEBB0BdwJI1hsw2l1hwe+5lThHsDX6dBs5cw3IgrtmaZF/lTIh4BBgW CgAgFiEEOHze/oqHrrMol4yAcomFoY/uSWIFAmkL0EECGyAACgkQcomFoY/uSWJ5 XgD/Ys9XJW6l3vM9VstjHxgdgt8ra/1YYIugd9NMv2X26qcBAPn4+EYfTagYc4xp ale7w5HwiNr4P3FwoxtrlB5geggE =KP+Z -----END PGP PUBLIC KEY BLOCK----- ","externalUrl":null,"permalink":"/gpg/","section":"","summary":"nCine’s commits are signed using the author’s GnuPG public key.\nThe same key is also published on encelo.github.io, GitHub, keys.openpgp.org, and keyserver.ubuntu.com.\nFingerprint: 387C DEFE 8A87 AEB3 2897 8C80 7289 85A1 8FEE 4962\n","title":"GnuPG Public Key","type":"page"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]