正确的方法来删除GLSL着色器?

我的代码接近的方式GLSL着色器的管理,它创建的每个着色器和相关的程序并删除每个着色器和程序。 最近,我读http://www.opengl.org/wiki/GLSL_Object有它指出:

着色器对象,由于被附加到程序对象,将继续即使删除着色器对象存在。 它将仅由系统被删除时,它不再连接到任何程序对象(和当用户已经请求将其删除,当然)。

难道我得到这个正确的,如果我叫glDeleteShader()链接到程序后着色器对象,我只需要跟踪的计划? 它是安全的假设这始终是真的吗?

--------------解决方案-------------

是的 - 事实上,它是高度desireable分离,并尽快删除您的着色器的对象。 驾驶员可以释放所有的存储器这样,它是使用于容纳着色器源和未链接目标代码,它可以是相当大的一个副本。 测量我已经做了提示未删除着色器对象通过5到10倍增加每个着色器增量内存使用

一般情况下,一路着色对象管理的工作原理很简单。 着色器对象不真正做任何事情,所以有跟踪他们根本没有任何意义。 着色器对象应该存在的只是足够长的时间成功链接程序对象。 该时间之后,将着色应从程序分离并删除。

上述假设你是不是尝试使用着色器对象,不同的程序联系起来,当然。 这当然是可能的。 在这种情况下,你已经将所有的程序后,你应该删除您的着色器的对象。

是。 您可以安全地删除着色器即可。 其实,这是首选的方法,因为你有较少的维护。 你不必跟踪哪些删除,你不能忘记这样做。 而且,它仍然可以工作。

“删除”着色器,与所有的OpenGL对象,只设置一个标志,上面写着你不需要它了。 的OpenGL将保持它周围,只要它需要它本身,而且会做以后的实际删除任何时间(最有可能的,但不一定是,该程序删除之后)。

总之:glLinkProgram()调用glDeleteShader()每个着色器,这标志着他们为删除,不再需要程序的时候调用glDeleteProgram()之后 - 这一呼吁不仅删除程序,还可以分离连接到它,并删除所有着色器它们(如果​​不使用任何其他方案)。

因此通常你不必调用过glDetachShader()。 阅读glDeleteProgram的文档()。

分类:OpenGL的 时间:2015-03-15 人气:0
本文关键词: OpenGL中,GLSL
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.211 (s). 10 q(s)