Initial port to Linux (using Allegro).
64-bit fixes. Some changes to aid portability. A few other tweaks.
This commit is contained in:
parent
4b3f77c926
commit
56b455844e
70 changed files with 12702 additions and 282 deletions
109
src/allegro-video.c
Normal file
109
src/allegro-video.c
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
#include "allegro-main.h"
|
||||
#include "ibm.h"
|
||||
#include "video.h"
|
||||
|
||||
#include "allegro-video.h"
|
||||
|
||||
static PALETTE cgapal=
|
||||
{
|
||||
{0,0,0},{0,42,0},{42,0,0},{42,21,0},
|
||||
{0,0,0},{0,42,42},{42,0,42},{42,42,42},
|
||||
{0,0,0},{21,63,21},{63,21,21},{63,63,21},
|
||||
{0,0,0},{21,63,63},{63,21,63},{63,63,63},
|
||||
|
||||
{0,0,0},{0,0,42},{0,42,0},{0,42,42},
|
||||
{42,0,0},{42,0,42},{42,21,00},{42,42,42},
|
||||
{21,21,21},{21,21,63},{21,63,21},{21,63,63},
|
||||
{63,21,21},{63,21,63},{63,63,21},{63,63,63},
|
||||
|
||||
{0,0,0},{0,21,0},{0,0,42},{0,42,42},
|
||||
{42,0,21},{21,10,21},{42,0,42},{42,0,63},
|
||||
{21,21,21},{21,63,21},{42,21,42},{21,63,63},
|
||||
{63,0,0},{42,42,0},{63,21,42},{41,41,41},
|
||||
|
||||
{0,0,0},{0,42,42},{42,0,0},{42,42,42},
|
||||
{0,0,0},{0,42,42},{42,0,0},{42,42,42},
|
||||
{0,0,0},{0,63,63},{63,0,0},{63,63,63},
|
||||
{0,0,0},{0,63,63},{63,0,0},{63,63,63},
|
||||
};
|
||||
|
||||
static uint32_t pal_lookup[256];
|
||||
|
||||
static void allegro_blit_memtoscreen(int x, int y, int y1, int y2, int w, int h);
|
||||
static void allegro_blit_memtoscreen_8(int x, int y, int w, int h);
|
||||
static BITMAP *buffer32_vscale;
|
||||
void allegro_video_init()
|
||||
{
|
||||
int c;
|
||||
|
||||
set_color_depth(32);
|
||||
set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
|
||||
video_blit_memtoscreen = allegro_blit_memtoscreen;
|
||||
video_blit_memtoscreen_8 = allegro_blit_memtoscreen_8;
|
||||
|
||||
for (c = 0; c < 256; c++)
|
||||
pal_lookup[c] = makecol(cgapal[c].r << 2, cgapal[c].g << 2, cgapal[c].b << 2);
|
||||
|
||||
buffer32_vscale = create_bitmap(2048, 2048);
|
||||
}
|
||||
|
||||
void allegro_video_close()
|
||||
{
|
||||
destroy_bitmap(buffer32_vscale);
|
||||
}
|
||||
|
||||
void allegro_video_update_size(int x, int y)
|
||||
{
|
||||
if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, x, y, 0, 0))
|
||||
fatal("Failed to set gfx mode %i,%i : %s\n", x, y, allegro_error);
|
||||
}
|
||||
|
||||
static void allegro_blit_memtoscreen(int x, int y, int y1, int y2, int w, int h)
|
||||
{
|
||||
if (h < winsizey)
|
||||
{
|
||||
int yy;
|
||||
|
||||
for (yy = y+y1; yy < y+y2; yy++)
|
||||
{
|
||||
if (yy >= 0)
|
||||
{
|
||||
memcpy(&((uint32_t *)buffer32_vscale->line[yy*2])[x], &((uint32_t *)buffer32->line[yy])[x], w*4);
|
||||
memcpy(&((uint32_t *)buffer32_vscale->line[(yy*2)+1])[x], &((uint32_t *)buffer32->line[yy])[x], w*4);
|
||||
}
|
||||
}
|
||||
|
||||
blit(buffer32_vscale, screen, x, (y+y1)*2, 0, y1, w, (y2-y1)*2);
|
||||
}
|
||||
else
|
||||
blit(buffer32, screen, x, y+y1, 0, y1, w, y2-y1);
|
||||
}
|
||||
|
||||
static void allegro_blit_memtoscreen_8(int x, int y, int w, int h)
|
||||
{
|
||||
int xx, yy;
|
||||
|
||||
if (y < 0)
|
||||
{
|
||||
h += y;
|
||||
y = 0;
|
||||
}
|
||||
|
||||
for (yy = y; yy < y+h; yy++)
|
||||
{
|
||||
int dy = yy*2;
|
||||
for (xx = x; xx < x+w; xx++)
|
||||
{
|
||||
((uint32_t *)buffer32->line[dy])[xx] =
|
||||
((uint32_t *)buffer32->line[dy + 1])[xx] = pal_lookup[buffer->line[yy][xx]];
|
||||
}
|
||||
}
|
||||
|
||||
if (readflash)
|
||||
{
|
||||
rectfill(buffer32, x+SCREEN_W-40, y*2+8, SCREEN_W-8, y*2+14, makecol(255, 255, 255));
|
||||
readflash = 0;
|
||||
}
|
||||
|
||||
blit(buffer32, screen, x, y*2, 0, 0, w, h*2);
|
||||
}
|
||||
Loading…
Reference in a new issue