Соответствие между формами сэмплера и единицами текстуры, используемыми glActiveTexture
, очевидно, не может быть запрошено с помощью opengl, и я не могу найти хорошую документацию о том, как найти, какая единица текстуры сопоставлена с какой униформой сэмплера.Вот что мне удалось найти:
- Если в программе есть только униформа сэмплера, тогда она отображается на
gl_TEXTURE0
- Если в форме есть несколько униформ сэмплераодин этап программы, затем они отображаются в порядке, в котором они объявлены в шейдере.
- Если у вершинного и фрагментного шейдеров есть непересекающиеся наборы форм сэмплеров, то сэмплеры в вершинном шейдере идут первыми и следуютсэмплерами в фрагментном шейдере.
- Это поведение, похоже, определяется спецификацией.
Так, например, если вершинный шейдер определяет:
uniform sampler2D color;
И фрагментный шейдер определяет:
uniform sampler2D tex;
uniform sampler2D norm;
Затем color
сопоставляется с gl_TEXTURE0
, tex
сопоставляется с gl_TEXTURE1
, а norm
сопоставляется с gl_TEXTURE2
.Но если вместо этого вершинный шейдер определяет:
uniform sampler2D norm;
, тогда неясно, как отображаются различные текстуры.Это дополнительно усложняется возможностью иметь квалификаторы макета или отдельные этапы шейдера.
Кажется, я нигде не могу найти документацию по этому вопросу.Все, что я знаю об этом, получено из моих собственных экспериментов или ответов на Stackoverflow или форуме OpenGL.Кто-нибудь знает исчерпывающий набор правил о том, как это работает во всех возможных случаях, или способ запроса текстурного блока, которому соответствует сэмплер?