OpenGL中的串行中断,使用哪种结构? 我正在编写一个OpenGL的软件,它是由Linux在.C++下用UART(串口中的Boox::Asio)驱动的。
我目前已经完成了数据的接收和处理,并准备用OpenGL将其可视化。这个问题可能不限于OpenGL,无论如何,我的问题是: 如何从UART回调函数调用OpenGL绘图函数 当然,我应该能够通过以下方式运行它:OpenGL中的串行中断,使用哪种结构? 我正在编写一个OpenGL的软件,它是由Linux在.C++下用UART(串口中的Boox::Asio)驱动的。,opengl,boost,serial-port,boost-asio,uart,Opengl,Boost,Serial Port,Boost Asio,Uart,我目前已经完成了数据的接收和处理,并准备用OpenGL将其可视化。这个问题可能不限于OpenGL,无论如何,我的问题是: 如何从UART回调函数调用OpenGL绘图函数 当然,我应该能够通过以下方式运行它: 使用任何IPC(管道、套接字、信号量)方法 将OpenGL绘图函数或其类作为变量传递给UART回调 把所有的东西都放在一节课上 我遇到过很多类似的案例,并且以不同的方式实现。但我还是不知道正确的答案是什么 我个人不喜欢管道或文件IO IPCs,唯一剩下的选择是套接字、信号量和共享内存,我一直
它不是一个tty,而是一个Linux evdev,但总体思路是一样的:这是一个小型演示程序,演示如何从3D Connextion Space Navigator读取输入并将其处理为3D场景,使用OpenGL渲染:当然取决于应用程序 串行通信回调函数访问OpenGL状态确实很有意义,但是如果您正在做一个原型/概念验证,为什么要让您的工作更困难呢 共享内存是一个不错的选择;回调可以将数据放在某个地方,触发绘图线程并等待它完成。(这离调用绘图函数本身的回调只有一步之遥。)
虽然我可能更喜欢传递信息。收到数据后,回调可以打包并发送(复制)到绘图线程,绘图线程可以在收到数据时绘制数据。这将增加UART代码不等待绘图代码的好处,尽管考虑到OpenGL的速度,尤其是与串行通信相比,这不太可能成为问题。我喜欢它的实现方式。然而,我问这个问题是因为我还不熟悉OpenGL。在idle()函数中,在每个变量更新并调用glutPostRedisplay()之后;。然后,idle函数是否等待直到GLUTPOSTREDIDISPLAY();完成了,还是只是告诉GPU去画?因为,在前一种情况下,我担心在绘图期间丢失一些接收到的数据。@Tae:glutPostDisplay告诉GLUT在完成下一个事件循环迭代后进行绘图。它不会等待。此外,您不会丢失数据,因为输入由Linux缓冲。这不像DOS,在下一个IRQ击中您之前,您必须从IO mem中获取数据,否则FIFO溢出。如果您真的想尽快并持续地读取数据,请仅为IO使用第二个线程。我想线程是一个不错的选择……我已经用idle()进行了测试,但它的空闲频率不足以进行采样。