OpenGL程序/着色器取消初始化
正确的方法是什么 我正在执行以下步骤:OpenGL程序/着色器取消初始化,opengl,Opengl,正确的方法是什么 我正在执行以下步骤: 创建着色器 编译着色器 创建程序 将着色器附加到程序 链接程序 删除着色器 其中说:即使在链接程序之后,也不必显式分离着色器对象。但是,在链接完成后执行此操作是一个好主意,否则当您尝试删除程序对象时,程序对象将使其附加的着色器对象保持活动状态 还有from说如果我不删除着色器,它会增加内存 所以检查一下,它说如果着色器已经通过调用glDeleteShader被标记为删除,并且它没有附加到任何其他程序对象,那么它将在分离后被删除 所以我的#6是没用的,除非我
这取决于你。您可以在不再需要它时立即删除它。如果不打算重新链接该着色器,则可以在初始链接操作后立即销毁所有附加的着色器对象。但是,着色器对象毕竟不会消耗太多内存(并且不会进入GPU内存,只有最终的程序会),如果稍后删除它们,或者甚至根本不删除它们,这通常不是什么大问题,因为当GL上下文被销毁时(包括应用程序退出的情况),所有GL资源都会被销毁。当然,如果在运行时动态创建着色器,您还应该动态删除旧的和未使用的对象,以避免积累大量未使用的对象,并有效地泄漏内存/对象名称等。旁注:您需要调用
glLinkProgram
,以使使用glBindAttribLocation
对属性绑定所做的更改生效。因此,如果从链接程序中删除并分离着色器,则如果不将着色器重新绑定到该程序,则无法有效地更改属性绑定。