OpenGL получает шейдер, подключенный к программе

есть ли способ получить доступ к шейдерам, подключенным к программе? То есть, учитывая программу, могу ли я сделать что-то вроде:

vertexShader = getVertexShaderFromProgram(program);

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

1 ответов


  1. glGetAttachedShaders() чтобы получить имена шейдеров, прикрепленных к данному объекту программы.

  2. glGetShaderiv( ..., GL_SHADER_TYPE, ... ) чтобы получить тип (вершина, геометрия, фрагмент) шейдера.

  3. glGetShaderiv( ..., GL_SHADER_SOURCE_LENGTH, ... ) на каждом имени шейдера, чтобы выяснить, как долго источник.

  4. glGetShaderSource() чтобы получить исходную строку для каждого прилагается шейдерный.

редактировать: если все, что вам нужно, это имена и типы шейдеров, вы можете остановиться после шага 2.