notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
revive pandora and win32 builds, rm gp2x dep for linux, lots of refactoring
[picodrive.git]
/
pico
/
draw.c
diff --git
a/pico/draw.c
b/pico/draw.c
index
180045d
..
c432bd5
100644
(file)
--- a/
pico/draw.c
+++ b/
pico/draw.c
@@
-54,6
+54,7
@@
int HighPreSpr[80*2+1]; // slightly preprocessed sprites
unsigned char HighLnSpr[240][3 + MAX_LINE_SPRITES]; // sprite_count, ^flags, tile_count, [spritep]...
\r
\r
int rendstatus, rendstatus_old;
\r
unsigned char HighLnSpr[240][3 + MAX_LINE_SPRITES]; // sprite_count, ^flags, tile_count, [spritep]...
\r
\r
int rendstatus, rendstatus_old;
\r
+int rendlines;
\r
int DrawScanline;
\r
int PicoDrawMask = -1;
\r
\r
int DrawScanline;
\r
int PicoDrawMask = -1;
\r
\r
@@
-1404,21
+1405,25
@@
static int DrawDisplay(int sh)
// MUST be called every frame
\r
PICO_INTERNAL void PicoFrameStart(void)
\r
{
\r
// MUST be called every frame
\r
PICO_INTERNAL void PicoFrameStart(void)
\r
{
\r
+ int lines = 224;
\r
+
\r
// prepare to do this frame
\r
rendstatus = 0;
\r
// prepare to do this frame
\r
rendstatus = 0;
\r
- if ((Pico.video.reg[12]
&
6) == 6)
\r
+ if ((Pico.video.reg[12]
&
6) == 6)
\r
rendstatus |= PDRAW_INTERLACE; // interlace mode
\r
rendstatus |= PDRAW_INTERLACE; // interlace mode
\r
+ if (!(Pico.video.reg[12] & 1))
\r
+ rendstatus |= PDRAW_32_COLS;
\r
if (Pico.video.reg[1] & 8)
\r
if (Pico.video.reg[1] & 8)
\r
-
rendstatus |= PDRAW_240LINES
;
\r
+
lines = 240
;
\r
\r
DrawScanline = 0;
\r
skip_next_line = 0;
\r
\r
\r
DrawScanline = 0;
\r
skip_next_line = 0;
\r
\r
- if (rendstatus != rendstatus_old) {
\r
+ if (rendstatus != rendstatus_old || lines != rendlines) {
\r
+ rendlines = lines;
\r
rendstatus_old = rendstatus;
\r
rendstatus_old = rendstatus;
\r
- emu_video_mode_change((rendstatus & PDRAW_240LINES) ? 0 : 8,
\r
- (rendstatus & PDRAW_240LINES) ? 240 : 224,
\r
- (Pico.video.reg[12] & 1) ? 0 : 1);
\r
+ emu_video_mode_change((lines == 240) ? 0 : 8,
\r
+ lines, (Pico.video.reg[12] & 1) ? 0 : 1);
\r
}
\r
\r
if (PicoOpt & POPT_ALT_RENDERER)
\r
}
\r
\r
if (PicoOpt & POPT_ALT_RENDERER)
\r
@@
-1445,6
+1450,8
@@
static void DrawBlankedLine(int line, int offs, int sh, int bgc)
\r
static void PicoLine(int line, int offs, int sh, int bgc)
\r
{
\r
\r
static void PicoLine(int line, int offs, int sh, int bgc)
\r
{
\r
+ int skip = 0;
\r
+
\r
if (skip_next_line > 0) {
\r
skip_next_line--;
\r
return;
\r
if (skip_next_line > 0) {
\r
skip_next_line--;
\r
return;
\r
@@
-1452,7
+1459,12
@@
static void PicoLine(int line, int offs, int sh, int bgc)
\r
DrawScanline = line;
\r
if (PicoScanBegin != NULL)
\r
\r
DrawScanline = line;
\r
if (PicoScanBegin != NULL)
\r
- skip_next_line = PicoScanBegin(line + offs);
\r
+ skip = PicoScanBegin(line + offs);
\r
+
\r
+ if (skip) {
\r
+ skip_next_line = skip - 1;
\r
+ return;
\r
+ }
\r
\r
// Draw screen:
\r
BackFill(bgc, sh);
\r
\r
// Draw screen:
\r
BackFill(bgc, sh);
\r
@@
-1472,7
+1484,7
@@
void PicoDrawSync(int to, int blank_last_line)
int sh = (Pico.video.reg[0xC] & 8) >> 3; // shadow/hilight?
\r
int bgc = Pico.video.reg[7];
\r
\r
int sh = (Pico.video.reg[0xC] & 8) >> 3; // shadow/hilight?
\r
int bgc = Pico.video.reg[7];
\r
\r
- if (
!(rendstatus & PDRAW_240LINES)
)
\r
+ if (
rendlines != 240
)
\r
offs = 8;
\r
\r
// need to know which pixels are bg for 32x
\r
offs = 8;
\r
\r
// need to know which pixels are bg for 32x
\r