Area Allocator

November 4, 2018

The texture atlas in my Vulkan sprite renderer relies on an AreaAllocator class to keep track of areas allocated to the individual atlas textures. I have implemented such a class before, when I was working on EVE Online. This time around I’m building it from the ground up with unit tests, trying to do it in a proper test driven development style.

Read More

Alpha blending using pre-multiplied alpha

October 21, 2018

My sprite renderer needs to support alpha blending, and I’ve opted for a scheme using pre-multiplied alpha. I’m not going as far as pre-multiplying alpha into the textures, but rather performing the multiplication in the fragment shader. As far as the blending stage in the graphics pipeline is concerned, the alpha has been pre-multiplied, however.

Read More

Test Driven Vulkan

October 12, 2018

I really like the concept of test driven development, but I’ve often struggled with applying it to the codebase I’m working in. It’s easy to do simple test projects from scratch with TDD, and I’ve used with success for new projects that go well beyond simple test projects.

Read More


October 10, 2018

When I was working on EVE Online I was accustomed to having a log viewer running at all times, capturing the log output from the EVE client (and the proxy/server when running a local server). We used to have an old program, implemented in Borland Delphi, simply called LogViewer, but then my colleague finally got fed up with it and wrote a new log viewer, dubbed LogLite.

Read More

Embedded shaders

October 9, 2018

My simple Vulkan sprite renderer doesn’t have a large collection of complicated shaders. In fact, it only has one vertex shader and one fragment shader. Rather than loading the SPIR-V code from files on disk, I’ve opted for embedding them in the executable.

Read More

Back to basics

October 8, 2018

I want to implement my own game engine, using Vulkan for graphics. The primary driver for this is to learn to use Vulkan, but I also want to try some things in the overall architecture and infrastructure of a game engine.

Read More

Elixir vs. Go

November 21, 2017

I knew when I set out on my exsim project that it was ambitious - mixing three programming languages in one project, two of which were new to me. Elixir is very promising for handling lots of connections, and in general running concurrent tasks making good use of multi-core processors, which is why I found it interesting.

Read More

Large Scale Ambitions

November 10, 2017

Learning new things is important for every developer. I’ve mentioned  this before, and in the spirit of doing just that, I’ve started a somewhat ambitious project.

Read More


October 31, 2017

My employer laid a bunch off people yesterday. While I still have a job, this makes me really sad. I feel bad for those people that didn’t have a job to go to this morning - some of them have worked here a long time, some of them are good friends, some acquaintances, some I can’t really say I know.

Read More

Go, Bots, Go

October 22, 2017

Earlier this year I started experimenting with the Xmpp protocol, and implemented bots in Python to communicate with an Xmpp server. I’ve now revisited those bots and reimplemented them in Go. I’ve been meaning to learn Go for quite a while, and this seemed like a reasonable first project to tackle.

Read More

Expiring Records

October 13, 2017

I’m continuing my experiments with Erlang - this time trying out gen_server with a simple key/value store with a twist - the values have an expiration date.

Read More


October 8, 2017

In a previous blog I described a simple echo bot, that echoes back anything you say to it. This time I will talk about a bot that generates traffic for the chat server, that can be used for load-testing both the chat server as well as any chat clients connected to it.

Read More


October 5, 2017

In a previous blog I started discussing Xmpp and showed how to set up an Xmpp server and connecting to it via Python. In this blog I will dig deeper and show how to implement a simple echo bot.

Read More