gpt4 book ai didi

directx - 如何在不闪烁的情况下调整directx窗口的大小?

转载 作者:行者123 更新时间:2023-12-04 06:02:15 25 4
gpt4 key购买 nike

我有一个简单的 directx 应用程序,它显示一些预先转换的几何图形,我希望窗口在调整大小时不会闪烁,并且我希望图纸不会随着窗口大小而拉伸(stretch)。

我注意到拉伸(stretch)问题,如果我在 WM_SIZING 中重置设备,那么绘图的实际大小会保留。但是每次调整窗口大小时都重置设备似乎是一项昂贵的操作。实际上,我想使用directx创建一些简单的GUI,但是调整窗口大小似乎会删除前端缓冲区数据,因此会出现闪烁。我看到许多使用opengl自定义gui的应用程序允许调整大小,WPF应用程序也允许调整大小。我怎么做?

另外我想知道,如果我无法实现实时调整大小而不闪烁和重新定位绘制元素的效果,那么 WPF 应用程序如何做到这一点?

另外我想问一下,如果您要使用 Directx 设计 GUI(非游戏)系统并希望像任何其他应用程序一样实现调整大小的支持,您的选择是什么?

最佳答案

I want the window to not flicker when I resize it



不要处理 WM_ERASEBACKGROUND 和类似的消息。把所有的画留给DirectX,就不会出现闪烁了。任何闪烁基本上都是您(或您的控件)首先绘制一些东西,然后 DirectX 在上面绘制它的图片。

and also i want the drawings to not stretch with window size.



不可能(至少没有黑客)。假设您使用 DirectX 9,您必须重新初始化设备以更改其分辨率,这很慢。

我可以考虑一些变通方法来尝试,例如,更改您的投影矩阵,以便在视口(viewport)分辨率保持不变(不重新初始化)的同时,您通过视口(viewport)看到的东西反射(reflect)了窗口大小。

换句话说,您将视口(viewport)初始化为 640x480 并保持不变,但如果用户将窗口大小调整为 1024x768,则您将 1024x768 数量的东西打包到 640x480 视口(viewport)中,然后将其拉伸(stretch)以填充 1024x768 窗口。

这应该给人的印象是您“调整”视口(viewport)的大小,但由于实际上它是缩放的,所以图片质量会下降。这就是为什么您可能希望在用户完成调整窗口大小后最终重新初始化视口(viewport)的原因。这样您就可以先快速调整大小,然后再快速调整图片质量。

关于directx - 如何在不闪烁的情况下调整directx窗口的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8815710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com