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.
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

74 行
1.9KB

  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 (*set_flags)(struct nes_Renderer_t*, uint32_t flags);
  10. void (*refresh)(struct nes_Renderer_t*);
  11. void (*draw_last_frame)(struct nes_Renderer_t*, int dim);
  12. void (*draw_text)(struct nes_Renderer_t*, const char*, int x, int y, uint32_t color);
  13. void (*text_size)(struct nes_Renderer_t*, const char*, int* w, int* h);
  14. void (*draw_done)(struct nes_Renderer_t*);
  15. Overlay overlay;
  16. uint32_t flags;
  17. void* data;
  18. } nes_Renderer;
  19. static inline int nes_render_init(nes_Renderer* rend) {
  20. return rend->init(rend);
  21. }
  22. static inline void nes_render_done(nes_Renderer* rend) {
  23. rend->done(rend);
  24. }
  25. static inline int nes_render(nes_Renderer* rend, nes_ppu* ppu) {
  26. return rend->render(rend, ppu);
  27. }
  28. static inline uint32_t nes_render_set_flags(nes_Renderer* rend,
  29. uint32_t flags) {
  30. uint32_t old_flags = rend->flags;
  31. rend->set_flags(rend, flags);
  32. rend->flags = flags;
  33. return old_flags;
  34. }
  35. static inline void nes_render_refresh(nes_Renderer* rend) {
  36. rend->refresh(rend);
  37. }
  38. static inline void nes_draw_last_frame(nes_Renderer* rend,
  39. int dim) {
  40. rend->draw_last_frame(rend, dim);
  41. }
  42. static inline void nes_text_size(nes_Renderer* rend,
  43. const char* str,
  44. int* w, int* h) {
  45. rend->text_size(rend, str, w, h);
  46. }
  47. static inline void nes_draw_text(nes_Renderer* rend,
  48. const char* str, int x, int y,
  49. uint32_t color) {
  50. rend->draw_text(rend, str, x, y, color);
  51. }
  52. static inline void nes_draw_done(nes_Renderer* rend) {
  53. rend->draw_done(rend);
  54. }
  55. #endif // NES_RENDER_H_