From 60272b94f26ff9cdd2c93271842af575c2d41a7a Mon Sep 17 00:00:00 2001 From: DeaDDooMER Date: Fri, 17 Apr 2020 08:35:12 +0400 Subject: [PATCH] render: opengl: add screen scaling --- src/config.c | 8 ++++---- src/gl/render.c | 35 ++++++++++++++++++++++------------- src/render.h | 2 -- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/config.c b/src/config.c index e228309..f80fd26 100644 --- a/src/config.c +++ b/src/config.c @@ -64,8 +64,8 @@ static const cfg_t arg[] = { {"mon", &nomon, SW_OFF}, // {"gamma", &gammaa, DWORD}, {"warp", &_warp, BYTE}, - {"width", &SCRW, DWORD}, - {"height", &SCRH, DWORD}, +// {"width", &SCRW, DWORD}, +// {"height", &SCRH, DWORD}, // {"config", NULL, cfg_file, STRING}, {NULL, NULL, NONE} // end }; @@ -77,8 +77,8 @@ static const cfg_t cfg[] = { // {"fullscreen", &fullscreen, SW_ON}, {"sky", &w_horiz, SW_ON}, // {"gamma", &gammaa, DWORD}, - {"screen_width", &SCRW, DWORD}, - {"screen_height", &SCRH, DWORD}, +// {"screen_width", &SCRW, DWORD}, +// {"screen_height", &SCRH, DWORD}, {"music_random", &music_random, SW_ON}, {"music_time", &music_time, DWORD}, {"music_fade", &music_fade, DWORD}, diff --git a/src/gl/render.c b/src/gl/render.c index 22bbcd9..f0619ba 100644 --- a/src/gl/render.c +++ b/src/gl/render.c @@ -80,8 +80,11 @@ typedef struct image { } image; /* Render Specific */ -int SCRW = 320; // public -int SCRH = 200; // public +static int SCRW = 320; +static int SCRH = 200; +static int screen_width = 320; +static int screen_height = 200; +static float screen_scale = 1.0; static rgb playpal[256]; static byte bright[256]; static GLuint lastTexture; @@ -544,12 +547,16 @@ static void R_gl_free_image (image *img) { img->res = -1; } -static void R_gl_draw_quad (int x, int y, int w, int h) { - glBegin(GL_QUADS); +static void R_gl_quad_vetexes (int x, int y, int w, int h) { glVertex2i(x + w, y); glVertex2i(x, y); glVertex2i(x, y + h); glVertex2i(x + w, y + h); +} + +static void R_gl_draw_quad (int x, int y, int w, int h) { + glBegin(GL_QUADS); + R_gl_quad_vetexes(x, y, w, h); glEnd(); } @@ -605,12 +612,14 @@ static void R_gl_set_color (byte c) { } static void R_gl_setclip (int x, int y, int w, int h) { - glScissor(x, SCRH - h - y, w, h); + glScissor(x * screen_scale, (SCRH - h - y) * screen_scale, w * screen_scale, h * screen_scale); } static void R_gl_setmatrix (void) { - glScissor(0, 0, SCRW, SCRH); - glViewport(0, 0, SCRW, SCRH); + SCRW = screen_width / screen_scale; + SCRH = screen_height / screen_scale; + glScissor(0, 0, screen_width, screen_height); + glViewport(0, 0, screen_width, screen_height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, SCRW, SCRH, 0, 0, 1); @@ -1031,11 +1040,11 @@ static void R_draw_dots (void) { glDisable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_TEXTURE_2D); - glBegin(GL_POINTS); + glBegin(GL_QUADS); for (i = 0; i < MAXDOT; i++) { if (dot[i].t != 0) { R_gl_set_color(dot[i].c); - glVertex2i(dot[i].o.x, dot[i].o.y + 1); + R_gl_quad_vetexes(dot[i].o.x, dot[i].o.y, 1, 1); } } glEnd(); @@ -1325,6 +1334,7 @@ static void R_draw_smoke (void) { static void R_draw_effects (void) { enum {NONE, TFOG, IFOG, BUBL}; // copypasted from fx.c int i, s; + glPointSize(screen_scale); for (i = 0; i < MAXFX; ++i) { switch (fx[i].t) { case TFOG: @@ -1339,10 +1349,8 @@ static void R_draw_effects (void) { glDisable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_TEXTURE_2D); - glBegin(GL_POINTS); R_gl_set_color(0xC0 + fx[i].s); - glVertex2i(fx[i].x >> 8, (fx[i].y >> 8) + 1); - glEnd(); + R_gl_draw_quad(fx[i].x >> 8, fx[i].y >> 8, 1, 1); break; } } @@ -1853,7 +1861,8 @@ void R_set_videomode (int w, int h, int fullscreen) { ERR_failinit("Unable to set video mode\n"); } } - Y_get_videomode(&SCRW, &SCRH); + Y_get_videomode(&screen_width, &screen_height); + screen_scale = max(1, screen_width / 320); root = R_cache_new(); assert(root); R_alloc(); diff --git a/src/render.h b/src/render.h index 73fa932..443b98f 100644 --- a/src/render.h +++ b/src/render.h @@ -3,8 +3,6 @@ #include "menu.h" -extern int SCRW, SCRH; // from vga.c - const menu_t *R_menu (void); void R_init (void); void R_draw (void); -- 2.29.2