cor*_*sel 1 c++ opengl obsolete displaylist
我一直在简单的立即模式下使用OpenGL,并尝试使用显示列表传递给保留模式(我遗憾地了解到它已被弃用了一段时间).我想知道的是,当我输入时:
glNewList(list, GL_COMPILE);
glBegin(GL_TRIANGLE_FAN);
glVertex2f(0.0f, 0.0f);
for (int i = 0; i < 10; i++)
{
glVertex2f(radius * cos(i * 2.0f * PI / 9.0f), radius * sin(i * 2.0f * PI / 9.0f));
}
glEnd();
glEndList();
Run Code Online (Sandbox Code Playgroud)
OpenGL预先计算for循环中的所有10个顶点并将它们发送到烘焙的图形卡,如:
glVertex2f(0.5f, 0.0f);
glVertex2f(0.499f, 0.0055f);
//so and so forth 10 times...
Run Code Online (Sandbox Code Playgroud)
或者它是否尝试为每个帧完成for循环(以及许多sin/cos操作)?换句话说,在显示列表中存储这样的圆形形状是合理的(并且使用glTranslatef,glRotatef等来完成其余的工作......)以避免每次帧更新中的三角运算,或者根本没有性能增益?
编辑:为避免混淆,我打算使用for循环创建此显示列表,然后在每次帧更新(即glutDisplayFunc())中通过glCallList(list)调用它.我没有为每一帧创建一个列表.
显示列表(以及它提供的即时模式渲染)是古老的弃用功能,底层机制由驱动程序决定,有些可能将它备份到绘图数组调用,而其他人只是用它获得的参数重放调用,非您的代码实际上已重新执行.
相反,你应该通过将数据放入VBO并使用来明确地进行烘焙glDrawArrays.
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |