c - glCallLists 是否比一次调用一个显示列表更有效?

标签 c optimization opengl

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/

相关文章:

c# - 如何测试哪种方法实现运行得更快

c - 如何通过单个 Makefile 使用不同的标志组合自动编译代码

Coq VST 内部结构复制

c - 如何在 C 中定义一个 define?

c - 二维数组的动态内存分配

c++ - 画线例程

c++ - 优化 C++ 中的大整数减法

opengl - 旋转后向右、向上和向前不正确

c - 游戏项目: Explanation Required

c - OpenGL glutWireCube 可以工作,但 glutWireCylinder 不能。我究竟做错了什么?