성공적인 glLinkProgram 후에 쉐이더를 삭제 / 분리해야합니까?


45

연결된 프로그램을 가지고 있고 방어적인 프로그래밍에 대해 생각한 후에이 프로그램을 연결하는 데 사용 된 셰이더를 삭제하고 분리해야합니까?

그렇다면 자원을 확보 할 수 있습니까? 아니면 glDeleteProgram 호출 후에 만이 셰이더 객체가 해제됩니까?

편집 : 내가하고있는 일을 명확히하기 위해 (답과 일치합니다) :

glCreateShader-> glShaderSource-> glCompileShader-> glCreateProgram-> glAttachShader-> glLinkProgram-> glDetachShader-> glDeleteShader->이 쉐이더 프로그램을 사용하여 그리기-> 더 이상이 쉐이더가 필요하지 않은 경우 glDeleteProgram

답변:


46

예, 항상 이렇게해야합니다. 나는 최근까지 이것에 대해 알지 못했지만 셰이더는 glDeleteShader분리 될 때까지 실제로 삭제되지 않습니다 . 맨 페이지에 언급되어 있습니다.glDetachShader

편집 : 셰이더를 삭제하는 것과 관련하여 거의 누락되었습니다. 예, 셰이더 소스와 링크되지 않은 객체 코드를 저장하는 데 사용되는 메모리를 비우기 때문에이 작업을 수행해야합니다. 이에 대해서는 이 StackOverflow 질문 에서 자세히 설명 합니다.


+1하고 추적하고 glDelete 할 개체가 하나뿐이므로 정리가 더 쉬워집니다.
Maximus Minimus

2

순서는 맞지만 glDeleteProgram을 호출하면 연결된 모든 셰이더를 사용하여 자동으로 삭제되고 (glDeleteShader func로 삭제 플래그가 지정된 경우) 자동으로 삭제되므로 셰이더를 분리 할 필요가 없습니다.

참조 : http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgram.xml .


셰이더 개체는 각 프로그램에 비해 많은 메모리를 차지합니다. 프로그램 컴파일을 마치고 더 중요한 것들을 위해 더 많은 메모리를 사용할 수있게 한 후에 그것들을 삭제하는 것이 좋습니다.
Robert Rouhani
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.