* [Efficient Rendering of Linear Brush Strokes---my graphics research paper explained](efficient-rendering-of-linear-brush-strokes.html) - _14-Feb-2018_
* [How not to suck at tmux](how-not-to-suck-at-tmux.html) - _13-Feb-2018_
* [Creating a modern OpenGL context](creating-a-modern-opengl-context.html) - _25-Sep-2017_
* [Exploring bump mapping with WebGL](exploring-bump-mapping-with-webgl.html) - _04-Mar-2017_
* [Hitchhiker's Guide to the GDB](hitchhikers-guide-to-the-gdb.html) - _30-Nov-2016_
* [Exploring calling conventions with x86 assembly](exploring-calling-conventions.html) - _04-Sep-2016_
* [Loading OpenGL without GLEW](loading-opengl-without-glew.html) - _20-Aug-2016_
* [Native UI is dead, long live native UI](native-ui-is-dead.html) - _13-Aug-2016_
* [Alpha Compositing, OpenGL Blending and Premultiplied Alpha](alpha-compositing-opengl-blending-and-premultiplied-alpha.html) - _30-Dec-2015_
* [Building a Fast, Modern Image Editor](building-a-fast-modern-image-editor.html) - _03-Jul-2015_
* [Android Game Architecture](android-game-architecture.html) - _13-Aug-2011_
* [Efficient Rendering of Linear Brush Strokes](http://www.jcgt.org/published/0007/01/01/) - _Journal of Computer Graphics Techniques_
* At NVIDIA, I work on CUDA profiling tools, including **nvprof**, the **NVIDIA
Visual Profiler**, and the **CUPTI** library.
* Open-source libraries
* [**EasyTab**](https://github.com/ApoorvaJ/EasyTab) is a single-header
multiplatform library for drawing-tablet input.
is a single-header lightweight OpenGL loader.
* [**tiny-jpeg-rs**](https://github.com/ApoorvaJ/tiny-jpeg-rs) is a
ported JPEG-encoding library written in the Rust language.
* [**Papaya**](https://github.com/ApoorvaJ/Papaya) is a cross-platform image
I spend a substantial amount of my free time developing this project. I
periodically spin out useful code from this project into small libraries and
release them into the public domain.
* [**Socioball**](http://socioballthegame.com) is an isometric puzzle game. In
each puzzle, you have to get one or multiple balls from start to finish by
placing missing action tiles along the ball’s path. Socioball uses
steganography and hides data inside images, effectively using Twitter as a
level sharing medium. Socioball is available on iOS and Android.
I was the solo programmer in the two-person team that made the game. I also
created most of the art. Socioball is made in Unity.