diff --git a/src/render.c b/src/render.c
index eb5cf8c..f446c05 100644
--- a/src/render.c
+++ b/src/render.c
@@ -652,15 +652,26 @@ static void Render()
                 
                 if (ddraw->render.width != ddraw->width || ddraw->render.height != ddraw->height)
                 {
+                    static BOOL needsUpdate;
+
                     if (ChildWindowExists)
                     {
                         glClear(GL_COLOR_BUFFER_BIT);
-                        glViewport(0, ddraw->render.height - ddraw->height, ddraw->width, ddraw->height);
+
+                        if (!needsUpdate)
+                        {
+                            glViewport(0, ddraw->render.height - ddraw->height, ddraw->width, ddraw->height);
+                            needsUpdate = TRUE;
+                        }
                     }
-                    else
+                    else if (needsUpdate)
+                    {
                         glViewport(
                             ddraw->render.viewport.x, ddraw->render.viewport.y,
                             ddraw->render.viewport.width, ddraw->render.viewport.height);
+
+                        needsUpdate = FALSE;
+                    }
                 }
             }
         }
diff --git a/src/render_d3d9.c b/src/render_d3d9.c
index e47d6c8..9d0ce77 100644
--- a/src/render_d3d9.c
+++ b/src/render_d3d9.c
@@ -383,13 +383,20 @@ DWORD WINAPI render_d3d9_main(void)
 
                 if (ddraw->render.width != ddraw->width || ddraw->render.height != ddraw->height)
                 {
+                    static BOOL needsUpdate;
+
                     if (ChildWindowExists)
                     {
                         IDirect3DDevice9_Clear(D3dDev, 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
-                        UpdateVertices(FALSE, FALSE);
+
+                        if (!needsUpdate && UpdateVertices(FALSE, FALSE))
+                            needsUpdate = TRUE;
+                    }
+                    else if (needsUpdate)
+                    {
+                        if (UpdateVertices(FALSE, TRUE))
+                            needsUpdate = FALSE;
                     }
-                    else
-                        UpdateVertices(FALSE, TRUE);
                 }
             }
         }