RSSAmplifier

Blog

encelo.github.io

Recent content on encelo.github.io

encelo.github.ioRSS feed ↗35 posts

Latest posts

nCine Dev Update 23

Welcome back to another development update for the nCine, covering what has been accomplished in the last quarter of 2025 and the first half of 2026. Before diving into the technical part of the article, I should probably mention that a few days ago marked the 15th anniversary of the first commit of the project. 🎂 Let’s also cheer for the new Hugo site and the availability of signed…

An Intro to Wave Intrinsics

Most graphics programmers know about the concept of a warp (or a wave in AMD parlance). It is a group of GPU threads (or lanes), typically 32, though some architectures use more, that execute the same instructions in lockstep. Maybe not all of them know about wave intrinsics, though. They are a group of special GPU instructions exposed in HLSL (and similarly in other shading languages) that a…

A New Site

After eight years of serving me well, I decided to retire my old Jekyll -based site, which used the Beautiful Jekyll theme, a popular Jekyll template created by Dean Attali . All content has now been migrated to Hugo , powered by the Blowfish theme by Nuno Coração . I needed more flexibility and more speed. Hugo feels like the perfect choice to handle my site for at least the next eight years! 💪…

nCine Compilation Benchmark 3

Compilation speed directly affects iteration time when developing an engine. Since nCine continues to grow, I thought it would be interesting to measure how long a full build takes today compared to 2018, when I wrote the first article , and 2022, when I wrote the second one . I was thinking about writing this since the end of last year, when I bought both the second hand Mac and the small 14"…

nCine Dev Update 22

Welcome back to another development update for the nCine, covering what has been accomplished in the first part of this year. Introspective sort Back in December 2023, the author of Jazz² Resurrection reported a crash when sorting a render queue with more than 3000 commands. The sequence was unbalanced and quicksort recursion went too deep, overflowing the stack. He suggested switching to…

nCine Dev Update 21

In this article, we’ll go over the progress of the nCine throughout 2024. OpenAL EFX The biggest change this year has been support for the OpenAL EFX extension. You can now apply effects to any audio player, like reverb, echo, flanger, and more, and use low and high-pass filters. This was also a chance to improve the OpenAL code by adding new features and fixing some old bugs. For example, you can…

nCine Dev Update 20

Lately, the development rate of the nCine slowed down a bit. I think it is normal for a project that spans so many years, and developed by a single person, to see some oscillations. This is why this article covers such a long period, a period in which there have been maybe a few new features, but important ones. Binary shaders For sure the most interesting, and time-consuming, feature added since…

nCine Compilation Benchmark 2

I just got a new laptop, an Asus ROG Zephyrus G15 GA503RM (2022), and of course, I’m timing the nCine compilation to see how much time it will make me save. 😉 Should you be interested in the first compilation benchmark article, it is available here . As always, let’s start with the hardware and software details. Hardware and software Xiaomi Mi Notebook Pro (2017) Intel Core…

nCine Dev Update 19

Yet another update coming after a very long time since the previous, apologies for that. Well, at least it comes packed with a lot of enhancements from the last months. 💪 Custom shaders Probably the biggest feature of 2022, and the culmination of work that started with viewports a year ago, is the support for custom shaders. You can now write your own vertex and fragment shaders and assign…

nCine Dev Update 18

After a very long time without an update, here comes a new one. It is filled with all the work done in the last six months. 💪 Template project files alongside the engine This was a very important change that I had in mind for quite a while. By moving the template CMake scripts inside the engine repository, I can now update them once and reap the benefits in all nCine projects. Often an…

nCine Dev Update 17

Quite some time has passed since the previous development update but I’m here again to talk about the latest nCine progress. By the way, in case you missed the latest article , the project has recently reached its tenth anniversary. 😉 New nCine projects Many of the following fixes and features have been driven by the work on some new nCine projects that have seen the light of day…

Ten years of nCine

A bit more than ten years have passed since that first commit . The presence of a .hgignore file reveals that I was using Mercurial at the time, an easier transition to DCVS for someone like me used to Subversion. Some things were already there and stayed the same until now: like the Doxygen comments or the CMake building process (my first CMake real project after years of SCons). Many other…

nCine Dev Update 16

If you follow the project on GitHub you might have noticed a big development slowdown during the summer. I blame it on a combination of excessive heat and fatigue that led to a general lack of motivation and perseverance. ☀️ Fortunately, this does not mean that development didn’t resume at its normal pace or that there are no things to talk about in this article. 😉…

nCine Dev Update 15

I have spent nearly two months on a big task this spring: custom memory allocators. They can be useful in different scenarios to alleviate the performance cost of allocating and deallocating memory. But before diving into that I had to be sure that the containers were ready. Split allocation and construction Just like with STL ones, there has always been a difference between capacity and size in…

nCine Intel Mesa 20 Driver Benchmark

Today I upgraded my Arch Linux workstation with pacman as I usually do every day and a little surprise was waiting for me. After a long time in [testing] , Mesa 20 came out of the [extra] repository, ready to be installed. This release brings a ton of fixes and new features, alongside the new iris driver for modern Intel integrated GPUs based on Gallium3D. I have conducted some benchmarks on my…

nCine Dev Update 14

Welcome to another nCine development update! As usual, there are a lot of new things to cover. ANGLE To extend the support to more devices and platforms I have ported the nCine to ANGLE . It was an easy task as I just needed to tell GLFW and SDL2 to use EGL and open an OpenGL ES 3.0 context on Windows. With ANGLE the application would use Direct3D 11, overcoming any possible bug in old OpenGL…

nCine Dev Update 13

A lot of work has been put into the project as usual during those last months of the year. Plenty of new and important features have been added to the engine, many of them are related to extending the capabilities of sprite rendering. apptest_anchor JugiMap I have been recently contacted by Jugilus , JugiMap ’s author, for a collaboration. He was interested in the nCine as a sprite rendering…

nCine Dev Update 12

The last two months of work on the nCine were mostly dedicated to the quality of life improvements for users. First of all, I decided to get rid of the legacy debug overlay. It was a very old and problematic code that didn’t have any reason to be today. With the ImGui and Tracy integrations in place, the nCine is more than covered in that aspect. 💪 In an attempt to make the use of…

nCine Dev Update 11

Exciting news for this development update: a new supported platform! 🍾 Emscripten I remember playing with the idea of porting the nCine to Emscripten years ago. After all I had every requirement in place: I used OpenGL ES for Android, GLFW and SDL2 as input backends, OpenAL and Vorbis for audio, libpng for images and already supported a POSIX API. Unfortunately there was always a…

nCine Dev Update 10

I’m sure many of you have heard it already: the nCine source code has been released on GitHub ! This means that lately most of the time was dedicated to publication related tasks, for example updates to the site like the addition of a “ why nCine? ” page and a gallery . But definitely one of the most complex task has been continuous integration, which has a new page on the site…

nCine Dev Update 9

It has been a month and a half of small but useful updates for the nCine. LibPNG The PNG image loader has been modified to support more color types, by copying some code from the libpng example . It means that any nCine game is now able to properly load PNG images with palette or with gray-alpha channels and to expand or strip bit depths that are different than the standard 8 bits. Lua fixes I…

nCine Dev Update 8

I have spent some very intense weeks this March to completely overhaul and refactor my CMake scripts. We are talking about more than two thousand lines of code! 😱 Android I started by changing the way I cross-compile on Android. I dropped the use of CMake integrated NDK support introduced with version 3.7 and went back using the toolchain file provided by the NDK itself. It seems the way…

nCine Dev Update 7

Just a few weeks after the last update here I’m again to write the next one in which I’m going to show you the performance of my new hash table implementation. It is based on the Leapfrog Probing article by Jeff Preshing, where the author explains a new probing algorithm for collision resolution when using open addressing . My version is not multi-threaded but in return it is able to…

nCine Dev Update 6

After all the work carried out during the last months and culminated in the previous update, I took some time to experiment with some different things. I wanted to leave the rendering side for a bit and take a look at how to optimize other parts of the engine. I got my hands dirty straightaway with low-level aspects by playing with SIMD intrinsics, both Intel SSE and ARM NEON . The project…

nCine Dev Update 5

During those months two very important features appeared in the nCine. The first one is the integration of Lua for scripting, a language which is very easy to integrate and runs very fast. With Lua the user can quickly prototype ideas or actually write the entire game with just scripts, in a way similar to other engines. There is also a second way of interacting with the language, as the engine…

nCine Dev Update 4

Plenty of work has been done during these few last months as I decided once again to update the engine renderer. This time it went from using OpenGL 2 and OpenGL ES 2 to 3.3 and 3.0 respectively. I started by rewriting all the shaders to support the new in and out keywords in place of the old attribute and varying ones. For the sprite shader I also changed it in a way that it doesn’t need…

nCine Compilation Benchmark

Are you curious about the time I spend to compile the nCine? 😄 In this post I’m going to show how much time is needed to compile the engine on different platforms. Let’s start with the hardware and the software I’ve used for my tests. Hardware and software Xiaomi Mi Notebook Pro Hardware Intel Core i7-8550U 16GB RAM, DDR4 2400 MHz, dual channel Samsung PM961 NVMe SSD,…

nCine Dev Update 3

A lot of work has been carried out during the last three and a half months. First of all I have added some macros to allow asserts in the code, think about checks like this: ASSERT_MSG_X(index < size_, "Index %u is out of bounds (size: %u)", index, size_); The macro also invokes a breakpoint if a debugger is connected, allowing to inspect the context around the failure. It was a long needed…

nCine Dev Update 2

During those three months I have been working on two big features. The first one has been the support of SDL2 GameController mapping format. Initially my plan was to build a layer on top of my joystick input functions and leave the mapping code outside, as helper functions in a file distributed along the source of my tests and only linked by them. Later on I decided to refactor everything and…

nCine Dev Update 1

During June and July 2017 I have been working as usual, in my spare time, on the project. &#x1f609; The first big June addition has been the automatic screen culling of sprites, a very important feature needed in order to support games extending on multiple screens. The culling works on sprites of any kind (regular ones, particles, text nodes) and regardless of their scaling or rotation…

Get to know the nCine

I am writing this to present my latest and biggest project to date, the nCine. I was originally going to publish an article the day that I was going to release the source code but for various reasons you will have to wait a bit more. &#x1f622; I am nevertheless going to describe today some of the technical aspects behind it hoping that when it’s ready for release there would already be someone…

About me

I started my journey in computing on the Amiga , first with a stock A500 in 1991, and later with a towered A1200 upgraded with a BlizzardPPC and BVision . Those years shaped my fascination with graphics, games, programming, and the culture around making machines do more than anyone thought possible. In March 2000 I had my first real contact with the *nix world, running NetBSD 1.4.2 on my 68030…

Credits

This site is built with Hugo using the Blowfish theme by Nuno Coração . The background image is by Philip Oroni on Unsplash. This site is licensed under the Creative Commons BY-NC-SA 4.0 International license.

GnuPG Public Key

This is my personal GnuPG public key, used to sign my Git commits. The same key is also published on ncine.github.io , GitHub , keys.openpgp.org , and keyserver.ubuntu.com . Fingerprint : 387C DEFE 8A87 AEB3 2897 8C80 7289 85A1 8FEE 4962 -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEaQtgRxYJKwYBBAHaRw8BAQdAOsr/iHk21mVkazyC+buM5GsA5KyivEF3OQEQ…

Support

My work on open source projects like nCine and SpookyGhost has always been a labor of love. I build and maintain these tools in my free time, and I share them so anyone can learn, create, or just enjoy tinkering with code and graphics. If you&rsquo;ve found value in my work, or simply want to help me keep developing and documenting these projects, you can support me through one of the platforms…