Welcome to my Website.

I am a computer scientist, mathematician, and physicist

who thrives on challenging problems and serving an important cause with creativity through my work.
Currently I am working as a Post-Bach at Los Alamos National Laboratory in Los Alamos, NM.

Computer Science

Graphics

Mathematics

Physics

Computer science has been and interest and passion of mine since I was little, and I have been a self-motivated learner of the subject ever since. While graphics has been the most consistent application of mine, I have never really specialized, but instead strived to develop a general set of problem solving skills I can bring to any situation.

Last Graphics Project: cpp2d

I have been involved in graphics programming for almost a decade now, initially starting in Java with OpenGL and slowly moving into C++, which I've stayed for the last seven years or so. This passion for graphics has since strengthened and culminated into a passion for performat low-level computing systems. This project utilizes the Vulkan api, custom memory management, and a lightweight user API. I think there is a key balance that should be struck between a nice user-friendly API and highly performat graphics systems. Check out the devlogs!

Custom Memory Allocation

In order to ensure maximum performance, the standard memory allocators are written in the framework. There is a layer of abstraction, shown in the image, where the allocation method can either be in RAM or on the GPU. This way, standard allocation techniques can easily be extended for use in graphics memory.

Multithreading

The framework is set up so that every frame can be processed concurrently. This is done by giving each frame ownership to its own command pool. This way, individual command buffer states are not tracked, and their concurrent recording can transpire.

Next Steps

The entire project is being created with the intention to maximize the processing power of the GPU. There will be as few bindings and as little allocations as can possibly happen. This way, performance is ensured.

Example Program
#include <cpp2d/Graphics.h>

using namespace cpp2d;

int main()
{
    {
        DrawWindow window(1280, 720, "");
        ...
        // Create the vertex array, specify the buffers
        VertexArray vertexArray({ BufferType::Vertex });
        vertexArray.setBufferData(0, vertices, sizeof(vertices));
        ...
        // Push the attribute data
        vertexArray[0].pushAttributes({
            Buffers::Attribute {
                .binding = 0,
                .element_count = 2,
                .location = 0,
                .offset = offsetof(Vertex, pos)
            }, ... });

        // Create the pipeline with specified shaders and attribute data
        GraphicsPipeline pipeline(
            { ShaderType::Vertex, ShaderType::Fragment }, 
            window, 
            vertexArray.getAttributeFrame()
        );
        pipeline.getShader( ShaderType::Vertex ).fromFile( "vertex.glsl" );
        pipeline.getShader(ShaderType::Fragment).fromFile("fragment.glsl");
        pipeline.create();

        // Run the main loop
        while (window.isOpen())
        {
            window.pollEvents();

            auto frameData = window.beginFrame();
            pipeline.bind(frameData);
            pipeline.setPushConstantData(frameData, constants);
            vertexArray.draw(frameData);
            window.endFrame(frameData);
        }
    }
    
    // Destroy graphics instance
    Graphics::GDI::get().destroy();
    return 0;
}
An example of the OpenGL implementation avaliable on the github page.
Copyright © 2023 Max Ortner