diff --git a/inc/dd.h b/inc/dd.h
index fff5e0e..b7d58a0 100644
--- a/inc/dd.h
+++ b/inc/dd.h
@@ -82,6 +82,7 @@ typedef struct CNCDDRAW
         int width;
         int height;
         int bpp;
+        int opengl_y_align;
 
         HDC hdc;
         int* tex;
diff --git a/src/dd.c b/src/dd.c
index db0846b..12f14df 100644
--- a/src/dd.c
+++ b/src/dd.c
@@ -704,6 +704,11 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
     if (nonexclusive || (g_ddraw->nonexclusive && !g_ddraw->windowed && g_ddraw->renderer == ogl_render_main))
     {
         g_ddraw->render.height++;
+        g_ddraw->render.opengl_y_align = 1;
+    }
+    else
+    {
+        g_ddraw->render.opengl_y_align = 0;
     }
 
     if (g_ddraw->windowed)
diff --git a/src/render_ogl.c b/src/render_ogl.c
index b20b0d9..8be4671 100644
--- a/src/render_ogl.c
+++ b/src/render_ogl.c
@@ -183,13 +183,13 @@ static void ogl_build_programs()
 
                 if (!g_ogl.scale_program &&
                     (g_ddraw->render.viewport.width != g_ddraw->width ||
-                    g_ddraw->render.viewport.height != g_ddraw->height))
+                        g_ddraw->render.viewport.height != g_ddraw->height))
                 {
                     g_ogl.scale_program = oglu_build_program(PASSTHROUGH_VERT_SHADER, CATMULL_ROM_FRAG_SHADER);
 
                     if (!g_ogl.scale_program)
                     {
-                        g_ogl.scale_program = 
+                        g_ogl.scale_program =
                             oglu_build_program(PASSTHROUGH_VERT_SHADER_CORE, CATMULL_ROM_FRAG_SHADER_CORE);
                     }
 
@@ -616,8 +616,10 @@ static void ogl_render()
     BOOL needs_update = FALSE;
 
     glViewport(
-        g_ddraw->render.viewport.x, g_ddraw->render.viewport.y,
-        g_ddraw->render.viewport.width, g_ddraw->render.viewport.height);
+        g_ddraw->render.viewport.x, 
+        g_ddraw->render.viewport.y + g_ddraw->render.opengl_y_align,
+        g_ddraw->render.viewport.width, 
+        g_ddraw->render.viewport.height);
 
     if (g_ogl.main_program)
     {
@@ -753,8 +755,10 @@ static void ogl_render()
                     else if (needs_update)
                     {
                         glViewport(
-                            g_ddraw->render.viewport.x, g_ddraw->render.viewport.y,
-                            g_ddraw->render.viewport.width, g_ddraw->render.viewport.height);
+                            g_ddraw->render.viewport.x, 
+                            g_ddraw->render.viewport.y + g_ddraw->render.opengl_y_align,
+                            g_ddraw->render.viewport.width, 
+                            g_ddraw->render.viewport.height);
 
                         needs_update = FALSE;
                     }
@@ -845,7 +849,7 @@ static void ogl_render()
             {
                 glViewport(
                     g_ddraw->render.viewport.x, 
-                    g_ddraw->render.viewport.y,
+                    g_ddraw->render.viewport.y + g_ddraw->render.opengl_y_align,
                     g_ddraw->render.viewport.width, 
                     g_ddraw->render.viewport.height);
             }