glCallLists()
是渲染一系列显示列表的便捷函数,尤其是文本渲染之类的东西。我很好奇 - 调用 glCallLists()
实际上更有效,还是仅仅是一个方便的函数?例如,这两个片段中的哪一个可能更快?
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()
的包装器。
我还没有尝试分析这两个片段,尽管我猜测分析可能会因 CPU-GPU 交互而变得复杂,尤其是在如此短的时间范围内。所涉及的显示列表的大小以及执行的显示列表的数量也会显着影响运行时间。
最佳答案
基准测试是唯一可以确定的方法,因为 OpenGL 实现各不相同。即便如此,这也将为您的系统而非任何其他系统回答问题。
如果您有一个硬件 OpenGL 实现,那么 glCallLists 可能一次只能将几十个字节传输到硬件,而不是许多单独的 glCallList 来回传输。所以当然可以想象它会更快。
实现可能会在软件中实现 glCallLists 以完全按照您刚才描述的方式执行操作,从而导致没有净 yield 。
关于c - glCallLists 是否比一次调用一个显示列表更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/960947/