WebGPU, as you might already know, is a future Web standard for low-level graphics and compute API. It will allow browser-based apps to interact with GPU in a modern way, using explicitly defined pipelines and an immutable state. WebGPU can be seen as a unification of Vulkan, Metal and Direct3D 12, which makes it a first truly cross-platform graphics API that doesn’t sacrifice performance for the sake of versatility and usability.

During the last year I’ve been following the development of wgpu-native, an Open Source implementation of WebGPU written in Rust. I’m excited by the fact that, despite being an…


For several years I used Travis CI and AppVeyor for running integration tests of my projects, and recently decided to switch to Actions — cloud-based CI/CD service integrated into GitHub. Actions has many industry-standard features such as matrix builds, containers and artifacts. It provides great platform support including Linux, macOS and Windows. And, most importantly, Actions is fully free for public projects.

Actions supports popular languages, so if you use JavaScript, C#, Python or Java you can set it up quickly using one of the predefined workflow templates. However, until recently D support was nonexistent, and setting up a workflow…


As you may know, my main D project is dlib, a general purpose library for D language. It contains such functionality as linear algebra objects, computational geometry algorithms, I/O streams and filesystem abstraction, image and audio processing.

dlib has rather interesting early history which is rooted in my old C++ projects. My first general purpose library was Sparx, which was written in C++ in 2010–2011. After switching to D, I continued using it via C interface and Derelict binding, but it wasn’t very convenient, so I decided to write a native D replcement for some of its parts. Eventually this…


const qualifier is familiar to everyone, it is present in many modern C-like languages and used in many different contexts. In the most general sense, it means an immutable variable that can only be initialized once. In dynamically typed languages const usually means exatly that, but in statically typed world, including D as well, there are different types of immutability, and understanding them is cruisal to write reliable software.

Why do we need it?

By executing a computer program we utilize a processor to perform computations. If your computation is something more complex than a simple mathematic formula, then your program will have a state…


Contrary to common belief, I think that D is a perfect first language to learn by a complete beginner of native programming. D has its roots in C/C++ realm, but its syntax is clean, modern and friendly. D doesn’t require deep knowledge of computer architecture to start writing programs. One of the strongest parts of D is in that it’s equally fit for both low level (C-like) and high level (scripting-like) programming.

Many beginners however find it easier to start with C++ because of readily available tools and IDEs like Visual Studio. D doesn’t have a standard IDE, and this…


DUB is a standard package manager and build automation system for D. Before DUB appeared in 2012, everyone in D community used different build tools — such as classic Make, DSSS, CDC, xfBuild and custom build scripts, including those written in D itself. I used my own, called Cook, which was my very first public project in D and started as a single-file build script that could be added to any project and run with RDMD. Eventually all these became obsolete, and now D world can’t be imagined without DUB. …


D is a garbage collected language, and unfortunately this fact hinders its adoption by majority of game developers. Indeed, GC is not a helper for us. Writing effective and predictable real-time applications require full control over dynamic memory allocation and freeing. Games usually preallocate all the data in advance, and their memory consumption is highly deterministic. On top of that, game engines have to manage GPU data explicitly, so they can’t be easily combined with language-level GC without some tricky glue code. Most GC-centric languages either don’t allow manual memory management or make it frustratingly hard, which makes them a…


Hi! My name is Timur, I’m a graphics programmer from Kazan, Russia. My favourite language is D. If you also write in D, you probably know my most popular project — dlib, a general purpose library for game engines and multimedia applications. I’ve also written a bunch of other stuff in D, most notably dmech physics engine and Cook build system. My current project is Dagon — a 3D game engine for D based on OpenGL 4.0 and SDL2.

I‘ve been developing Dagon since 2016 and reporting my progress at https://dlanggamedev.blogspot.com (Russian). Unfortunately, D community in Russia is rather small, so recently I decided to start blogging also in English to reach worldwide audience. I’m going to write about D, OpenGL, shaders and graphics tech. Stay tuned!

Timur Gafarov

3D game engine developer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store