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); }