In practice, it's often not even necessary to implement anything except for the RendererInterface::init(), RendererInterface::destroy() and the RendererInterface::render() methods. All the others are optional methods to handle events (e.g. mouse, keyboard), inform the context that the renderer might output some custom framebuffer channels, or getting informed that the geometry of the scene has been updated, in case we need to know.