大家好、我们正在将3D 环视应用整合到我们的系统中。 但是、我们的系统也必须执行其他操作(与 CAN 相关的任务)。 我的同事告诉我、显示屏幕的线程 A 太忙。 他建议我们不要在线程 A 中运行我们的3D 算法
我们的3D 算法为每个帧花费30ms、但线程 A 中两个帧的操作间隔超过80ms
他建议我将与渲染相关的代码移动到另一个线程 B、并将 Draw 函数保留在线程 A 中
因此、我按如下方式更改了代码:
初始化时
线程 A 调用以下函数来创建纹理 T 并将图像缓冲区绑定到每个纹理。
glTextImage2D (纹理、0、gL_alpha、alpha_gd.cols、alpha_gd.rows、 0、gL_alpha、gL_unsigned_byte、alpha_gd.data);
每个帧
第一个线程 B 调用以下函数将新图像绑定到纹理 T、并对这些纹理执行一些操作以获得我们需要的结果。
glTextSubImage2D (GL_t纹 理_2D、0、0、0、宽度、 高度、GL_RGB、GL_unsigned_byte、缓冲区);
然后线程 A 调用以下函数将渲染结果绘制到 scrren 中。
glDrawElements (GL_triangles、6、GL_unsigned_short、0);
解决方案的工作原理。 两帧的操作间隔对于每帧约为40ms。
但超过10分钟后、屏幕看起来会损坏、显示随机图像。
我的问题是"能否将 OpenGL-es 运算放入两个线程中以及如何执行?"。
此致、
苏梅森