Мне было интересно, возможно ли иметь массив sampler2D в вершинном шейдере GLSL 1.5.
Мне нужно получить доступ к 30 различным 2d-текстурам из моего вершинного шейдера. Я читал, что невозможно иметь такую структуру, как:
uniform sampler2d texture[30];
Тем не менее, наличие 30 различных униформ несколько преувеличено и довольно сложно управлять ...
Итак, это привело меня к мысли о наличии объекта текстурного буфера. TBO поддерживаются начиная с OpenGL 3.0. Однако я не смог найти хороший учебник или пример, соответственно, который показывает, как инициализировать TBO не только одной текстурой, но и несколькими текстурами.
Этот веб-сайт показывает пример того, как инициализировать TBO с одной текстурой. Ничего страшного. Я думаю, что самый важный метод
void createTBO(GLuint* tbo, GLuint* tex)
Выполнив метод
glTexBufferEXT(GL_TEXTURE_BUFFER_EXT, GL_RGBA32F_ARB, *tbo);
можно фактически прикрепить текстуру к буферу. Это также упоминается здесь . Я предполагаю, что вызов glTexBuffer 30 раз один за другим не сработает.
Итак, я подумал, может ли быть другой способ получить тот же результат. Я придумал две идеи:
- Добавление 30 2d-текстур в 3d-текстуру и прикрепление их непосредственно к вершинному шейдеру. Однако это было бы большой тратой памяти, так как большинство слоев 3d-текстуры не использовалось бы.
- Использование структуры, называемой sampler2DArray. Это упоминается в спецификации. Однако я искал в Интернете и не смог найти никакой ценной информации о том, как это реализовать.
Итак, мои вопросы:
- Как настроить TBO, содержащий более 1 текстуры?
- Это вообще возможно?
- Знаете ли вы источники, где я мог бы найти информацию о добавлении 2d-текстур в 3d-текстуру?
- Знаете ли вы сайты, где я мог найти информацию об инициализации, связывании и использовании sampler2DArray?
Я был бы благодарен, если бы вы могли дать мне совет. Я действительно новичок с точки зрения OpenGL.
Спасибо
Walter