OpenGL MAX_FRAGMENT_UNIFORM_COMPONENTS - PullRequest
       43

OpenGL MAX_FRAGMENT_UNIFORM_COMPONENTS

0 голосов
/ 18 февраля 2020

Итак, я работаю с шейдером, который имеет несколько четырехмерных векторных массивов, которые динамически изменяются во время компиляции. Эти массивы могут быть установлены на довольно большую длину с помощью другой части кода (до 512 элементов). Однако из-за единообразных ограничений фрагментов на некоторых машинах и при определенных параметрах компиляции массивы невозможно долго хранить без сбоя шейдера.

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

Я знаю, что MAX_FRAGMENT_UNIFORM_COMPONENTS - это поле, которое мне нужно посмотреть, по сравнению с размеры компонентов каждого элемента массива (поэтому массив vec4 длиной 10, я полагаю, будет занимать 40 компонентов). Если я правильно понимаю, это ограничение является глобальным для шейдера, а также относится и к униформам без массивов. Однако одна вещь вводит меня в заблуждение:

Сэмплеры.

Сколько, если таковые имеются, сэмплеры используют этот компонент? Если я собираюсь успешно реализовать верхний предел размера массива, мне нужен точный подсчет того, когда именно массив будет «слишком большим», чтобы я мог обрезать его чуть ниже этой точки. Я просмотрел все, но я не могу найти информацию о том, сколько компонентов взял бы сэмплер. Может ли кто-нибудь помочь мне здесь?

...