class System;

class Renderer {
	public:
		Renderer(SDL_Window *window, int width, int height);
		~Renderer();

		enum Mode {Stretch, KeepAspect, KeepPixels};

		void resize(int width, int height);
		void update(System *sys);
		void present();
		void set_mode(Mode mode);
		void read_pixels(int width, int height, Uint32 format, Uint8 *buffer);

	private:
		void _render(SDL_Texture *target, SDL_Rect *destination);

		int sys_width, sys_height;
		int win_width, win_height;

    bool is_lores = false;
		Mode mode = KeepPixels;
		SDL_Renderer *renderer = nullptr;

		SDL_Texture *fb_texture = nullptr;
		SDL_Texture *fb_565_texture = nullptr;
		SDL_Texture *current = nullptr;
};
