使用pyopengl创建透明窗口/覆盖

2024-06-28 20:52:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用pygame和opengl创建一个覆盖图。通过简单地使用pygame并使用此代码使背景透明,我有了一个可行的解决方案

hwnd = pygame.display.get_wm_info()["window"]
win32gui.SetWindowLong(hwnd, win32con.GWL_EXSTYLE,
                       win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE)
                       | win32con.WS_EX_LAYERED)
win32gui.SetLayeredWindowAttributes(hwnd, win32api.RGB(*fuchsia), 0, win32con.LWA_COLORKEY)

在每一个画面上,我都会用紫红色填满屏幕。这样做的唯一问题是速度非常慢。所以我想使用pyopengl,这样就可以使用我的gpu了

到目前为止,我已经尝试过这样做

pygame.init()
flags = NOFRAME | DOUBLEBUF | OPENGL
screen = pygame.display.set_mode((1920,1080), flags)

gluOrtho2D(0, 1920, 0, 1080)
glEnable(GL_ALPHA_TEST)
glEnable(GL_DEPTH_TEST)
glEnable(GL_COLOR_MATERIAL)

glEnable(GL_LIGHTING)
glEnable(GL_LIGHT0)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glClearColor(0, 0, 0, 0)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            hack_running = False
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
    glClearColor(0, 0, 0, 0)
    glBegin(GL_LINES)
    glVertex2i(0,0)
    glVertex2i(500,500)
    glEnd()
    pygame.display.flip()
    pygame.time.wait(10)

这将导致在黑色背景上绘制一条线。有没有办法去除背景并将窗口变成覆盖层


Tags: alphasrceventgetdisplaypygameflags背景