【发布时间】:2013-11-27 21:19:19
【问题描述】:
我有一个应用程序,它使用 OpenGL 以 2D 形式呈现许多填充的多边形。填充是通过镶嵌完成的,但性能不是最佳的。由 122000 个顶点组成的 1900 个多边形(即每个多边形大约 64 个顶点)在大约 3 秒内显示出来。
显然,CPU 不是瓶颈,就好像我用 glColor 调用代替了对 gluTessVertex 的调用——只是为了测试瓶颈在哪里,性能翻了一番。 我在加载许多小纹理时遇到了同样的问题。 现在,哪些是提高性能的选项?似乎大部分时间都花在几何子系统上。渲染速度足够快。
我已经有一个工作线程在一个上下文中执行加载(因此镶嵌、纹理绑定),另一个线程在另一个上下文中执行绘制。这两个上下文通过 wglShareLists 共享对象,它就像一个魅力。 我可以在第三个上下文中使用第三个线程来处理一半多边形的镶嵌吗?有人试过吗?安全吗?在三个上下文之间共享对象的任何示例?
忘了说,我有一个 ATI Radeon HD 4550 显卡,假设它可以处理超过 39kB/s 的数据。
【问题讨论】:
-
您为什么使用 2D 细分?
-
瓶颈是缺乏异步性。具有共享上下文的工作线程使问题变得更糟,而不是更好(更多同步点)。请参阅 Vallentin 的答案,了解您必须做什么。
标签: multithreading opengl