(Engine * Systems * Graphics * Tools) Programming
Hi! My name is Philip and I'm a programmer. Welcome to my page.
# About
Hello there! My name is Philip Katis and I'm a computer science student and generalist programmer. I am primarily interested in core video game technology, including engine, systems, graphics, and tools programming. I am also enthusiastic about the foundations of personal computing, including operating systems, and compilers.
My journey with programming began at a young age, as I learned to write simple Minecraft plugins and custom part configs for Kerbal Space Program. From there, I tried my hand at building a top-down 2D game in Java, though I quickly realized that asset creation was not my strong suit. On the other hand, I was fascinated with the technical aspects of the project, like getting graphics on the screen. This led me down the rabbit hole of core video game technology and game engines.
Since graduating from high school, I have been pursuing a computer science degree from the Department of Informatics and Telecommunications at the University of Athens. In my spare time, I have been working on several personal projects, some of which are showcased below.
# Projects
Here are some the projects I am working on in my spare time:
## oxcart ︱ game engine
Oxcart is a project aimed at developing systems and tooling for building real-time, interactive 3D simulations. It is still at an early stage of getting things like the core, graphics and tooling up and running. You can find the project source code here.
Here is a list of some highlights/features of the engine:
- Written from scratch in C-like C++, with no dependencies other than the operating system, graphics API and shader compiler (not even the CRT or STL).
- An application-agnostic base layer, making it easier to work with C/C++. This includes things like base types, strings, memory allocators, etc.
- An OS abstraction layer providing a common interface over basic functionality like virtual memory and file I/O, as well as GUI related functionality like events, input polling and window creation. It currently supports Windows, with plans to also support Linux.
- A math library providing linear algebra constructs such as vectors, matrices and quaternions (with overloaded math operators), as well as custom implementations of transcendental functions (sin, cos, atan, etc.) using polynomial approxmations. The majority of the code is auto-generated via a Python metaprogram.
- A GPU abstraction layer providing a common interface over graphics APIs. It is designed around high performance and simplicity, and currenty supporting Vulkan with plans to also support D3D12. It offers device initialization, resource creation (including device memory suballocation) and management, as well as bindless resources (via device pointers for buffers and texture arrays).
- An instanced primitive renderer for quickly drawing points, lines, triangles and quads in a single draw call.
- A GPU vector graphics rasterizer for drawing glyphs and icons. It renders directly from the quadratic Bezier curves that define the glyph/graphic, without any kind of caching (like a texture atlas or a SDF). Glyph data is parsed from a TTF file and converted to a runtime GPU-friendly format.
- An immediate-mode user interface layer for building and drawing hierarchical UIs. It supports text runs, buttons, floating panels, anchored elements, etc.
- A 3D level editor with support for entity manipulation via gizmos (translation, rotation and scale), entity spawning and deletion, entity selection (with a shaded wireframe view and unwanted edge removal), world serialization/deserialization, etc.
- Blender plugin for exporting meshes in a custom runtime file format.
## hal ︱ language & compiler
A long term project to understand the foundations of personal computing and software development toolchains. This includes system level programming languages and compilers, instruction set architectures, source code storage formats, operating systems, and their executable formats. For now, the project involves a very simple systems programming language and compiler. You can find the project source code here.
Here are some of the features of the language:
- It is an imperative language aimed at procedural systems programming.
- Static type system with support for type inference.
- Procedure declarations and calls with arguments and return values.
- Variable declarations and assignments supporting expressions.
- Control flow statements like brances and loops.
Here are some of the features of the compiler:
- Written from scratch in C, with no third party dependencies or generators.
- Custom on-demand lexer and recursive descent parser with support for operator precedence.
- Custom intermediate representation format. IR-level optimization passes are not implemented yet.
- Primitive but custom x64 backend. Register allocation, sophisticated instruction selection or other optimizations are not implemented yet.
- Direct export to PE/COFF Windows executables without the need for a linker.
## misc
These are some other minor projects that are either smaller scale, or not adjacent to my core interests.
- aquatone: A simple software ray-tracer, used for showcasing different implementations of rendering algorithms.
- beatvault: A program for generating textual backups of Spotify playlists, featuring from-scratch networking (TLS, auth, etc).
- this website!!: I assume you're reading this on my personal website, written as static HTML and CSS. If not, then please ignore.