bsnes/higan/sfc/alt/ppu-performance/background/background.hpp

69 lines
1.2 KiB
C++

class Background {
struct ID { enum : uint { BG1, BG2, BG3, BG4 }; };
struct Mode { enum : uint { BPP2, BPP4, BPP8, Mode7, Inactive }; };
struct ScreenSize { enum : uint { Size32x32, Size32x64, Size64x32, Size64x64 }; };
struct TileSize { enum : uint { Size8x8, Size16x16 }; };
Background(PPU& self, uint id);
~Background();
alwaysinline auto get_tile(uint hoffset, uint voffset) -> uint;
auto offset_per_tile(uint x, uint y, uint& hoffset, uint& voffset) -> void;
auto scanline() -> void;
auto render() -> void;
auto render_mode7() -> void;
auto serialize(serializer&) -> void;
PPU& self;
bool priority0_enable;
bool priority1_enable;
struct Regs {
uint mode;
uint priority0;
uint priority1;
bool tile_size;
uint mosaic;
uint screen_addr;
uint screen_size;
uint tiledata_addr;
uint hoffset;
uint voffset;
bool main_enable;
bool sub_enable;
} regs;
uint16** mosaic_table;
const uint id;
uint opt_valid_bit;
bool hires;
signed width;
uint tile_width;
uint tile_height;
uint mask_x;
uint mask_y;
uint scx;
uint scy;
uint hscroll;
uint vscroll;
uint mosaic_vcounter;
uint mosaic_voffset;
LayerWindow window;
friend class PPU;
};