Удалить несколько шейдеров при выходе? - PullRequest
0 голосов
/ 15 ноября 2011

Привет всем, я застрял в проблеме и хочу вашей помощи.Предположим, у меня есть 5 шейдеров GLSL, которые я успешно загрузил в свою программу opengl.Когда я хочу выйти из игры, я, конечно, должен удалить шейдеры.Итак, чтобы удалить шейдеры, мне нужно будет:

  1. Отключить шейдер от программы
  2. Удалить шейдер
  3. Удалить программу шейдера

для каждого шейдера с glDeleteShader, glDeleteProgram и т. д. один за другим?Если есть более простые и простые способы, пожалуйста, скажите мне.Заранее спасибо!

1 Ответ

4 голосов
/ 15 ноября 2011

Почему вы ждете до конца вашего приложения, чтобы удалить ваши шейдерные объекты? Вы должны были избавиться от них после того, как связали программы для них. Просто прикрепите их к программе, свяжите их, отсоедините и удалите (если вы не используете повторно шейдерные объекты).

Как только вы больше не носите с собой багаж шейдерных объектов, все просто. Просто удалите программы.

Или нет. Тебе решать; контекст OpenGL будет очищаться после себя. Но если вы хотите удалить их, то удалите их.

Если у вас есть их в 50 различных переменных, в которых хранятся программы, и вы не хотите набирать glDeleteProgram 50 раз, тогда совершенно очевидно, что ваш код плохо структурирован по размеру. Если у вас есть такое количество программ, вам необходимо приобрести систему управления ресурсами, где вы можете управлять ресурсами (например, загруженными программами) и обеспечивать их уничтожение. И под «заготовкой» я подразумеваю «написать».

Менеджеры ресурсов - это, по сути, блоки, в которые вы помещаете именованные объекты и получаете их. Когда менеджер ресурсов уничтожается, все ресурсы, которыми он управляет, также уничтожаются (обратите внимание: существуют способы сделать менеджер ресурсов, который может иметь альтернативные способы уничтожения вещей).

...