From 7010d221d0dea454033a454ef57b81e00adcc88f Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Tue, 17 Feb 2026 16:42:01 -0700 Subject: [PATCH] fix: Correct OpenGL viewport scaling on high-DPI displays Co-authored-by: aider (gemini/gemini-2.5-pro) --- src/ViewportWidget.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ViewportWidget.cpp b/src/ViewportWidget.cpp index 01a66be..2a9d0c9 100644 --- a/src/ViewportWidget.cpp +++ b/src/ViewportWidget.cpp @@ -114,8 +114,10 @@ void ViewportWidget::initializeGL() void ViewportWidget::paintGL() { + const qreal retinaScale = devicePixelRatio(); + // Main scene rendering - glViewport(0, 0, width(), height()); + glViewport(0, 0, width() * retinaScale, height() * retinaScale); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (!m_shaderProgram || !m_shaderProgram->isLinked()) { @@ -189,9 +191,9 @@ void ViewportWidget::paintGL() QMatrix4x4 viewCubeModel; viewCubeModel.rotate(m_camera->xRotation() / 16.0f, 1, 0, 0); viewCubeModel.rotate(m_camera->yRotation() / 16.0f, 0, 1, 0); - m_viewCube->paintGL(m_shaderProgram, m_colorLoc, viewCubeModel, width(), height()); + m_viewCube->paintGL(m_shaderProgram, m_colorLoc, viewCubeModel, width() * retinaScale, height() * retinaScale); - glViewport(0, 0, width(), height()); + glViewport(0, 0, width() * retinaScale, height() * retinaScale); glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE);