game basically handles the game logic and delegates audio/video to respective management tools track current state and updates state calls renderers to draw the scene to framebuffer(s) calls a mixer to play audio for a scene key functions: render() update() holds any scenes required for gameplay holds window for game to be drawn in scene basically a central repository for raw data in a scene holds cameras that exist in a given scene holds objects that exist in a given scene holds textures that exists for a given scene holds audio that exists for a given scene renderer basically takes a scene and draws it a specific way to a framebuffer key functions: set_vpmatrix(mat4&) set up view-projection matrix for use in rendering render(scene&) draw the given scene the this renderer's framebuffer vertex basically describes a vertex holds position holds texture coordinates holds vertex color holds normals mesh basically holds vertex data for a given shape holds an array of vertices that describe a shape to draw key functions: render(shader&) draw this mesh onto the currently bound framebuffer using the given shader model basically handles a collection of meshes that constitute a single entity hold an array of meshes that describe the composition of a complex model key functions: render(shader&) draw this model onto the currently bound framebuffer using the given shader instance basically holds handles to a mesh/model/any other needed data for use by multiple objects renderable basically any type with a render(shader_program&) function hold an instance object reffing to a model hold a model matrix square is a renderable that specifically references a square model