退出时删除多个着色器?

时间:2011-11-15 07:35:32

标签: c++ opengl shader

大家好,我遇到了问题,希望得到你的帮助。假设我在我的opengl程序中成功加载了5个GLSL着色器。当我想退出游戏时,我当然要删除着色器。所以要删除着色器,我必须:

  1. 从程序中分离着色器
  2. 删除着色器
  3. 删除着色器程序
  4. 对于每个具有glDeleteShader,glDeleteProgram等的着色器一个接一个? 如果有任何简单易行的方式,请告诉我。 提前谢谢!

1 个答案:

答案 0 :(得分:4)

为什么要等到应用程序结束才能删除着色器对象?在为它们链接程序后,你应该已经摆脱它们。只需将它们附加到程序,链接它,分离它们并删除(除非你重复使用着色器对象)。

一旦你不再携带着色器物品行李,这很简单。只需删除程序即可。

或者不。由你决定; OpenGL上下文将自行清理。但是如果你想删除它们,那就删除它们。

如果你有50个不同的存储程序的变量,并且不想输入glDeleteProgram 50次,那么很明显你的代码的大小结构很差。如果你有那么多程序,那么你需要购买一个资源管理系统,在那里你可以管理资源(比如加载程序)并确保它们被销毁。而“采购”,我指的是“写作”。

资源管理器基本上是盒子,你可以在其中放入命名对象并将它们取出。当资源管理器被销毁时,它管理的所有资源也会被销毁(注意:有一些方法可以让资源管理器有其他方法来销毁东西)。