windows - 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 技巧来解决这个问题?
解决方案
推荐阅读
- android - 没有从 jetpack compose 中的 rememberLauncherForActivityResult() 获取结果
- c++ - UPNP 检测网络中的设备?
- laravel - 如何使用控制器导入数据以在 Laravel 8 中查看。*
- java - Elasticsearch client.indices().putTemplate - 不推荐使用的方法
- java - 在 Spring boot 中查找传入请求的 Content-type
- jboss - JBOSS 6.3 访问日志自动删除
- kdb - 计数 t 与 kdb 选择语句中的实际数字
- javascript - 如何在 React 中完全重构数据
- google-chrome - 在网络浏览器中使用没有绿色背景的 ffmpeg 的 yuv420p10le 格式
- c# - 实时捕获 Unity 像素数据的最佳选择是什么?