Могу ли я вызвать glDeleteShader после вызова glLinkProgram? - PullRequest
3 голосов
/ 12 января 2012

После того, как я связал свою программу, могу ли я удалить прикрепленные к ней шейдеры?

Ответы [ 2 ]

11 голосов
/ 12 января 2012

http://www.opengl.org/sdk/docs/man/xhtml/glDeleteShader.xml

Если подлежащий удалению шейдерный объект присоединен к программному объекту, он будет помечен для удаления, но не будет удален, пока не будет больше не привязан ни к какому программному объекту, для любого контекста рендеринга (т.е. он должен быть отделен от того места, где он был прикреплен до будут удалены).

1 голос
/ 14 июля 2016

Да, согласно документации: https://www.opengl.org/sdk/docs/man/html/glLinkProgram.xhtml

Обновляется информационный журнал объекта программы, и программа генерируется во время операции ссылки. После операции ссылки, приложения могут модифицировать вложенные шейдерные объекты, компилировать прикрепленные шейдерные объекты, отсоединение шейдерных объектов, удаление шейдерных объектов, и прикрепить дополнительные шейдерные объекты. Ни одна из этих операций не влияет информационный журнал или программа, являющаяся частью программного объекта.

Подводя итог: «После операции связывания приложения могут ... удалять шейдерные объекты. Ни одна из этих операций не влияет на ... программу, являющуюся частью программного объекта."

Это дает вам больше возможностей, чем вы думаете, согласно ответу BuzzSaw. В частности, вы можете удалить шейдер, который, как говорит theBuzzSaw, фактически не удалит шейдер, пока он не отсоединится. Но после связывания вы также можете отсоединить шейдер, что позволит вам полностью удалить его --- и на связанную программу это не повлияет.

Это раннее удаление шейдера используется в этом уроке:

http://www.opengl -tutorial.org / начинающих-учебники / учебник-2--первый-треугольник /

(хотя это прямо там не объясняется).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...