Backend renderer interface:
class render_context {
public:
virtual ~render_context() = 0;
virtual void begin() = 0;
virtual void end() = 0;
virtual void draw_rectangle(const std::string& texture, glm::vec2 position, glm::vec2 size) = 0;