NESe (pronounced "Nessie") is a NES emulator based on the e6502 emulator, also written in C with a focus on speed and portability for use on embedded platforms, especially ARM.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.4KB

  1. #ifndef NES_RENDER_H_
  2. #define NES_RENDER_H_
  3. #include "ppu.h"
  4. #include "overlay.h"
  5. typedef struct nes_Renderer_t {
  6. int (*init)(struct nes_Renderer_t*);
  7. void (*done)(struct nes_Renderer_t*);
  8. int (*render)(struct nes_Renderer_t*, nes_ppu*);
  9. void (*draw_last_frame)(struct nes_Renderer_t*, int dim);
  10. void (*draw_text)(struct nes_Renderer_t*, const char*, int x, int y);
  11. void (*text_size)(struct nes_Renderer_t*, const char*, int* w, int* h);
  12. void (*draw_done)(struct nes_Renderer_t*);
  13. Overlay overlay;
  14. void* data;
  15. } nes_Renderer;
  16. static inline int nes_render_init(nes_Renderer* rend) {
  17. return rend->init(rend);
  18. }
  19. static inline void nes_render_done(nes_Renderer* rend) {
  20. rend->done(rend);
  21. }
  22. static inline int nes_render(nes_Renderer* rend, nes_ppu* ppu) {
  23. return rend->render(rend, ppu);
  24. }
  25. static inline void nes_draw_last_frame(nes_Renderer* rend,
  26. int dim) {
  27. rend->draw_last_frame(rend, dim);
  28. }
  29. static inline void nes_text_size(nes_Renderer* rend,
  30. const char* str,
  31. int* w, int* h) {
  32. rend->text_size(rend, str, w, h);
  33. }
  34. static inline void nes_draw_text(nes_Renderer* rend,
  35. const char* str, int x, int y) {
  36. rend->draw_text(rend, str, x, y);
  37. }
  38. static inline void nes_draw_done(nes_Renderer* rend) {
  39. rend->draw_done(rend);
  40. }
  41. #endif // NES_RENDER_H_