首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除GLSL着色器的正确方法?

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

Stack Overflow用户
提问于 2012-02-02 21:28:46
回答 4查看 18.7K关注 0票数 54

我的代码采用GLSL着色器管理的方式,它创建每个着色器和相关的程序,并删除每个着色器和程序。我最近读了http://www.opengl.org/wiki/GLSL_Object,上面写道:

由于着色器对象附加到程序对象,因此即使删除着色器对象,着色器对象也将继续存在。只有当它不再附加到任何程序对象时(当然,当用户要求删除它时),它才会被系统删除。

如果我在链接到程序后调用着色器对象上的glDeleteShader(),我只需要跟踪程序,这是正确的吗?假设这总是正确的,这是安全的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-03 01:58:20

可以--实际上,我们非常希望尽快分离和删除着色器对象。这样,驱动程序可以释放用来保存着色器源代码副本和未链接目标代码的所有内存,这可能非常重要。我所做的测量表明,不删除着色器对象会使每个着色器的增量内存使用量增加5-10倍

票数 63
EN

Stack Overflow用户

发布于 2012-02-02 23:57:17

通常,着色器对象管理的工作方式很简单。着色器对象实际上并不做任何事情,所以跟踪它们根本没有意义。着色器对象应该只存在足够长的时间来成功链接程序对象。之后,着色器应从程序中分离并删除。

当然,上面假设您没有尝试使用着色器对象来链接到不同的程序。这当然是有可能的。在这种情况下,应在链接所有程序后删除着色器对象。

票数 13
EN

Stack Overflow用户

发布于 2012-02-02 22:06:58

是。然后,可以安全地删除着色器。事实上,这是首选的方法,因为您的维护工作较少。您不需要跟踪要删除的内容,也不能忘记删除。而且,它仍然可以工作。

与所有OpenGL对象一样,“删除”着色器只会设置一个标志,表明您不再需要它。只要OpenGL需要它,它就会一直保留它,并在以后的任何时间执行实际的删除操作(很可能,但不一定是在程序被删除之后)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9113154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档