【发布时间】: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