首页 > 解决方案 > OpenGL 窗口被其上的窗口擦除

问题描述

我正在使用 Delphi 和 dglOpenGL 进行标准的窗口化 OpenGL 渲染;(问题也可能特定于任何窗口和 3D 对)。目标是 TFrame 控件。

但试图避免无限的绘制循环以优化界面重量。这意味着我试图覆盖必要的绘制事件,而不是计时器绘制。

但是当任何其他窗口与 OpenGL 窗口重叠时,即被用户移动,或者只是聚焦时,3D 图片被擦除。

例如,右擦除

仅当 Windows Aero 禁用时才会发生这种情况,即在具有经典主题的 Windows 7 上。

用循环驱动替换事件驱动渲染是非常过分的;

我试图捕捉Delphi Form的WM_PAINT消息以在Form顶部移动某些东西时执行渲染,但在这种情况下,Delphi(或Windows)似乎完全没有消息。这很奇怪,但似乎是真的——如果窗口顶部有东西移动,Windows 不会向窗口发送消息。尽管在这种情况下您会期望某种 WM_PAINT_REGION 。

我的初始化例程类似于这些 OpenGL 初始化示例

可能渲染到 TBitmap 可能会有所帮助,但从性能的角度来看,这看起来很糟糕,并且感觉像是更普遍的问题(缺乏双缓冲?)。可能存在一些简单的初始化或 OpenGL 技巧来解决这个问题?

标签: windowsdelphiopengl

解决方案


推荐阅读