Чтобы определить, помечен ли какой-либо объект для удаления, можно вызвать glGetObjectParameterARB с аргументами object и GL_OBJECT_DELETE_STATLIS_ARB.
Шейдерный объект отсоединяется от программного объекта функцией
void glDetachObjectARBCGLhandleARB program. GLhandleARB shader)
Ею программируется отсоединение тендерного объекта shader от программного объекта program. Эта команда отменяет действие ранее выполненной команды
glAttachObjectARB.
Интересный программный прием, связанный с удалением объектов, состоит в том, чтобы удалять шейдерные объекты сразу же после присоединения их к программному. Тогда они не будут удаляться сразу, но будут помечены для удаления, и чтобы удалить все их сразу, нужно будет всего лишь удалить программный объект, к которому они присоединены. Тогда все шейдерные объекты будут автоматически отсоединены и удалены.
7.5. Функции запроса состояния
API языка шейдеров OpenGL содержит несколько функций для запроса состояния объекта. Чтобы получить тип объекта, подтип, результат выполнения операции над объектом, количество присоединенных объектов, количество активных атрибутов (см. раздел 7.6) и uniform-переменных (см. раздел 7.7) или длину любой строки из объекта, используется одна из следующих функций;
void glGetObjectParameterfvARB (GLhandleARB object. GLenum pname. GLfloat *params)
void glGetObjectParameterivARB (GLhandleARB object. GLenum pname. GLint *params)
Эти функции возвращают в params значение параметра объекта object. Они могут использоваться для получения информации об объекте. В табл. 7.1 значение pname показано слева, а выполняемая операция - справа.
Х5. Функции запроса состояния
1S9
Таблица 7.1. Запрашиваемые параметры объекта Параметр
Операция
GL_OBJECT_TYPE_ARB
GL_OBJECT_SUBTYPE_ARB
'fiL_OBJECT_DELETEJTATUS_ ARB GL_0BJ£CT_COMPILE_STATUS_ ARB
EL_OBJECT_L I NK_STATUS_ARB
SLJBJECTJALIDATE_STATUS_ ARB
GLJBJECTJNFO_LOG_LENGTH_ ARB
GL_OBJECT_ATTACHED„OBJECTS_ ARB GL_0BJECT_ACT1VE_ATTRIBUTES _ARB GL_0BJ ECTACTIVE_ATTRIBUTE_ MAXJ-ENGTH_ARB
GL_QBJECT_ACTIVE_UNIF0RMS_ ARB GL_0BJECT_ACTIVE_UNIFORM_HAX_LENGTH_ARB