Cách thích hợp để thực hiện việc này là gì?OpenGL program/shader uninitialization
tôi đang làm các bước sau:
- Tạo Shader (s)
- Compile Shader (s)
- Tạo Chương trình
- Đính kèm Shader (s) để Chương trình
- Chương trình liên kết
- Xóa Shader (s)
Trong http://www.opengl.org/wiki/GLSL_Object nó nói: Bạn không cần phải loại bỏ rõ ràng các đối tượng đổ bóng, ngay cả sau khi liên kết chương trình. Tuy nhiên, bạn nên làm như vậy khi liên kết hoàn tất, nếu không thì đối tượng chương trình sẽ giữ các đối tượng shader đính kèm của nó còn sống khi bạn cố xóa chúng.
Và cũng từ Proper way to delete GLSL shader? cho biết nó sẽ tăng bộ nhớ nếu tôi không xóa các trình đổ bóng.
Vì vậy, việc kiểm tra trên http://www.opengl.org/sdk/docs/man/xhtml/glDetachShader.xml, nó nói Nếu shader đã được gắn cờ để xóa bởi một cuộc gọi đến glDeleteShader và nó không được gắn vào bất kỳ đối tượng chương trình khác, nó sẽ bị xóa sau khi nó đã được tách ra.
Vì vậy, # 6 của tôi là vô dụng trừ khi tôi tháo nó sau khi phải không?
Tôi có nên tách và xóa sau khi Chương trình đã được biên dịch chính xác (để tiết kiệm bộ nhớ) hay tôi nên tách/xóa chỉ khi ứng dụng của tôi đóng cửa?
sidenote: bạn cần gọi 'glLinkProgram' cho các thay đổi được thực hiện cho thuộc tính ràng buộc với 'glBindAttribLocation' để có hiệu lực.Vì vậy, nếu bạn xóa và tách các shaders khỏi một chương trình liên kết thì ràng buộc thuộc tính có thể không được thay đổi một cách hiệu quả mà không cần gắn lại các shaders với nó. – PeterT