Fix OpenGL samples when using HiDPI displays

OpenGL seems to operate using physical pixels, so we need to factor in the
scale factor when setting the GL viewport.

Closes #17391.

Closes https://github.com/wxWidgets/wxWidgets/pull/1470
This commit is contained in:
Scott Talbert
2019-08-06 23:42:41 -04:00
committed by Vadim Zeitlin
parent 0ff713c945
commit b134589cbb
4 changed files with 9 additions and 8 deletions

View File

@@ -306,17 +306,16 @@ void TestGLCanvas::ResetProjectionMode()
// or more than one wxGLContext in the application.
SetCurrent(*m_glRC);
int w, h;
GetClientSize(&w, &h);
const wxSize ClientSize = GetClientSize() * GetContentScaleFactor();
// It's up to the application code to update the OpenGL viewport settings.
// In order to avoid extensive context switching, consider doing this in
// OnPaint() rather than here, though.
glViewport(0, 0, (GLint) w, (GLint) h);
glViewport(0, 0, ClientSize.x, ClientSize.y);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, (GLfloat)w/h, 1.0, 100.0);
gluPerspective(45.0f, (GLfloat)ClientSize.x/ClientSize.y, 1.0, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}