【发布时间】:2013-08-29 16:55:28
【问题描述】:
这样做的正确方法是什么?
我正在执行以下步骤:
- 创建着色器
- 编译着色器
- 创建程序
- 将着色器附加到程序
- 链接程序
- 删除着色器
在http://www.opengl.org/wiki/GLSL_Object 中它说:您不必显式分离着色器对象,即使在链接程序之后也是如此。但是,最好在链接完成后这样做,否则当您尝试删除程序对象时,程序对象将使其附加的着色器对象保持活动状态。
还有来自Proper way to delete GLSL shader? 的人说如果我不删除着色器会增加内存。
所以检查http://www.opengl.org/sdk/docs/man/xhtml/glDetachShader.xml,它说如果着色器已经通过调用glDeleteShader被标记为删除并且它没有附加到任何其他程序对象,它将在分离后被删除。
所以我的#6 是没用的,除非我把它拆下来对吧?
我应该在程序正确编译后分离和删除(以节省内存)还是应该仅在我的应用程序关闭时分离/删除?
【问题讨论】:
-
旁注:您需要调用
glLinkProgram对与glBindAttribLocation绑定的属性所做的更改才能生效。因此,如果您从链接的程序中删除和分离着色器,那么如果不重新绑定着色器,属性绑定就无法有效地更改。
标签: opengl