Современный OPENGL не может изменять равномерное значение между вызовами glDrawArrays
EDIT: мне просто удалось решить эту проблему, переустановив PyOpenGL с pip. Та же программа теперь работает, как и ожидалось. Спасибо за ваши усилия.
Весь вопрос был переписан и уточнен.
Проблема не заключается в (хотя и странном) подходе к созданию текстур и связыванию, как это объясняется в комментариях.
Моя реальная проблема заключается в том, что однородные переменные в шейдерах не обновляют свои значения при изменении (да, изменено извне шейдера) между вызовами glDrawArrays(). Я проверил это, используя различные типы униформ, различные значения и проверяя их значения путем рендеринга в текстуру.
похоже, что значения униформы блокируются, как только вызывается glDrawArrays (). После этого я могу изменить их только тогда, когда буфер цвета будет очищен.
Я готов дать щедрую награду за любое рабочее решение. размещение любого исходного кода не является полезным в моем мнение, поскольку проблема, похоже, не лежит в коде.
Любые предложения принимаются.
1 ответ:
Вы можете обновить униформу между вызовами draw, вот как они должны использоваться.
Глядя на вставленный код, и, как указано в комментариях, строки 167..169 должно работать случайно для маленьких тексидов, но вы должны действительно изменить
glUniform1i(textureUnif, model.texId) glActiveTexture(GL_TEXTURE0+model.texId) glBindTexture(GL_TEXTURE_2D, model.texId)
К
Хотя, поскольку все, что вы используете, - этоglUniform1i(textureUnif, 0) glActiveTexture(GL_TEXTURE0) glBindTexture(GL_TEXTURE_2D, model.texId)
GL_TEXTURE0
, вам действительно нужен только вызовglBindTexture()
на каждой итерации цикла. Текстурная форма должна содержать текстурную единицу, шейдер не имеет понятия идентификатора текстуры в этом случае. дело.Конечно, это OpenGL, ошибки часто трудно найти. Что вы на самом деле пытаетесь нарисовать? Скриншоты были бы полезны.
Вполне возможно, что что-то еще в состоянии OpenGL приводит к тому, что равномерное обновление не отображается на экране, например, тестирование глубины-это один общий виновник.