Cem Dervis

Cem Dervis

Graphics, compilers, low-level optimization, software architecture.

Projects

About

In my day job I work as a software engineer, where I solve various visualization problems.

My main areas of interest in software are low-level optimization techniques, computer graphics, and compiler construction. In computer graphics, I specialize in volume rendering.

I mostly do C++, C, Rust, and C#. I speak German, Turkish, and English.

Some of my other interests include hiking, astrophotography, bass guitar, and archery.

2026

Pendant

The Pi coding agent, built into VS Code.

Pendant brings Pi into VS Code as a focused, lightweight sidebar and editor tabs. It uses Pi directly, loads your configuration, extensions, skills and prompts, and supports every model available in your setup. Around it come modern touches: image attachments, Mermaid diagrams and other rich output, a focused view, and more.

Visit pendant.sh ↗

2026

Mere

Merely a minimalistic music player for macOS and iOS.

Mere on the Mac: a folder tree on the left, the playing song and the queue on the right

Mere is a free, minimal music player for Mac and iPhone. It plays your own music from folders, drives and a NAS: FLAC, MP3, AAC and more, gapless, no account.

Visit mereplayer.app ↗

2016

Exilus

Kurushi-style 3D game

A game I wrote in 2016 as a personal challenge and as a tribute to the great PS1 game I.Q. (aka Kurushi), for being a big part of my childhood and piquing my interest in computer graphics.

I wrote it within a month using C++ 14, Direct3D 11, FMOD (for audio) and Bullet (for physics). I also made all assets, except the music.

Four Exilus screenshots

Technical Highlights

  • HDR-capable deferred, physically based renderer
  • NVIDIA HBAO+ integration for ambient occlusion
  • Bullet physics for gameplay mechanics
  • FMOD audio engine integration
  • Custom asset pipeline — all assets self-made (except music)
  • No engine or framework — built from scratch

Download for Windows (64 MB)

Requires Windows 7+ with a Direct3D 11 compatible GPU.

2021

cppgfx

CPU-based graphics library for C++

– "Look mom, no GPU!"

Instead, this is a software renderer running, written in C++ 20 and compiled to LLVM IR ➜ WebAssembly using Emscripten. Therefore, expect this to run significantly slower than hardware-accelerated WebGL (this demo is running in a single thread!).

License: Boost Software License 1.0

Download v0.9.0

Features

  • Draw directly into a surface pointer
  • Write vertex and pixel shaders directly in C++ as functors, including state
    • Instant access to uniform data
    • Arbitrary vertex inputs and outputs
  • Stateless drawing functions
  • Alpha blending (blend states)
  • Depth buffering
  • Image sampling (samplers) including optional linear filtering
  • Multiple render targets
  • Standalone, no dependencies beside the C++ STL
  • Multithreaded rasterization using OpenMP if available
  • Pretty fast!

For a draw call, almost the entire pipeline state is specified. Where possible, the library infers some information for you. This allows the library to decide which code paths to take at compile time. You therefore only pay for what you use.

Usage

Either

  1. add_subdirectory(cppgfx), then
  2. target_link_libraries(MyApp PRIVATE cppgfx)
  3. #include <cppgfx.hpp>

or copy cppgfx.hpp to your project and #include from there.

Example

See the Demo folder for an example application. It uses CMake and downloads all dependencies automatically. Configure & build as usual:

> cd cppgfx
> cmake -B build
> cmake --build build --config Release

Why software rasterization?

Software renderers provide hassle-free and highly-flexible drawing operations down to the pixel. They are essential in fields where GPUs are unavailable or drivers cannot be trusted (e.g., medical workstations). They can also be used for cheap rendering tasks where CPU-GPU synchronization is too expensive.

2025

cppstat

C++ compiler support status page

cppstat: a searchable table of C++ features with their support in each compiler

cppstat is a site that lists C and C++ features and their respective support by compilers and standard libraries, designed as a simple, quickly searchable table.

Visit cppstat.dev ↗

2018

3D Demos

A 3D demo browser for an old graphics library I made

This is the demo browser of a 3D graphics library for C++ I originally developed.

It was designed to be very easy to use, with a great out of the box experience. In the browser, it used WebGL 2 and was compiled to WebAssembly using Emscripten.

Unfortunately it turns out that developing and maintaining such a library for 3D graphics is not only very time-consuming, but it's also rather difficult to:

  • Provide a high-level graphics API (i.e. Direct3D 11 level)
  • while providing enough low-level access to the hardware
  • while uniting all of the different graphics APIs under one umbrella
  • while not leaking abstractions

This is just due to the discrepancy between older, high-level graphics APIs such as OpenGL and the newer, low-level APIs such as Vulkan.

Nowadays it's simpler to build an abstraction over these APIs that is tailored to the specific use case of your application (or game architecture). Or just go a different route and build a render graph, such as Frostbite's FrameGraph.

This will not only be easier to develop and maintain, but also serve your purpose much better, since you have full control over the performance of your rendering.

2024

DropZipper

Easy-to-use Zip compression and encryption tool for macOS.

DropZipper: files dropped on the Dock icon, the compression window with a password field, and the finished archive

Easily compress, encrypt and send your files. Drop files or folders onto DropZipper, choose a compression level and an optional password, and share the archive. Requires macOS 13 or later.

Visit dropzipper.com ↗

2021

BMFGen

Bitmap Font Generator for macOS and Windows

BMFGen: font, export, fill and outline settings beside a live preview of the generated font

BMFGen is a free, easy-to-use bitmap font generator for macOS and Windows. Simply choose a font, tweak it, and export it to a format of your choice.

Visit bmfgen.com ↗

2012

SharpConfig

Easy to use cfg / ini configuration library for .NET.

You can use SharpConfig to read, modify and save configuration files and streams, in either text or binary format. Minimalistic, fully portable (.NET Standard 2.0), zero package dependencies.

[General]
SomeString = Hello World!
SomeInteger = 10 # an inline comment
SomeArray = { 1, 2, 3 }
Day = Monday

[Person]
Name = Peter
Age = 50

To read these values, your C# code would look like:

var config = Configuration.LoadFromFile("sample.cfg");
var section = config["General"];

string    someString   = section["SomeString"].StringValue;
int       someInteger  = section["SomeInteger"].IntValue;
int[]     someIntArray = section["SomeArray"].IntValueArray;
DayOfWeek day          = section["Day"].GetValue<DayOfWeek>();

// Entire user-defined objects can be created from sections and vice versa.
var person = config["Person"].ToObject<Person>();

Visit sharpconfig.org ↗

2015

linq

Fluent query composition with lazy evaluation, for C++ and Qt

A single-header library providing .NET-style LINQ query operations through expression templates with zero-overhead lazy evaluation. The default mode uses only the standard library, requires C++17, and works with STL-compatible containers. Qt support is optional.

const auto grades = std::vector{ 'A', 'C', 'B', 'A', 'B', 'A' };

const auto totals = linq::from(&grades)
                         .count_by([](char grade) { return grade; })
                         .order_by([](const auto& entry) { return entry.first; })
                         .to_vector(); // or to_qvector with Qt

// { {'A', 3}, {'B', 2}, {'C', 1} }

Visit dervis.de/linq ↗

2013

Exon

Direct3D 11 framework for .NET

An XNA-inspired framework that allows you to use Direct3D 11 from .NET. The difference between this and other libraries such as SharpDX is that it focuses on Direct3D 11 only and provides many utilities to get a 2D or 3D app up and running.

Being written in C++/CLI, it's only available on Windows. It includes a pipeline to load and use meshes, textures as well as audio files and makes using Direct3D 11 pretty comfortable.

Features

  • XNA-inspired API with Direct3D 11 focus
  • Mesh, texture, and audio loading pipeline
  • Built-in sample browser for demos
  • Effect (shader) compiler tool
  • Bitmap font generator
  • Written in C++/CLI for .NET interop

2008

Archive

Some old stuff, circa 2008

This is when I started to learn more intermediate graphics techniques, such as deferred shading and auto-exposure HDR. These examples were all using Direct3D 9 via C#.

2026

Physical Media

The Case for Physical Media Ownership

A collection of cases that show why owning films, music, books and games on physical media matters: digital purchases are often licenses, content gets removed, stores shut down, and preservation is uneven.

Read the collection ›