【发布时间】:2020-02-06 12:30:30
【问题描述】:
我开发的软件需要在屏幕上打印大量文本,大约 200 到 400 个字符串和很多独特的字符(一些对象由一个字符表示),该软件已经在使用OpenGL。 我已经处理过文本渲染并且能够渲染文本,但是使用 200 个绘图调用绘制超过 200 个字符串会导致性能问题。
该软件仅在 2D 中绘制。
请务必注意,我的软件在 32 位计算机上运行旧显卡,我不能使用比 2.0 更新的 OpenGL 版本。
您认为最好的选择是什么?
在每个字体一次绘制调用中渲染所有内容,使用一个包含所有信息的大缓冲区。
在纹理中渲染每个字符串,然后为每个字符串进行一次绘制调用。 (文字变化不大,最多每秒)
还有其他想法吗?
【问题讨论】:
-
200 到 400 个字符串应该不会导致性能问题,比如 1000 页 pdf 可能。
-
这台电脑真的很旧。该软件的早期版本使用 Qt 来渲染相同的场景。 CPU 快到了 65%。这就是为什么我试图找到最好的方法
-
我想您应该首先调查性能问题的根源。使用分析器并检查代码的哪一部分消耗更多时间。像
std::map<GLText, std::list<size_t>>这样的东西看起来很俗气。这当然不是纹理图集的实现方式。 -
是的,我知道。这就是我在这里的原因。我们对软件进行了分析,问题是 Qt 对屏幕上的每个元素都使用了一个 drawcall。所有的 CPU 时间都花在寻找变化和绘图上