关于显示列表OpenGL SC 1.0.1的问题
我对OpenGL SC 1.0.1中的显示列表有几个问题:关于显示列表OpenGL SC 1.0.1的问题,opengl,opengl-sc,Opengl,Opengl Sc,我对OpenGL SC 1.0.1中的显示列表有几个问题: 如果我理解得很好,显示列表会保存一系列OpenGL原语命令,以便在运行时重新使用。 现在,假设我在这个显示列表中还包含了一个赋值,它改变了在静态序列之外声明的参数的值。 ->在生成显示列表期间,还是在运行时调用此显示列表时,会更新此参数 我只在初始化OpenGL上下文时生成所有显示列表。 但是,在我的应用程序中,出于几个原因,我在运行时的每个周期都会清除glClear。 ->执行glClear命令后,您认为我的所有显示列表都会被删除吗?
显示列表只在调用glNewList时创建一次。然后,当您调用glCallList时,会逐字重复该列表。我不确定参数的确切含义,但如果您的意思是: a)C++变量,则这将没有任何效果。显示列表中的OpenGL调用按原样记录。未记录用于访问该调用的循环变量等。 b) OpenGL状态变量(例如,调用以启用GL_照明)。这将被记录(因为显示列表将捕获对glEnable的呼叫) glClear对显示列表没有影响。glClear只需将后缓冲区清除为黑色(或通过GLCLEARCOOR设置的颜色)。显然,一旦清除了所有像素数据,就需要重新绘制它,因此需要设置投影矩阵,为显示列表中的几何体设置正确的变换矩阵,然后再次调用glCallList以重复该列表中的操作列表 说到这里,我强烈建议您远离显示列表,转向更好的方式(例如VBO+VAO+GLSL着色器,或VBO+固定函数管道)。显示列表存在大量问题,包括:
- 它们是驱动程序维护人员的噩梦。因此,图形卡对它们的支持有点参差不齐李>
- 并非所有GL API方法都可以在显示列表中调用。某些方法(例如修改客户端状态的方法-例如顶点数组绑定)在显示列表中根本不起作用。另一些则不起作用,因为驱动程序实现者决定不添加支持(例如,NVidia允许在显示列表中调用某些GL3+方法,AMD只允许OpenGL 1.5中的方法)李>
- 更新显示列表的速度非常慢李>