GameObject which contains a pointer to a GraphicsObject which contains a pointer to a Surface which contains a string identifier for a mesh and for a material.
I have also produced a resource manager for meshes and materials which currently caches by a supplied name. Later I will use a reference counting pointer to allow me to know when to destroy the created resource.
Screenshot of it working:
Rectangle on the left uses no meterial and the one on the right uses a copper meterial, they are both using the same mesh.