DEADSOFTWARE

render: opengl: add screen scaling
authorDeaDDooMER <deaddoomer@deadsoftware.ru>
Fri, 17 Apr 2020 04:35:12 +0000 (08:35 +0400)
committerDeaDDooMER <deaddoomer@deadsoftware.ru>
Fri, 17 Apr 2020 04:35:12 +0000 (08:35 +0400)
src/config.c
src/gl/render.c
src/render.h

index e228309b2398b23f8a3f28d9d6dbad79157b7523..f80fd2619c1ac5662c26733e392b07a829cd5474 100644 (file)
@@ -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},
index 22bbcd99fa87e6f298419a021677baf85b43b349..f0619ba5ccfa89b5862939bfdfe14b5fdfbc42dc 100644 (file)
@@ -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();
index 73fa932dc9d323d076fb3c05906669449876b4fd..443b98f5e3c62758e826c711582e8658146f2ee6 100644 (file)
@@ -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);