我有一些代码在 glut 窗口中使用 PyOpenGL 显示图形。在视网膜 Macbook Pro 上,此窗口以低分辨率模式显示,一个 OpenGL 像素由四个物理像素表示。如果它以完整的原始分辨率显示会更好。
我的问题
有什么方法可以在 Retina 显示器上使用 glut 或其他方式在 Python 中获得原生分辨率的 OpenGL 上下文?
问题示例
下面是 PyOpenGL 程序的最小工作示例。它没有什么特别之处——任何工作的 PyOpenGL 代码都会出现这个问题。这是屏幕截图的放大细节。请注意,构成白色三角形的像素是 OS X 小部件像素大小的四倍。这是不是专门为 Retina 设备设计的程序的默认设置。我想知道如何为 PyOpenGL 程序关闭它。
这是代码:
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
import os
def initFunc():
glDisable(GL_DEPTH_TEST)
glClearColor(0.0, 0.0, 0.0, 0.0)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0.0, 400.0, 0.0, 400.0)
def displayFunc():
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(1.0, 1.0, 1.0)
glBegin(GL_TRIANGLES)
glVertex2f(10.0, 10.0)
glVertex2f(10.0, 100.0)
glVertex2f(100.0, 100.0)
glEnd()
glFlush()
if __name__ == '__main__':
glutInit()
glutInitWindowSize(400,400)
glutCreateWindow("GL test")
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutDisplayFunc(displayFunc)
initFunc()
os.system('''/usr/bin/osascript -e 'tell app "Finder" to set frontmost of process "Python" to true' ''')
# prevent GL window from appearing behind other applications
glutMainLoop()