0

我正在编写一个 OpenGL 软件,它由 Linux 下的 C++ 中的 UART(在 Boost::asio 的帮助下串行)驱动。

我目前已完成接收和处理数据,并准备使用 OpenGL 将其可视化。这个问题可能不受OpenGL的限制,无论如何我的问题是:

如何从 UART 回调函数调用 OpenGL 绘图函数?

当然,我应该能够通过以下方式运行它:

  1. 使用任何 IPC(PIPE, socket, semaphore) 方法
  2. 将 OpenGL 绘图函数或其类作为变量传递给 UART 回调
  3. 把所有东西都放在一个班级里

我遇到了很多类似的案例,并以不同的方式实现。但我仍然无法弄清楚正确的答案是什么。

我个人不喜欢 PIPE 或文件 IO IPC,唯一剩下的选项是我一直在使用的套接字、信号量和共享内存。

4

2 回答 2

2

如何从 UART 回调函数调用 OpenGL 绘图函数?

不。

应该只从绘图处理程序中绘制。串行 I/O 应该像其他输入一样对待:在事件循环或空闲处理程序中处理它,使用接收到的数据来更新表示新状态的变量并发出重绘。

它不是 tty,而是 Linux evdev,但总体思路保持不变:这是一个小型演示程序,展示了如何从 3D Connextion Space Navigator 读取输入并将其处理成使用 OpenGL 渲染的 3D 场景:http: //homepages.physik.uni-muenchen.de/~Wolfgang.Draxinger/stuff/spaceball.tar.bz2

于 2012-01-02T09:33:49.173 回答
0

当然,取决于应用程序。

串行通信回调函数访问 OpenGL 状态确实很有意义,但是如果你正在做一个原型/概念验证,为什么要让你的工作更难呢?

共享内存是一个不错的选择;回调可以将数据放在某个地方,触发绘图线程并等待它完成。(这距离调用绘图函数本身的回调仅一步之遥。)

虽然我可能更喜欢消息传递。当接收到数据时,回调可以将其打包并发送(复制)到绘图线程,绘图线程可以在接收到时进行绘制。这将具有 UART 代码不等待绘图代码的额外好处,尽管考虑到 OpenGL 的速度,这不太可能成为问题,尤其是与串行通信相比。

于 2012-01-02T09:38:52.103 回答