Войти
ПрограммированиеФорумГрафика

glBindTexture привязывается к шейдеру?

Advanced: Тема повышенной сложности или важная.

Страницы: 1 2 3 4 Следующая »
#0
17:00, 30 июля 2019

В общем делал текстур кэш. И наткнулся на багу, что если шейдеров несколько, то при использовании текстурного кэша текстуры рендерятся не те. Однако, если кэш сбрасывать при смене шейдера, то все ок.
Звучит, как будто бы glBindTexture привязывается к шейдеру.
Так ли это или в чем то другом бага?


#1
17:07, 30 июля 2019

glActiveTexture - выбираем слот
glBindTexture - биндим текстуру в выбранный слот
glUniform1i - сообщаем шейдеру в каком слоте лежит текстура
Возможно делать так каждый кадр не очень экономично, но кто гарантирует состояние юниформов после переключения программ? Есть ли это в стандарте или зависит от реализации?
А у вас какая последовательность действий?

#2
(Правка: 17:13) 17:12, 30 июля 2019


Ranma
> Есть ли это в стандарте или зависит от реализации?
> А у вас какая последовательность действий?


2.11.7 Uniform Variables
... Uniforms are program object-specific state. They retain their values once loaded, and their values are restored whenever a program object is used, as long as the program object has not been re-linked. ...

#3
17:13, 30 июля 2019

Ranma
> но кто гарантирует состояние юниформов после переключения программ?

юниформы внутри программы

#4
(Правка: 17:20) 17:19, 30 июля 2019

Ranma
проблема в glBindTexture 
если я сохраняю в какой слот какая текстура лежит, и потом не вызываю glBindTexture если в этом слоте лежит уже такая текстура, то начинаются баги

С юниформами все ок

#5
17:22, 30 июля 2019

oxotnik
> В общем делал текстур кэш.

зачем?

#6
(Правка: 17:26) 17:22, 30 июля 2019

oxotnik если ты пишешь на GL 4.5 то лучше биндлес текстуры юзать.

Тогда в шейдер просто передаешь нужный номер биндлес текстуры.
glUniform1f\glUniform2f\glUniform3f\glUniform4f

Или биндлес текстура берет номер draw instance number в шейдере.

#7
17:25, 30 июля 2019

innuendo
glBindTexture дорогой
профайлер подтвердил
GL старый

#8
(Правка: 17:30) 17:26, 30 июля 2019

Текстурный атлас у тебя держит ?
Texture2dArray.
Можно несколько слотов для нескольких Texture2dArray у всех шейдеров.
Что бы универсально было.

Не знаю сколько в GL.
Но в Directx 11 один Texture2dArray мог в себе 2000 текстур содержать. Текстуры должны быть одного размера !

#9
17:27, 30 июля 2019

oxotnik
> glBindTexture дорогой

по сравнению с чем ? покажи данные профайлера

#10
17:30, 30 июля 2019

innuendo
2-4 процента гейм лупа уходит на glBindTexture
Профайлер далековато сейчас, доступа нет

#11
17:35, 30 июля 2019

oxotnik
Вопрос был про то, имеют ли шейдеры каждый свой набор слотов или они общие на все шейдеры

#12
17:37, 30 июля 2019

oxotnik
> или они общие на все шейдеры

да

#13
17:43, 30 июля 2019

oxotnik
А если посмотреть через RenderDoc или NSight?

#14
17:46, 30 июля 2019

innuendo
Спасибо, буду тогда искать в чем бага

Страницы: 1 2 3 4 Следующая »
ПрограммированиеФорумГрафика