projects
/
retroray
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
stop appending repeat keys to the input buffer
[retroray]
/
src
/
dos
/
vidsys.c
diff --git
a/src/dos/vidsys.c
b/src/dos/vidsys.c
index
7b9f3d5
..
9ee925e
100644
(file)
--- a/
src/dos/vidsys.c
+++ b/
src/dos/vidsys.c
@@
-197,17
+197,38
@@
void vid_getpal(int idx, int count, struct vid_color *col)
cur_mode->ops.getpal(idx, count, col);
}
cur_mode->ops.getpal(idx, count, col);
}
+void vid_blit(int x, int y, int w, int h, void *src, int pitch)
+{
+ if(pitch <= 0) {
+ pitch = cur_mode->width << 2;
+ }
+ cur_mode->ops.blit(x, y, w, h, src, pitch);
+}
+
void vid_blitfb(void *fb, int pitch)
{
if(pitch <= 0) {
void vid_blitfb(void *fb, int pitch)
{
if(pitch <= 0) {
- pitch = cur_mode->pitch;
+ pitch = cur_mode->width << 2;
}
cur_mode->ops.blitfb(fb, pitch);
}
}
cur_mode->ops.blitfb(fb, pitch);
}
+void vid_blit32(int x, int y, int w, int h, uint32_t *src, int pitch)
+{
+ if(cur_mode->bpp == 32) {
+ vid_blit(x, y, w, h, src, pitch);
+ return;
+ }
+
+ if(pitch <= 0) {
+ pitch = cur_mode->width << 2;
+ }
+ /* XXX */
+}
+
void vid_blitfb32(uint32_t *src, int pitch)
{
void vid_blitfb32(uint32_t *src, int pitch)
{
- int i, j, winpos, winleft;
+ int i, j, winpos, winleft, endskip;
unsigned char *dest;
uint16_t *dest16;
unsigned char *dest;
uint16_t *dest16;
@@
-223,7
+244,7
@@
void vid_blitfb32(uint32_t *src, int pitch)
if(vid_islinear()) {
winleft = INT_MAX;
} else {
if(vid_islinear()) {
winleft = INT_MAX;
} else {
- winleft = 65536;/*cur_mode->win_size << 10;*/
+ winleft = cur_mode->win_size << 10;
winpos = 0;
vid_setwin(0, 0);
}
winpos = 0;
vid_setwin(0, 0);
}
@@
-242,22
+263,26
@@
void vid_blitfb32(uint32_t *src, int pitch)
case 24:
dest = vid_vmem;
case 24:
dest = vid_vmem;
+ endskip = cur_mode->pitch - cur_mode->width * 3;
+
for(i=0; i<cur_mode->height; i++) {
for(j=0; j<cur_mode->width; j++) {
uint32_t pixel = src[j];
if(winleft <= 0) {
winpos += cur_mode->win_step;
vid_setwin(0, winpos);
for(i=0; i<cur_mode->height; i++) {
for(j=0; j<cur_mode->width; j++) {
uint32_t pixel = src[j];
if(winleft <= 0) {
winpos += cur_mode->win_step;
vid_setwin(0, winpos);
- winleft = 65536;/*cur_mode->win_size << 10;*/
+ winleft = cur_mode->win_size << 10;
dest = vid_vmem;
}
dest = vid_vmem;
}
- dest[0] = (pixel >> 16) & 0xff;
+ dest[0] = pixel & 0xff;
dest[1] = (pixel >> 8) & 0xff;
dest[1] = (pixel >> 8) & 0xff;
- dest[2] = pixel & 0xff;
+ dest[2] = (pixel >> 16) & 0xff;
dest += 3;
winleft -= 3;
}
src = (uint32_t*)((char*)src + pitch);
dest += 3;
winleft -= 3;
}
src = (uint32_t*)((char*)src + pitch);
+ dest += endskip;
+ winleft -= endskip;
}
break;
}
break;