【问题标题】:How to use wxWidgets rendering loop using wxPaintEvent?如何使用 wxPaintEvent 使用 wxWidgets 渲染循环?
【发布时间】:2012-05-30 23:01:15
【问题描述】:

我正在尝试使用 MIL 库抓取图像,并且我想使用 OpenGL 将图像渲染到 glCanvas 窗口。但是,问题是我的

    OnPaint( wxPaintEvent &event)

方法未在循环中运行以显示图片。我已经在这个方法中添加了代码来使用 MIL 抓取图像,并在显示它们之前将它们设置为纹理。那么,如果 wxPaintEvent 在循环中运行,为什么我看不到图像序列,比如视频?当我在不使用 MIL 的情况下检查默认纹理时,它可以正常工作。所以,基本上,我只是设置纹理!

我没有使用进程间和互斥锁,这可能是个问题吗?或者,我是否需要更加注意这个事件的时间安排?

【问题讨论】:

    标签: visual-c++ opengl windows-xp wxwidgets


    【解决方案1】:

    绘制事件通常仅在窗口被标记为“无效”或“脏”时才会发出,并且被认为需要重绘。如果您想播放动画,请将窗口标记为您自己重绘的主题(wxWindow::Refresh)。或者,首选方法,注册一个空闲事件处理程序并从那里执行 OpenGL 操作:http://wiki.wxwidgets.org/Making_a_render_loop

    【讨论】:

    • 谢谢!我将尝试使用空闲事件处理程序!但是您能否通过“将窗口标记为您自己重绘的主题(wxWindow::Refresh)”来简要解释一下您所说的内容?
    • @Zizzou:每个窗口都有一个附加的缓冲区,其中需要重绘的区域会被跟踪;从历史上看,所有窗口都共享相同的帧缓冲区,并且窗口系统必须跟踪它们的分层以及窗口的哪些部分是/变得可见。因此,如果窗口的某些部分暴露出来,窗口系统会将此部分标记为“脏/无效”并调用窗口绘图处理程序,以便它“修复”受影响的部分以重绘它。通过调用“wxWindow::Refresh”,会向窗口系统发送一个信号,表明整个窗口已变脏,应该重新绘制。
    猜你喜欢
    • 2015-08-28
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多