Ada*_*eld 0 c opengl optimization
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);
Run Code Online (Sandbox Code Playgroud)
我不是想过早地优化,我只是好奇是否glCallLists
提供了比手动方法更重要的优势.如果没有,那为什么它存在?OpenGL往往非常简约,因为很少有便利功能,这些功能并不是绝对必要的.确实存在的便利函数通常在glu
命名空间(GL实用程序)下,例如gluOrtho2D()
,它提供了一个包装器glOrtho()
.
我还没有尝试过分析这两个片段,虽然我猜测分析可能会因CPU-GPU交互而变得复杂,特别是在如此短的时间内.运行时也可能受到所涉及的显示列表的大小以及执行的显示列表的数量的显着影响.
随着OpenGL实施的不同,基准测试是唯一可以确定的方法.即便如此,这将回答您系统的问题,而不一定是任何其他系统.
如果你有一个硬件OpenGL实现,那么glCallLists可能只能一次性地将几十个字节传输到硬件,而不是许多单独的glCallList的来回.所以可以想象它会更快.
实现可能会在软件中实现glCallLists以完全按照您刚才描述的方式执行,从而不会产生净增益.
归档时间: |
|
查看次数: |
1593 次 |
最近记录: |