dosgame1/system/Video.h

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