X-Git-Url: https://deadsoftware.ru/gitweb?p=flatwaifu.git;a=blobdiff_plain;f=src%2Fgl%2Frender.c;h=c4da0dc3844e8644cb14ecdadf740ca49d989e9d;hp=f0619ba5ccfa89b5862939bfdfe14b5fdfbc42dc;hb=2b481ae25adcf3bebf37be182eafc8bfa0acb4c1;hpb=60272b94f26ff9cdd2c93271842af575c2d41a7a diff --git a/src/gl/render.c b/src/gl/render.c index f0619ba..c4da0dc 100644 --- a/src/gl/render.c +++ b/src/gl/render.c @@ -80,11 +80,15 @@ typedef struct image { } image; /* Render Specific */ -static int SCRW = 320; -static int SCRH = 200; +static int SCRW; +static int SCRH; +static float screen_scale; static int screen_width = 320; static int screen_height = 200; -static float screen_scale = 1.0; +static byte screen_full = 0; +static int init_screen_width = 0; +static int init_screen_height = 0; +static byte init_screen_full = 0xFF; static rgb playpal[256]; static byte bright[256]; static GLuint lastTexture; @@ -153,10 +157,12 @@ static const char *anm[ANIT - 1][5] = { {"W73A_1", "W73A_2", NULL, NULL, NULL}, {"RP2_1", "RP2_2", "RP2_3", "RP2_4", NULL} }; +static byte w_horiz = 1; static int max_wall_width; static int max_wall_height; static int max_textures; static image walp[256]; +static byte walswp[256]; static byte walani[256]; static image anip[ANIT][5]; static byte anic[ANIT]; @@ -536,7 +542,7 @@ static image R_gl_loadimage (const char name[8]) { } static image R_gl_get_special_spr (const char n[4], int s, int d, rgba *(*fn)(vgaimg*)) { - return R_gl_get_special_image(F_getsprid(n, s, d), fn); + return R_gl_get_special_image(F_getsprid(n, s, d, NULL), fn); } static void R_gl_free_image (image *img) { @@ -630,10 +636,7 @@ static void R_gl_setmatrix (void) { /* --- Misc --- */ static image Z_getspr (const char n[4], int s, int d, char *dir) { - int h = F_getsprid(n, s, d); - if (dir != NULL) { - *dir = (h & 0x8000) ? 1 : 0; - } + int h = F_getsprid(n, s, d, dir); return R_gl_getimage(h); } @@ -1862,6 +1865,7 @@ void R_set_videomode (int w, int h, int fullscreen) { } } Y_get_videomode(&screen_width, &screen_height); + screen_full = Y_get_fullscreen(); screen_scale = max(1, screen_width / 320); root = R_cache_new(); assert(root); @@ -1938,10 +1942,35 @@ const menu_t *R_menu (void) { return &video_menu; } +const cfg_t *R_args (void) { + static const cfg_t args[] = { + { "fullscr", &init_screen_full, Y_SW_ON }, + { "window", &init_screen_full, Y_SW_OFF }, + { "width", &init_screen_width, Y_DWORD }, + { "height", &init_screen_height, Y_DWORD }, + { NULL, NULL, 0 } // end + }; + return args; +} + +const cfg_t *R_conf (void) { + static const cfg_t conf[] = { + { "sky", &w_horiz, Y_SW_ON }, + { "fullscreen", &screen_full, Y_SW_ON }, + { "screen_width", &screen_width, Y_DWORD }, + { "screen_height", &screen_height, Y_DWORD }, + { NULL, NULL, 0 } // end + }; + return conf; +} + void R_init (void) { logo("R_init: intialize opengl render\n"); R_init_playpal(); - R_set_videomode(SCRW, SCRH, 0); + init_screen_width = init_screen_width > 0 ? init_screen_width : screen_width; + init_screen_height = init_screen_height > 0 ? init_screen_height : screen_height; + init_screen_full = init_screen_full != 0xFF ? init_screen_full : screen_full; + R_set_videomode(init_screen_width, init_screen_height, init_screen_full); } void R_done (void) { @@ -2008,7 +2037,7 @@ void R_begin_load (void) { max_textures = 1; } -void R_load (char s[8], int f) { +void R_load (char s[8]) { assert(max_textures < 256); if (!s[0]) { walp[max_textures] = (image) { @@ -2030,9 +2059,6 @@ void R_load (char s[8], int f) { }; } else { walp[max_textures] = R_gl_loadimage(s); - if (f) { - walp[max_textures].res |= 0x8000; - } if (s[0] == 'S' && s[1] == 'W' && s[4] == '_') { walswp[max_textures] = 0; } @@ -2051,7 +2077,7 @@ void R_end_load (void) { if (walswp[i] == 0) { R_get_name(i, s); s[5] ^= 1; - g = F_getresid(s) | (walp[i].res & 0x8000); + g = F_getresid(s); k = 1; while (k < 256 && walp[k].res != g) { k += 1; @@ -2061,7 +2087,7 @@ void R_end_load (void) { j += 1; max_textures += 1; walp[k] = R_gl_getimage(g); - walf[k] = g & 0x8000 ? 1 : 0; + walf[k] = walf[i]; } walswp[i] = k; walswp[k] = i; @@ -2076,3 +2102,14 @@ void R_loadsky (int sky) { R_gl_free_image(&horiz); horiz = R_gl_loadimage(s); } + +void R_switch_texture (int x, int y) { + assert(x >= 0 && x < FLDW); + assert(y >= 0 && y < FLDH); + fldb[y][x] = walswp[fldb[y][x]]; +} + +int R_get_swp (int n) { + assert(n >= 0 && n < 256); + return walswp[n]; +}