หลังจาก glLinkProgram ที่ประสบความสำเร็จฉันควรลบ / ถอดเฉดสีของฉันออกหรือไม่


45

หลังจากฉันมีโปรแกรมที่เชื่อมโยงและคิดเกี่ยวกับการตั้งโปรแกรมการป้องกันฉันควรลบและถอดเฉดสีที่ใช้ในการเชื่อมโยงโปรแกรมนี้หรือไม่

ถ้าใช่นั่นคือการปลดปล่อยทรัพยากรใด ๆ หรือไม่? หรือว่าวัตถุ shader เหล่านี้จะได้รับการปลดปล่อยหลังจากเรียกใช้ glDeleteProgram เท่านั้น?

แก้ไข: เพียงเพื่อชี้แจงสิ่งที่ฉันทำคือ (ซึ่งสอดคล้องกับคำตอบ):

glCreateShader -> glShaderSource -> glCompileShader -> glCreateProgram -> glAttachShader -> glLinkProgram -> glDetachShader -> glDeleteShader -> วาดโดยใช้โปรแกรม shader นี้ -> และเมื่อฉันไม่ต้องการโปรแกรมนี้อีกต่อไป

คำตอบ:


46

ใช่คุณควรทำเช่นนี้เสมอ ฉันไม่ทราบเกี่ยวกับสิ่งนี้จนกระทั่งเมื่อไม่นานมานี้ แต่ shader จะไม่ถูกลบโดยจริงglDeleteShaderจนกว่าจะถูกถอดออก มันถูกกล่าวถึงในman page สำหรับglDetachShader

แก้ไข : เกือบพลาดบิตเกี่ยวกับการลบเฉดสีด้วย ใช่คุณควรทำเช่นนี้เพราะเพิ่มหน่วยความจำที่ใช้ในการจัดเก็บแหล่งที่มาของ Shader และรหัสวัตถุที่ไม่ได้เชื่อมโยง นี่คือรายละเอียดเพิ่มเติมในคำถาม StackOverflowนี้


+1 และมันทำให้การล้างข้อมูลง่ายขึ้นเนื่องจากคุณมีเพียงวัตถุเดียวที่จะติดตามและ glDelete
Maximus Minimus

2

คำสั่งซื้อนั้นถูกต้อง แต่คุณไม่จำเป็นต้องใส่ shaders อีกต่อไปเพราะการเรียก glDeleteProgram ทำเพื่อคุณด้วย shaders ที่แนบมาทั้งหมดจากนั้นพวกมันจะถูกลบโดยอัตโนมัติ

อ้างอิง: http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgram.xml


วัตถุ Shader ใช้หน่วยความจำมากเมื่อเทียบกับแต่ละโปรแกรม เป็นการดีกว่าที่จะลบพวกเขาหลังจากที่คุณรวบรวมโปรแกรมและมีหน่วยความจำเพิ่มเติมสำหรับสิ่งที่สำคัญกว่า
Robert Rouhani
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.