Если program содержит шейдерные объекты типа GL VERTEX_SHADER_ARB, но не содержит объектов типа GL_FRAGMEMT_SHADERARB, выполняемый модуль будет установлен только на вершинном процессоре, а для фрагментного будет использоваться стандартная функциональность. Точно так же, если program содержит шейдерные объекты типа GL_FRAGMENT_SHADER_ARB, но не содержит объектов типа GL_VERTEX SHADER_ARB, выполняемый модуль будет установлен только на фрагмент-ном процессоре, а для вершинного будет использоваться стандартная функциональность. Если program - 0, программируемые процессоры не используются, а вершины и фрагменты будут обрабатываться стандартным способом.

Успешная установка выполняемого модуля на программируемом процессоре автоматически блокирует соответствующую стандартную функциональность. Если выполняемый модуль устанавливается на вершинном процессоре, блокируется функциональность, описанная в разделе 4.1. Если выполняемый модуль устанавливается на фрагментом процессоре, блокируется функциональность, описанная в разделе 4.2.

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

API языка шейдеров OpenGL

7.4. Удаление данных

Если объекты больше не нужны, их необходимо удалять. Это можно сделать функцией

void glDeleteObjectARBCGLhandleARB object)

Эта функция освобождает память и делает недействительным идентификатор объекта object. Она аннулирует объекты, созданные функциями glCreateShader ObjectARB или glCreateProgramObjectARB.

Если удаляемый шейдерный объект присоединен к программному объекту, он будет отмечен для удаления, но не удален до тех пор, пока не отсоединится от всех программных объектов, к которым он был присоединен. А если удаляемый программный объект имеет присоединенные шейдерные объекты, они автоматически отсоединяются, но не удаляются (если только они не были ранее отмечены для удаления функцией glDeleteObjectARB).


⇐ Предыдущая| |Следующая ⇒