51 lines
998 B
C++
51 lines
998 B
C++
#ifndef VIDEO_H
|
|
#define VIDEO_H
|
|
|
|
#include <cstdint>
|
|
|
|
#include "../graphics/Rect.h"
|
|
|
|
#define SCREEN_WIDTH 320
|
|
#define SCREEN_HEIGHT 200
|
|
#define MAX_UPDATE_RECT_INDEX 255
|
|
|
|
class Video {
|
|
public:
|
|
struct PaletteEntry {
|
|
uint8_t r{0}, g{0}, b{0};
|
|
};
|
|
|
|
Video();
|
|
~Video();
|
|
|
|
void Enter();
|
|
void Exit();
|
|
|
|
void SetPaletteEntry(uint8_t index, PaletteEntry entry);
|
|
PaletteEntry GetPaletteEntry(uint8_t index);
|
|
|
|
void SetPaletteEntry(uint8_t index, PaletteEntry *entry);
|
|
void GetPaletteEntry(uint8_t index, PaletteEntry *entry);
|
|
|
|
void *GetFB();
|
|
|
|
void WaitForVerticalSync();
|
|
|
|
void UpdateRect(const Rect &rect);
|
|
void Flip();
|
|
private:
|
|
uint8_t _oldMode{0};
|
|
PaletteEntry _oldPalette[256]{};
|
|
uint8_t *_fb{nullptr};
|
|
uint8_t _renderBuffer[SCREEN_WIDTH*SCREEN_HEIGHT]{};
|
|
Rect _updatedRects[MAX_UPDATE_RECT_INDEX+1];
|
|
unsigned _updateRectIndex{0};
|
|
|
|
void SetMode(uint8_t mode);
|
|
uint8_t GetMode();
|
|
};
|
|
|
|
extern Video video;
|
|
|
|
#endif
|