#ifndef NES_RENDER_H_ #define NES_RENDER_H_ #include "ppu.h" #include "overlay.h" typedef struct nes_Renderer_t { int (*init)(struct nes_Renderer_t*); void (*done)(struct nes_Renderer_t*); int (*render)(struct nes_Renderer_t*, nes_ppu*); void (*set_flags)(struct nes_Renderer_t*, uint32_t flags); void (*refresh)(struct nes_Renderer_t*); void (*draw_last_frame)(struct nes_Renderer_t*, int dim); void (*draw_text)(struct nes_Renderer_t*, const char*, int x, int y, uint32_t color); void (*text_size)(struct nes_Renderer_t*, const char*, int* w, int* h); void (*draw_done)(struct nes_Renderer_t*); Overlay overlay; uint32_t flags; void* data; } nes_Renderer; static inline int nes_render_init(nes_Renderer* rend) { return rend->init(rend); } static inline void nes_render_done(nes_Renderer* rend) { rend->done(rend); } static inline int nes_render(nes_Renderer* rend, nes_ppu* ppu) { return rend->render(rend, ppu); } static inline uint32_t nes_render_set_flags(nes_Renderer* rend, uint32_t flags) { uint32_t old_flags = rend->flags; rend->set_flags(rend, flags); rend->flags = flags; return old_flags; } static inline void nes_render_refresh(nes_Renderer* rend) { rend->refresh(rend); } static inline void nes_draw_last_frame(nes_Renderer* rend, int dim) { rend->draw_last_frame(rend, dim); } static inline void nes_text_size(nes_Renderer* rend, const char* str, int* w, int* h) { rend->text_size(rend, str, w, h); } static inline void nes_draw_text(nes_Renderer* rend, const char* str, int x, int y, uint32_t color) { rend->draw_text(rend, str, x, y, color); } static inline void nes_draw_done(nes_Renderer* rend) { rend->draw_done(rend); } #endif // NES_RENDER_H_