【问题标题】:Is glCallLists more efficient than calling the display lists one at a time?glCallLists 是否比一次调用一个显示列表更有效?
【发布时间】:2009-06-07 22:45:11
【问题描述】:

glCallLists() 是渲染一系列显示列表的便捷函数,尤其适用于文本渲染之类的东西。我很好奇 - 调用glCallLists() 是否实际上更有效,或者它仅仅是一个便利功能?例如,这两个 sn-ps 中哪个可能更快?

const char *str = "this is a test";
// suppose the display lists numbered [displayListBase..displayListBase+255] have
// been initialized with display lists to render each ASCII character

// snippet 1:
glListBase(displayListBase);
glCallLists(strlen(str), GL_UNSIGNED_BYTE, str);

// snippet 2:
const char *s;
for(s = str; *s; s++)
    glCallList(displayListBase + (unsigned char)*s);

我并不想过早地进行优化,我只是想知道glCallLists 是否比手动方法提供任何显着优势。如果不是,那它为什么存在? OpenGL 趋向于非常简约,因为很少有非必需的便利功能; 确实 存在的便利功能通常位于glu 命名空间(GL 实用程序)下,例如gluOrtho2D(),它为glOrtho() 提供了一个包装器。

我还没有尝试分析这两个 sn-ps,尽管我猜 CPU-GPU 交互可能会使分析变得复杂,尤其是在这么短的时间范围内。运行时间也可能受到所涉及的显示列表大小以及执行的显示列表数量的显着影响。

【问题讨论】:

  • 按照您的建议,您需要进行基准测试才能确定。
  • 您的问题没有明确的答案,因为每个平台(OpenGL 实现)都可能有不同的结果。一个可以在硬件上做所有事情,另一个可以在 CPU 上做一半的工作。

标签: c optimization opengl


【解决方案1】:

基准测试是唯一可以确定的方法,因为 OpenGL 实现各不相同。即使那样,这也将回答 您的 系统的问题,而不一定是任何其他系统。

如果你有一个硬件 OpenGL 实现,那么 glCallLists 或许能够一次性将几十个字节传输到硬件,而不是许多单独的 glCallList 来回传输。所以当然可以想象它会更快。

实现可能会在软件中实现 glCallLists 以完全按照您的描述进行操作,从而不会产生任何净收益。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多