我正在开发一个使用OpenGL提供的显示列表的应用程序。我的想法是为重复性任务调用显示列表,例如转换和服务器状态集。 实际上,该实现允许每个可渲染对象有两个显示列表。在这两种情况下,显示列表不包含顶点,法线等,而只包含矩阵和服务器状态。
我现在的问题是如何决定何时生成显示列表:在某些情况下,可能会发生生成显示列表的属性发生变化,导致显示列表的新编译(想想鼠标移动旋转对象)。
仅在N个渲染循环中未更改属性时才生成显示列表?如何量化这个N?我应该禁用临时特定的显示列表吗?
注意:可以在Renderable(187:201)和RenderState(315:356)找到来源。对不起身份(我认为这是我的VS ......)我现在才注意到。 :(
OT:如何重新格式化身份? :)
答案 0 :(得分:6)
说实话,我建议不要使用显示列表。它们已被OpenGL标准弃用。相反,您应该使用顶点缓冲区(请查看glDrawArrays
或glDrawElements
)。
然后,您不必担心重新生成显示列表,只需设置顶点数组。
答案 1 :(得分:0)
请记住,答案没有考虑是否使用显示列表。 (编辑:显示列表可以在较旧的系统上使用,并可以提高这些系统的性能)。
N数量应与存储在显示列表中的数据量成比例。显示列表重新编译应在显示列表中包含的数据发生变化时进行,但如果数据频繁更改,则重新编译过程可能会延迟,直到稳定的数据得到验证。