22 #ifndef KYRA_SCREEN_EOB_SEGACD_H 23 #define KYRA_SCREEN_EOB_SEGACD_H 27 #define SEGA_PERFORMANCE true 28 #define SEGA_USE_MEMPOOL true 30 #include "kyra/graphics/screen_eob.h" 33 #include "common/memorypool.h" 54 kHScrollFullScreen = 0,
60 kVScrollFullScreen = 0,
65 SegaRenderer(Screen_EoB *screen);
68 void setResolution(
int w,
int h);
69 void setPlaneTableLocation(
int plane, uint16 addr);
73 void setupPlaneAB(
int pixelWidth,
int pixelHeigth);
77 void setupWindowPlane(
int blockX,
int blockY,
int horizontalMode,
int verticalMode);
78 void setHScrollTableLocation(
int addr);
79 void setSpriteTableLocation(
int addr);
80 void setPitch(
int pitch);
81 void setHScrollMode(
int mode);
82 void setVScrollMode(
int mode);
84 void loadToVRAM(
const void *data, uint16 dataSize, uint16 addr);
86 void memsetVRAM(
int addr, uint8 val,
int len);
87 void fillRectWithTiles(
int vramArea,
int x,
int y,
int w,
int h, uint16 nameTblEntry,
bool incr =
false,
bool topToBottom =
false,
const uint16 *patternTable = 0);
88 void writeUint16VSRAM(
int addr, uint16 value);
89 void writeUint8VRAM(
int addr, uint8 value);
90 void writeUint16VRAM(
int addr, uint16 value);
93 void render(
int destPageNum,
int renderLeft = -1,
int renderTop = -1,
int renderWidth = -1,
int renderHeight = -1,
bool spritesOnly =
false);
95 void renderPlanePart(
int plane, uint8 *dstBuffer,
int x1,
int y1,
int x2,
int y2);
96 void renderPlaneTile(uint8 *dst,
int destX,
const uint16 *nameTable,
int vScrollLSBStart,
int vScrollLSBEnd,
int hScrollTableIndex, uint16 pitch);
97 void renderSpriteTile(uint8 *dst, uint8 *mask,
int x,
int y, uint16 tile, uint8 pal,
bool vflip,
bool hflip,
bool prio);
99 template<
bool hflip,
bool oddStart,
bool oddEnd>
void renderLineFragmentM(uint8 *dst, uint8 *mask,
const uint8 *src,
int start,
int end, uint8 pal);
100 template<
bool hflip,
bool oddStart,
bool oddEnd>
void renderLineFragmentD(uint8 *dst,
const uint8 *src,
int start,
int end, uint8 pal);
101 typedef void(SegaRenderer::*renderFuncM)(uint8*, uint8*,
const uint8*, int, int, uint8);
102 typedef void(SegaRenderer::*renderFuncD)(uint8*,
const uint8*, int, int, uint8);
103 const renderFuncM *_renderLineFragmentM;
104 const renderFuncD *_renderLineFragmentD;
106 template<
bool hflip>
void renderLineFragment(uint8 *dst, uint8 *mask,
const uint8 *src,
int start,
int end, uint8 pal);
109 void initPrioRenderTask(uint8 *dst, uint8 *mask,
const uint8 *src,
int start,
int end, uint8 pal,
bool hflip);
110 void clearPrioChain();
113 SegaPlane() : blockX(0), blockY(0), w(0), h(0), mod(0), nameTable(0), nameTableSize(0) {}
117 uint16 nameTableSize;
120 SegaPlane _planes[3];
123 uint16 *_hScrollTable;
124 uint16 *_spriteTable;
129 uint16 _numSpritesMax;
131 struct PrioTileRenderObj {
132 PrioTileRenderObj(PrioTileRenderObj *chainEnd, uint8 *dst, uint8 *mask,
const uint8 *src,
int start,
int end, uint8 pal,
bool hflip) :
133 _pred(chainEnd), _next(0), _dst(dst), _mask(mask), _src(src), _start(start), _end(end), _pal(pal), _hflip(hflip) {
144 PrioTileRenderObj *_pred;
145 PrioTileRenderObj *_next;
151 PrioTileRenderObj *_prioChainStart, *_prioChainEnd;
152 uint16 _screenW, _screenH, _blocksW, _blocksH;
158 SegaAnimator(SegaRenderer *renderer);
161 void initSprite(
int id, int16 x, int16 y, uint16 nameTbl, uint16 hw);
163 void moveMorphSprite(
int id, uint16 nameTbl, int16 addX, int16 addY);
164 void moveSprites(
int id, uint16 num, int16 addX, int16 addY);
165 void moveSprites2(
int id, uint16 num, int16 addX, int16 addY);
179 SegaRenderer *_renderer;
183 class ScrollManager {
185 ScrollManager(SegaRenderer *renderer);
188 void setVScrollTimers(uint16 destA,
int incrA,
int delayA, uint16 destB,
int incrB,
int delayB);
189 void setHScrollTimers(uint16 destA,
int incrA,
int delayA, uint16 destB,
int incrB,
int delayB);
190 void updateScrollTimers();
195 ScrollTimer() : _offsCur(0), _offsDest(0), _incr(0), _delay(0), _timer(0) {}
203 ScrollTimer *_vScrollTimers;
204 ScrollTimer *_hScrollTimers;
205 SegaRenderer *_renderer;
Definition: memorypool.h:139
Definition: detection.h:27