- Implemented vec3 and mat3
- Added types header for real type
Implemented a missing matrix function, and made inverse not use the index operator.
Made some CMake changes
Added a bunch of stub files to implement later
Implemented a global modular Logger
Added Assert() functionality, linked to the Logger’s error stream.
Time to start the Graphics library.
Made lots of changes.
Added Device - Stores information about objects created on the GPU. Objects are created and “uploaded” to the GPU here.
Added Pipeline - Stores transformation matrices and is responsible for rendering meshes.
Changed Mesh - Mesh now represents the GPU storage of the mesh. MeshData holds the vertex data in main memory.
Added Texture - Like Mesh, represents the GPU storage of a texture. TextureData holds the pixel data.
Texture objects work. Currently using Pipeline::SetDiffuseTexture - soon to be replaced by materials.
Added Shader class. To be implemented.
Added Shader - shaders can be created from files.
Added Material - materials hold compiled shader programs and uniforms.
Device now has Pipeline as a member. Call GetPipeline() to grab the device’s main pipeline.
You can also make your own Pipeline if needed.
Reuploading a shader should automatically reupload the materials that reference it, though this is not tested yet.

Next: Instanced Materials,
Materials work: Create a material from a vertex and fragment shader, and set its uniforms. Currently supports Texture, vec4, vec3, and float uniforms
Added Surfaces: A Surface is a complete FBO and its attachments. Currently it’s just a diffuse texture and a depth, but I plan to add G-Buffers (normals, specular, other?).

I would like to make Surfaces modular, but that seems like a lot of work. They might need containers of attachments, more like a Material.
Made a cool demo.