Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es 什么时候应该在OpenGL ES 2中使用glDeleteBuffers、glDeleteShader和glDeleteProgram?_Opengl Es_Opengl Es 2.0 - Fatal编程技术网

Opengl es 什么时候应该在OpenGL ES 2中使用glDeleteBuffers、glDeleteShader和glDeleteProgram?

Opengl es 什么时候应该在OpenGL ES 2中使用glDeleteBuffers、glDeleteShader和glDeleteProgram?,opengl-es,opengl-es-2.0,Opengl Es,Opengl Es 2.0,在OpenGL ES 2中使用VBOs时,我遇到了glDeleteBuffers、glDeleteShader和glDeleteProgram。我在网络上四处寻找,但是我找不到任何关于何时应该调用这些方法的好答案。这些调用是必要的还是计算机自动删除对象?感谢您的回答。每次glGen*呼叫都应与相应的glDelete*呼叫配对,当您使用完资源后,该呼叫将被调用 当您的应用程序仍在运行时,计算机不会自行删除这些对象,因为它不知道您是否计划稍后重新使用它们。如果在应用程序的整个生命周期中创建新对象,但

在OpenGL ES 2中使用VBOs时,我遇到了
glDeleteBuffers
glDeleteShader
glDeleteProgram
。我在网络上四处寻找,但是我找不到任何关于何时应该调用这些方法的好答案。这些调用是必要的还是计算机自动删除对象?感谢您的回答。

每次glGen*呼叫都应与相应的glDelete*呼叫配对,当您使用完资源后,该呼叫将被调用

当您的应用程序仍在运行时,计算机不会自行删除这些对象,因为它不知道您是否计划稍后重新使用它们。如果在应用程序的整个生命周期中创建新对象,但未能删除旧对象,则这是一种资源泄漏,最终将导致应用程序由于内存使用过度而关闭

当应用程序终止时,计算机将为您删除对象,因此在应用程序的整个生命周期内删除永久需要的对象并没有真正的好处,但通常认为进行无泄漏清理是一种良好的做法

您可以在处理完对象后立即调用glDelete*函数(例如,在最后一次使用该对象的绘制调用完成后)。您不必担心对象是否仍在GPU的队列或管道中,这是OpenGL驱动程序的问题