gpt4 book ai didi

c++ - 相当于 X11 中的 "Invalidate Rect"/"WM_PAINT"

转载 作者:IT王子 更新时间:2023-10-29 00:01:00 26 4
gpt4 key购买 nike

我正在将一些代码从 Windows 移植到 XLib。在 Windows 代码中,我可以通过调用 InvalidateRect 然后处理相应的 WM_PAINT 消息来强制重绘。但是,我无法找到如何在 X11/XLib 中执行此操作。我看到有一条 Expose 消息,但不确定这是否是同一回事。

如果重要的话,我需要执行此操作以强制窗口以某个基于 OpenGL 的程序的帧速率呈现。

最佳答案

稍微扩展 BЈовић 给出的有用答案,

使用原始 Xlib,您可以随时在单个线程中绘制,因为每个 Xlib 函数都指定了完整的显示、窗口和上下文。 AFAIK,有了多线程,所有的赌注都没有了。

如果您在桌面环境中,您还必须有一个 Expose 事件处理程序,并为这些事件选择。即使您正在编写全屏程序,拥有一个也不会有什么坏处。

大多数工具包都没有那么灵活,只能绘制指定的事件处理程序(但在许多其他方面使用起来更好)并且有一些与 Windows InvalidateRect 等效的东西。在原始 Xlib 中,您可以通过向自己发送一个 Expose 事件来获得相同的效果。这样做不会导致任何真正的性能问题,并且会使代码更容易被其他程序员理解,并且更容易移植,所以您不妨这样做。

还有 XClearArea 和 XClearWindow 函数会为您生成 Expose 事件,但它们会先用背景色删除部分/全部,这可能会导致闪烁。

使用 OpenGL 会变得有点复杂,因为您还必须使用 GLX。我在网上有一个非常简单的 OpenGL/Xlib 程序 http://cs.anu.edu.au/~hugh.fisher/3dteach/这可能是一个有用的例子。

关于c++ - 相当于 X11 中的 "Invalidate Rect"/"WM_PAINT",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17027993/

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