Связывание текстур в OpenGL - PullRequest
15 голосов
/ 10 марта 2011

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

Теперь мой вопрос: можно ли просто повторно связать все текстуры, которые мне нужны во время пакета, хотя некоторые изони уже могут быть связаны?Или я должен проверить, какие из них связаны, и связывать только новые?Сколько стоит glBindTexture?Я использую шейдеры, плохо ли иметь неиспользуемые текстуры, привязанные к текстурным блокам, из которых шейдер не будет сэмплировать, или я должен открепить их?

Я в основном спрашиваю "как сделать это быстро", а не «как».

РЕДАКТИРОВАТЬ: Это поможет, если я предоставил код?

Ответы [ 3 ]

12 голосов
/ 10 марта 2011

Святое правило программирования на GPU - чем меньше ты общаешься с GPU, тем больше она любит тебя. glBindTexture намного дороже, чем одиночная проверка состояния процессора, поэтому при частых изменениях состояния, я думаю, вам следует посмотреть, есть ли необходимость переносить новый индекс текстуры в графический процессор.

4 голосов
/ 11 марта 2011

Ответ труден, потому что любая сильная реализация GL должна сделать связывание уже связанной текстуры запретом в качестве оптимизации. Вам следует попробовать сделать бенчмаркинг, чтобы определить, имеет ли значение условие или нет.

То же самое относится и к неиспользуемым текстурам в текстурных блоках, так как реализация GL знает, какие текстурные блоки в конечном итоге используются, это не должно влиять на производительность (как оптимизацию), чтобы иметь неиспользуемые текстурные блоки.

0 голосов
/ 11 марта 2011

Отслеживайте, какие текстуры вы связали (не используйте glGet (GL_TEXTURE_BINDING_2D)) и только перепроверяйте, если он изменится.Некоторые водители сделают это за вас, некоторые - нет.

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

Вы также можете отсортировать свои партии по тем текстурам, на которые они нацелены.используют, чтобы минимизировать изменения текстуры.

...