Как сбросить стандартное значение атрибута программы OpenGL по умолчанию? - PullRequest
1 голос
/ 13 марта 2012

Допустим, у меня есть программа OpenGL, которая имеет унифицированный атрибут diffuseColor. Я установил это следующим образом:

GLint location = glGetUniformLocation(handle, "diffuseColor");
glUniform3f(location, 1, 0, 0);

Теперь я хотел бы вернуть ему значение по умолчанию, которое закодировано в коде шейдера. У меня нет доступа к исходному коду, но я могу вызывать функции OpenGL API в скомпилированной программе. Есть ли способ прочитать значение по умолчанию и установить его с помощью glUniform3f? Или даже лучше, есть что-то вроде glResetUniform3f(GLint loc)?

1 Ответ

3 голосов
/ 13 марта 2012

Унифицированные инициализаторы применяются при связывании программы.Затем значение можно прочитать с помощью glGetUniformfv / glGetUniformiv.Невозможно прочитать начальное значение униформы после того, как вы изменили унифицированное значение.

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

...